|
@@ -5,6 +5,7 @@
|
|
|
|
|
|
#include "orconfig.h"
|
|
|
#include "or.h"
|
|
|
+#include "fp_pair.h"
|
|
|
#include "test.h"
|
|
|
|
|
|
/** Helper: return a tristate based on comparing the strings in *<b>a</b> and
|
|
@@ -782,6 +783,88 @@ test_container_order_functions(void)
|
|
|
;
|
|
|
}
|
|
|
|
|
|
+/** Run unit tests for fp_pair-to-void* map functions */
|
|
|
+static void
|
|
|
+test_container_fp_pair_map(void)
|
|
|
+{
|
|
|
+ fp_pair_map_t *map;
|
|
|
+ fp_pair_t fp1, fp2, fp3, fp4, fp5, fp6;
|
|
|
+ void *v;
|
|
|
+ fp_pair_map_iter_t *iter;
|
|
|
+ fp_pair_t k;
|
|
|
+
|
|
|
+ map = fp_pair_map_new();
|
|
|
+ test_assert(map);
|
|
|
+ test_eq(fp_pair_map_size(map), 0);
|
|
|
+ test_assert(fp_pair_map_isempty(map));
|
|
|
+
|
|
|
+ memset(fp1.first, 0x11, DIGEST_LEN);
|
|
|
+ memset(fp1.second, 0x12, DIGEST_LEN);
|
|
|
+ memset(fp2.first, 0x21, DIGEST_LEN);
|
|
|
+ memset(fp2.second, 0x22, DIGEST_LEN);
|
|
|
+ memset(fp3.first, 0x31, DIGEST_LEN);
|
|
|
+ memset(fp3.second, 0x32, DIGEST_LEN);
|
|
|
+ memset(fp4.first, 0x41, DIGEST_LEN);
|
|
|
+ memset(fp4.second, 0x42, DIGEST_LEN);
|
|
|
+ memset(fp5.first, 0x51, DIGEST_LEN);
|
|
|
+ memset(fp5.second, 0x52, DIGEST_LEN);
|
|
|
+ memset(fp6.first, 0x61, DIGEST_LEN);
|
|
|
+ memset(fp6.second, 0x62, DIGEST_LEN);
|
|
|
+
|
|
|
+ v = fp_pair_map_set(map, &fp1, (void*)99);
|
|
|
+ test_eq(v, NULL);
|
|
|
+ test_assert(!fp_pair_map_isempty(map));
|
|
|
+ v = fp_pair_map_set(map, &fp2, (void*)101);
|
|
|
+ test_eq(v, NULL);
|
|
|
+ v = fp_pair_map_set(map, &fp1, (void*)100);
|
|
|
+ test_eq(v, (void*)99);
|
|
|
+ test_eq_ptr(fp_pair_map_get(map, &fp1), (void*)100);
|
|
|
+ test_eq_ptr(fp_pair_map_get(map, &fp2), (void*)101);
|
|
|
+ test_eq_ptr(fp_pair_map_get(map, &fp3), NULL);
|
|
|
+ fp_pair_map_assert_ok(map);
|
|
|
+
|
|
|
+ v = fp_pair_map_remove(map, &fp2);
|
|
|
+ fp_pair_map_assert_ok(map);
|
|
|
+ test_eq_ptr(v, (void*)101);
|
|
|
+ test_eq_ptr(fp_pair_map_get(map, &fp2), NULL);
|
|
|
+ test_eq_ptr(fp_pair_map_remove(map, &fp2), NULL);
|
|
|
+
|
|
|
+ fp_pair_map_set(map, &fp2, (void*)101);
|
|
|
+ fp_pair_map_set(map, &fp3, (void*)102);
|
|
|
+ fp_pair_map_set(map, &fp4, (void*)103);
|
|
|
+ test_eq(fp_pair_map_size(map), 4);
|
|
|
+ fp_pair_map_assert_ok(map);
|
|
|
+ fp_pair_map_set(map, &fp5, (void*)104);
|
|
|
+ fp_pair_map_set(map, &fp6, (void*)105);
|
|
|
+ fp_pair_map_assert_ok(map);
|
|
|
+
|
|
|
+ /* Test iterator. */
|
|
|
+ iter = fp_pair_map_iter_init(map);
|
|
|
+ while (!fp_pair_map_iter_done(iter)) {
|
|
|
+ fp_pair_map_iter_get(iter, &k, &v);
|
|
|
+ test_eq_ptr(v, fp_pair_map_get(map, &k));
|
|
|
+
|
|
|
+ if (tor_memeq(&fp2, &k, sizeof(fp2))) {
|
|
|
+ iter = fp_pair_map_iter_next_rmv(map, iter);
|
|
|
+ } else {
|
|
|
+ iter = fp_pair_map_iter_next(map, iter);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Make sure we removed fp2, but not the others. */
|
|
|
+ test_eq_ptr(fp_pair_map_get(map, &fp2), NULL);
|
|
|
+ test_eq_ptr(fp_pair_map_get(map, &fp5), (void*)104);
|
|
|
+
|
|
|
+ fp_pair_map_assert_ok(map);
|
|
|
+ /* Clean up after ourselves. */
|
|
|
+ fp_pair_map_free(map, NULL);
|
|
|
+ map = NULL;
|
|
|
+
|
|
|
+ done:
|
|
|
+ if (map)
|
|
|
+ fp_pair_map_free(map, NULL);
|
|
|
+}
|
|
|
+
|
|
|
#define CONTAINER_LEGACY(name) \
|
|
|
{ #name, legacy_test_helper, 0, &legacy_setup, test_container_ ## name }
|
|
|
|
|
@@ -796,6 +879,7 @@ struct testcase_t container_tests[] = {
|
|
|
CONTAINER_LEGACY(strmap),
|
|
|
CONTAINER_LEGACY(pqueue),
|
|
|
CONTAINER_LEGACY(order_functions),
|
|
|
+ CONTAINER_LEGACY(fp_pair_map),
|
|
|
END_OF_TESTCASES
|
|
|
};
|
|
|
|