@@ -29,51 +29,53 @@ namespace datasketches {
29
29
static const uint64_t IGOLDEN64 = 0x9e3779b97f4a7c13ULL ;
30
30
31
31
TEST_CASE (" pack unpack bits" ) {
32
- for ( uint8_t bits = 1 ; bits <= 63 ; ++bits) {
33
- int n = 8 ;
34
- const uint64_t mask = ( 1ULL << bits) - 1 ;
35
- std::vector< uint64_t > input (n, 0 ) ;
36
- const uint64_t igolden64 = IGOLDEN64 ;
37
- uint64_t value = 0xaa55aa55aa55aa55ULL ; // arbitrary starting value
38
- for (int i = 0 ; i < n; ++i) {
39
- input[i] = value & mask;
40
- value += igolden64 ;
41
- }
42
- std::vector<uint8_t > bytes (n * sizeof (uint64_t ), 0 );
43
- uint8_t offset = 0 ;
44
- uint8_t * ptr = bytes.data ();
45
- for (int i = 0 ; i < n; ++i) {
46
- offset = pack_bits (input[i], bits, ptr, offset);
47
- }
32
+ uint64_t value = 0xaa55aa55aa55aa55ULL ; // arbitrary starting value
33
+ for ( int m = 0 ; m < 100 ; ++m) {
34
+ for ( uint8_t bits = 1 ; bits <= 63 ; ++ bits) {
35
+ int n = 8 ;
36
+ const uint64_t mask = ( 1ULL << bits) - 1 ;
37
+ std::vector< uint64_t > input (n, 0 );
38
+ for (int i = 0 ; i < n; ++i) {
39
+ input[i] = value & mask;
40
+ value += IGOLDEN64 ;
41
+ }
42
+ std::vector<uint8_t > bytes (n * sizeof (uint64_t ), 0 );
43
+ uint8_t offset = 0 ;
44
+ uint8_t * ptr = bytes.data ();
45
+ for (int i = 0 ; i < n; ++i) {
46
+ offset = pack_bits (input[i], bits, ptr, offset);
47
+ }
48
48
49
- std::vector<uint64_t > output (n, 0 );
50
- offset = 0 ;
51
- const uint8_t * cptr = bytes.data ();
52
- for (int i = 0 ; i < n; ++i) {
53
- offset = unpack_bits (output[i], bits, cptr, offset);
54
- }
55
- for (int i = 0 ; i < n; ++i) {
56
- REQUIRE (input[i] == output[i]);
49
+ std::vector<uint64_t > output (n, 0 );
50
+ offset = 0 ;
51
+ const uint8_t * cptr = bytes.data ();
52
+ for (int i = 0 ; i < n; ++i) {
53
+ offset = unpack_bits (output[i], bits, cptr, offset);
54
+ }
55
+ for (int i = 0 ; i < n; ++i) {
56
+ REQUIRE (input[i] == output[i]);
57
+ }
57
58
}
58
59
}
59
60
}
60
61
61
62
TEST_CASE (" pack unpack blocks" ) {
62
- for (uint8_t bits = 1 ; bits <= 63 ; ++bits) {
63
- const uint64_t mask = (1ULL << bits) - 1 ;
64
- std::vector<uint64_t > input (8 , 0 );
65
- const uint64_t igolden64 = IGOLDEN64;
66
- uint64_t value = 0xaa55aa55aa55aa55ULL ; // arbitrary starting value
67
- for (int i = 0 ; i < 8 ; ++i) {
68
- input[i] = value & mask;
69
- value += igolden64;
70
- }
71
- std::vector<uint8_t > bytes (8 * sizeof (uint64_t ), 0 );
72
- pack_bits_block8 (input.data (), bytes.data (), bits);
73
- std::vector<uint64_t > output (8 , 0 );
74
- unpack_bits_block8 (output.data (), bytes.data (), bits);
75
- for (int i = 0 ; i < 8 ; ++i) {
76
- REQUIRE ((input[i] & mask) == output[i]);
63
+ uint64_t value = 0xaa55aa55aa55aa55ULL ; // arbitrary starting value
64
+ for (int n = 0 ; n < 100 ; ++n) {
65
+ for (uint8_t bits = 1 ; bits <= 63 ; ++bits) {
66
+ const uint64_t mask = (1ULL << bits) - 1 ;
67
+ std::vector<uint64_t > input (8 , 0 );
68
+ for (int i = 0 ; i < 8 ; ++i) {
69
+ input[i] = value & mask;
70
+ value += IGOLDEN64;
71
+ }
72
+ std::vector<uint8_t > bytes (bits, 0 );
73
+ pack_bits_block8 (input.data (), bytes.data (), bits);
74
+ std::vector<uint64_t > output (8 , 0 );
75
+ unpack_bits_block8 (output.data (), bytes.data (), bits);
76
+ for (int i = 0 ; i < 8 ; ++i) {
77
+ REQUIRE (input[i] == output[i]);
78
+ }
77
79
}
78
80
}
79
81
}
0 commit comments