1 #include <iostream>
2 #include <stdint.h>
3 #include <stdlib.h>
4 
5 #include "judyS2Array.h"
6 
7 typedef judyS2Array< uint64_t > js2a;
8 
testFind(js2a & j,const char * key,unsigned int count)9 bool testFind( js2a & j, const char * key, unsigned int count ) {
10     js2a::cvector * v = j.find( key );
11     std::cout << "find: key " << key << " ..." << std::endl;
12     if( count > 0 ) {
13         if( !v || !j.success() || ( v->size() != count ) ) {
14             std::cout << "    false negative - v: " << v << " success: " << j.success();
15             if( v ) {
16                 std::cout << "    expected count: " << count << " actual: " << v->size();
17             }
18             std::cout << std::endl;
19             return false;
20         } else {
21             // note - this doesn't verify that the right keys are returned, just the right number!
22             js2a::vector::const_iterator it = v->begin();
23             std::cout << "    correct number of values -";
24             for( ; it != v->end(); it++ ) {
25                 std::cout << " " << *it;
26             }
27             std::cout << std::endl;
28         }
29     } else {
30         if( v || j.success() ) {
31             std::cout << "    false positive - v: " << v << " success: " << j.success() << std::endl;
32             return false;
33         } else {
34             std::cout << "    not found, as expected." << std::endl;
35         }
36     }
37     return true;
38 }
39 
main()40 int main() {
41     bool pass = true;
42     std::cout.setf( std::ios::boolalpha );
43 
44     js2a js( 255 );
45     js.insert( "blah", 1234 );
46     js.insert( "bah",   124 );
47     js.insert( "blh",   123 );
48     js.insert( "blh",  4123 );
49     js.insert( "bla",   134 );
50     js.insert( "bh",    234 );
51 
52     js2a::cpair kv = js.atOrAfter( "ab" );
53     std::cout << "atOrAfter test ..." << std::endl;
54     if( kv.value != 0 && js.success() ) {
55         std::cout << "    key " << kv.key << "    value " << kv.value->at( 0 ) << std::endl;
56     } else {
57         std::cout << "    failed" << std::endl;
58         pass = false;
59     }
60 
61     pass &= testFind( js, "sdafsd",  0 );
62     pass &= testFind( js, "bah",  1 );
63     pass &= testFind( js, "blh",  2 );
64 
65     js.clear();
66 
67     //TODO test all of judyS2Array
68     if( pass ) {
69         std::cout << "All tests passed." << std::endl;
70         exit( EXIT_SUCCESS );
71     } else {
72         std::cout << "At least one test failed." << std::endl;
73         exit( EXIT_FAILURE );
74     }
75 }