@@ -26,8 +26,8 @@ key_comparer (instance_data_t data, size_t lhs, size_t rhs) {
26
26
#define DN_SIMDHASH_KEY_HASHER (data , key ) (uint32_t)(key & 0xFFFFFFFFu)
27
27
#define DN_SIMDHASH_KEY_EQUALS key_comparer
28
28
#define DN_SIMDHASH_INSTANCE_DATA_T instance_data_t
29
- #define DN_SIMDHASH_ON_REMOVE (data , key , value ) ; // printf("remove [%zd, %zd], f==%f\n", key, value, data.f)
30
- #define DN_SIMDHASH_ON_REPLACE (data , key , old_value , new_value ) ; // printf("replace [%zd, %zd] with [%zd, %zd] i==%i\n", key, old_value, key, new_value, data.i)
29
+ #define DN_SIMDHASH_ON_REMOVE (data , key , value ) // printf("remove [%zd, %zd], f==%f\n", key, value, data.f)
30
+ #define DN_SIMDHASH_ON_REPLACE (data , old_key , new_key , old_value , new_value ) // printf("replace [%zd, %zd] with [%zd, %zd] i==%i\n", key, old_value, key, new_value, data.i)
31
31
32
32
#include "dn-simdhash-specialization.h"
33
33
@@ -79,7 +79,7 @@ int main () {
79
79
80
80
for (int i = 0 ; i < c ; i ++ ) {
81
81
DN_SIMDHASH_VALUE_T value = (i * 2 ) + 1 ;
82
- DN_SIMDHASH_KEY_T key ;
82
+ DN_SIMDHASH_KEY_T key ;
83
83
84
84
retry : {
85
85
key = rand ();
@@ -92,92 +92,92 @@ retry: {
92
92
dn_vector_push_back (values , value );
93
93
}
94
94
95
- for (int iter = 0 ; iter < 100 ; iter ++ ) {
96
- if (!tasserteq (dn_simdhash_count (test ), c , "count did not match" ))
97
- return 1 ;
98
-
99
- printf ("Calling foreach:\n" );
100
- uint32_t foreach_count = 0 ;
101
- dn_simdhash_size_t_size_t_foreach (test , foreach_callback , & foreach_count );
102
- printf ("Foreach iterated %u time(s)\n" , foreach_count );
103
- printf ("Count: %u, Capacity: %u, Cascaded item count: %u\n" , dn_simdhash_count (test ), dn_simdhash_capacity (test ), count_cascaded_buckets (test ));
104
-
105
- for (int i = 0 ; i < c ; i ++ ) {
106
- DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
107
- DN_SIMDHASH_VALUE_T value , expected_value = * dn_vector_index_t (values , DN_SIMDHASH_VALUE_T , i );
108
-
109
- uint8_t ok = dn_simdhash_size_t_size_t_try_get_value (test , key , & value );
110
- if (tassert1 (ok , key , "did not find key" ))
111
- tasserteq (value , expected_value , "value did not match" );
112
- }
113
-
114
- // NOTE: Adding duplicates could grow the table if we're unlucky, since the add operation
115
- // eagerly grows before doing a table scan if we're at the grow threshold.
116
- for (int i = 0 ; i < c ; i ++ ) {
117
- DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
118
- DN_SIMDHASH_VALUE_T value = * dn_vector_index_t (values , DN_SIMDHASH_VALUE_T , i );
119
-
120
- uint8_t ok = dn_simdhash_size_t_size_t_try_add (test , key , value );
121
- tassert1 (!ok , key , "added duplicate key successfully" );
122
- }
123
-
124
- printf ("After adding dupes: Count: %u, Capacity: %u, Cascaded item count: %u\n" , dn_simdhash_count (test ), dn_simdhash_capacity (test ), count_cascaded_buckets (test ));
125
- uint32_t final_capacity = dn_simdhash_capacity (test );
126
-
127
- for (int i = 0 ; i < c ; i ++ ) {
128
- DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
129
- uint8_t ok = dn_simdhash_size_t_size_t_try_remove (test , key );
130
- tassert1 (ok , key , "could not remove key" );
131
-
132
- DN_SIMDHASH_VALUE_T value ;
133
- ok = dn_simdhash_size_t_size_t_try_get_value (test , key , & value );
134
- tassert1 (!ok , key , "found key after removal" );
135
- }
136
-
137
- if (!tasserteq (dn_simdhash_count (test ), 0 , "was not empty" ))
138
- return 1 ;
139
- if (!tasserteq (dn_simdhash_capacity (test ), final_capacity , "capacity changed by emptying" ))
140
- return 1 ;
141
-
142
- printf ("Calling foreach after emptying:\n" );
143
- foreach_count = 0 ;
144
- dn_simdhash_size_t_size_t_foreach (test , foreach_callback , & foreach_count );
145
- printf ("Foreach iterated %u time(s)\n" , foreach_count );
146
- printf ("Count: %u, Capacity: %u, Cascaded item count: %u\n" , dn_simdhash_count (test ), dn_simdhash_capacity (test ), count_cascaded_buckets (test ));
147
-
148
- for (int i = 0 ; i < c ; i ++ ) {
149
- DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
150
- DN_SIMDHASH_VALUE_T value ;
151
- uint8_t ok = dn_simdhash_size_t_size_t_try_get_value (test , key , & value );
152
- tassert1 (!ok , key , "found key after removal" );
153
- }
154
-
155
- for (int i = 0 ; i < c ; i ++ ) {
156
- DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
157
- DN_SIMDHASH_VALUE_T value = * dn_vector_index_t (values , DN_SIMDHASH_VALUE_T , i );
158
-
159
- uint8_t ok = dn_simdhash_size_t_size_t_try_add (test , key , value );
160
- tassert1 (ok , key , "could not re-insert key after emptying" );
161
- }
162
-
163
- if (!tasserteq (dn_simdhash_capacity (test ), final_capacity , "expected capacity not to change after refilling" ))
164
- return 1 ;
165
-
166
- for (int i = 0 ; i < c ; i ++ ) {
167
- DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
168
- DN_SIMDHASH_VALUE_T value , expected_value = * dn_vector_index_t (values , DN_SIMDHASH_VALUE_T , i );
169
-
170
- uint8_t ok = dn_simdhash_size_t_size_t_try_get_value (test , key , & value );
171
- if (tassert1 (ok , key , "did not find key after refilling" ))
172
- tasserteq (value , expected_value , "value did not match after refilling" );
173
- }
174
-
175
- printf ("Calling foreach after refilling:\n" );
176
- foreach_count = 0 ;
177
- dn_simdhash_size_t_size_t_foreach (test , foreach_callback , & foreach_count );
178
- printf ("Foreach iterated %u time(s)\n" , foreach_count );
179
- printf ("Count: %u, Capacity: %u, Cascaded item count: %u\n" , dn_simdhash_count (test ), dn_simdhash_capacity (test ), count_cascaded_buckets (test ));
180
- }
95
+ for (int iter = 0 ; iter < 100 ; iter ++ ) {
96
+ if (!tasserteq (dn_simdhash_count (test ), c , "count did not match" ))
97
+ return 1 ;
98
+
99
+ printf ("Calling foreach:\n" );
100
+ uint32_t foreach_count = 0 ;
101
+ dn_simdhash_size_t_size_t_foreach (test , foreach_callback , & foreach_count );
102
+ printf ("Foreach iterated %u time(s)\n" , foreach_count );
103
+ printf ("Count: %u, Capacity: %u, Cascaded item count: %u\n" , dn_simdhash_count (test ), dn_simdhash_capacity (test ), count_cascaded_buckets (test ));
104
+
105
+ for (int i = 0 ; i < c ; i ++ ) {
106
+ DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
107
+ DN_SIMDHASH_VALUE_T value , expected_value = * dn_vector_index_t (values , DN_SIMDHASH_VALUE_T , i );
108
+
109
+ uint8_t ok = dn_simdhash_size_t_size_t_try_get_value (test , key , & value );
110
+ if (tassert1 (ok , key , "did not find key" ))
111
+ tasserteq (value , expected_value , "value did not match" );
112
+ }
113
+
114
+ // NOTE: Adding duplicates could grow the table if we're unlucky, since the add operation
115
+ // eagerly grows before doing a table scan if we're at the grow threshold.
116
+ for (int i = 0 ; i < c ; i ++ ) {
117
+ DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
118
+ DN_SIMDHASH_VALUE_T value = * dn_vector_index_t (values , DN_SIMDHASH_VALUE_T , i );
119
+
120
+ uint8_t ok = dn_simdhash_size_t_size_t_try_add (test , key , value );
121
+ tassert1 (!ok , key , "added duplicate key successfully" );
122
+ }
123
+
124
+ printf ("After adding dupes: Count: %u, Capacity: %u, Cascaded item count: %u\n" , dn_simdhash_count (test ), dn_simdhash_capacity (test ), count_cascaded_buckets (test ));
125
+ uint32_t final_capacity = dn_simdhash_capacity (test );
126
+
127
+ for (int i = 0 ; i < c ; i ++ ) {
128
+ DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
129
+ uint8_t ok = dn_simdhash_size_t_size_t_try_remove (test , key );
130
+ tassert1 (ok , key , "could not remove key" );
131
+
132
+ DN_SIMDHASH_VALUE_T value ;
133
+ ok = dn_simdhash_size_t_size_t_try_get_value (test , key , & value );
134
+ tassert1 (!ok , key , "found key after removal" );
135
+ }
136
+
137
+ if (!tasserteq (dn_simdhash_count (test ), 0 , "was not empty" ))
138
+ return 1 ;
139
+ if (!tasserteq (dn_simdhash_capacity (test ), final_capacity , "capacity changed by emptying" ))
140
+ return 1 ;
141
+
142
+ printf ("Calling foreach after emptying:\n" );
143
+ foreach_count = 0 ;
144
+ dn_simdhash_size_t_size_t_foreach (test , foreach_callback , & foreach_count );
145
+ printf ("Foreach iterated %u time(s)\n" , foreach_count );
146
+ printf ("Count: %u, Capacity: %u, Cascaded item count: %u\n" , dn_simdhash_count (test ), dn_simdhash_capacity (test ), count_cascaded_buckets (test ));
147
+
148
+ for (int i = 0 ; i < c ; i ++ ) {
149
+ DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
150
+ DN_SIMDHASH_VALUE_T value ;
151
+ uint8_t ok = dn_simdhash_size_t_size_t_try_get_value (test , key , & value );
152
+ tassert1 (!ok , key , "found key after removal" );
153
+ }
154
+
155
+ for (int i = 0 ; i < c ; i ++ ) {
156
+ DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
157
+ DN_SIMDHASH_VALUE_T value = * dn_vector_index_t (values , DN_SIMDHASH_VALUE_T , i );
158
+
159
+ uint8_t ok = dn_simdhash_size_t_size_t_try_add (test , key , value );
160
+ tassert1 (ok , key , "could not re-insert key after emptying" );
161
+ }
162
+
163
+ if (!tasserteq (dn_simdhash_capacity (test ), final_capacity , "expected capacity not to change after refilling" ))
164
+ return 1 ;
165
+
166
+ for (int i = 0 ; i < c ; i ++ ) {
167
+ DN_SIMDHASH_KEY_T key = * dn_vector_index_t (keys , DN_SIMDHASH_KEY_T , i );
168
+ DN_SIMDHASH_VALUE_T value , expected_value = * dn_vector_index_t (values , DN_SIMDHASH_VALUE_T , i );
169
+
170
+ uint8_t ok = dn_simdhash_size_t_size_t_try_get_value (test , key , & value );
171
+ if (tassert1 (ok , key , "did not find key after refilling" ))
172
+ tasserteq (value , expected_value , "value did not match after refilling" );
173
+ }
174
+
175
+ printf ("Calling foreach after refilling:\n" );
176
+ foreach_count = 0 ;
177
+ dn_simdhash_size_t_size_t_foreach (test , foreach_callback , & foreach_count );
178
+ printf ("Foreach iterated %u time(s)\n" , foreach_count );
179
+ printf ("Count: %u, Capacity: %u, Cascaded item count: %u\n" , dn_simdhash_count (test ), dn_simdhash_capacity (test ), count_cascaded_buckets (test ));
180
+ }
181
181
182
182
printf ("done\n" );
183
183
0 commit comments