@@ -29,51 +29,53 @@ namespace datasketches {
2929static const uint64_t IGOLDEN64 = 0x9e3779b97f4a7c13ULL ;
3030
3131TEST_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+ }
4848
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+ }
5758 }
5859 }
5960}
6061
6162TEST_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+ }
7779 }
7880 }
7981}
0 commit comments