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 }