+void big_iteration_test (CuTest* tc) {
+ static const int n = 10000;
+
+#ifdef TEST_STRING_KEYS
+ map_t *map = map_alloc(map_type_, &DATATYPE_NSTRING);
+ nstring_t *key = ns_alloc(9);
+ nstring_t *k3 = ns_alloc(3); strcpy(k1->data, "k3");
+ nstring_t *k4 = ns_alloc(3); strcpy(k1->data, "k4");
+#else
+ map_t *map = map_alloc(map_type_, NULL);
+ void *k3 = (void *)3;
+ void *k4 = (void *)4;
+ void *key;
+#endif
+
+ for (size_t i = 1; i <= n; ++i) {
+#ifdef TEST_STRING_KEYS
+ memset(key->data, 0, key->len);
+ snprintf(key->data, key->len, "k%llu", i);
+#else
+ key = (void *)i;
+#endif
+ ASSERT_EQUAL( DOES_NOT_EXIST, map_get(map, key) );
+ ASSERT_EQUAL( DOES_NOT_EXIST, map_set(map, key, i) );
+ ASSERT_EQUAL( i, map_get(map, key) );
+ rcu_update(); // In a quiecent state.
+ }
+
+ ASSERT_EQUAL( n, map_count(map) );
+ ASSERT_EQUAL( n, iterator_size(map) );
+
+ uint64_t sum = 0;
+ uint64_t val;
+ map_iter_t *iter = map_iter_begin(map, NULL);
+ while ((val = map_iter_next(iter, NULL)) != DOES_NOT_EXIST) {
+ sum += val;
+ }
+ map_iter_free(iter);
+ ASSERT_EQUAL(n*(n+1)/2, sum);
+ ASSERT_EQUAL(3, map_remove(map, k3));
+ ASSERT_EQUAL(4, map_remove(map, k4));
+ sum = 0;
+ iter = map_iter_begin(map, NULL);
+ while ((val = map_iter_next(iter, NULL)) != DOES_NOT_EXIST) {
+ sum += val;
+ }
+ map_iter_free(iter);
+ ASSERT_EQUAL(n*(n+1)/2 - (3+4), sum);
+
+#ifdef TEST_STRING_KEYS
+ nbd_free(key);
+#endif