tests/test_map.cpp

changeset 686
64919f63f059
parent 685
2dd841e364af
child 687
612ed521b1c5
     1.1 --- a/tests/test_map.cpp	Tue Apr 18 18:01:41 2023 +0200
     1.2 +++ b/tests/test_map.cpp	Tue Apr 18 19:10:45 2023 +0200
     1.3 @@ -282,7 +282,7 @@
     1.4  TEST(CxHashMap, Clear) {
     1.5      CxTestingAllocator allocator;
     1.6      auto map = cxHashMapCreate(&allocator, CX_STORE_POINTERS, 0);
     1.7 -    
     1.8 +
     1.9      cxMapPut(map, cx_hash_key_str("key 1"), (void *) "val 1");
    1.10      cxMapPut(map, cx_hash_key_str("key 2"), (void *) "val 2");
    1.11      cxMapPut(map, cx_hash_key_str("key 3"), (void *) "val 3");
    1.12 @@ -344,3 +344,100 @@
    1.13      EXPECT_TRUE(allocator.verify());
    1.14  }
    1.15  
    1.16 +static void test_simple_destructor(void *data) {
    1.17 +    strcpy((char *) data, "OK");
    1.18 +}
    1.19 +
    1.20 +static void test_advanced_destructor(
    1.21 +        [[maybe_unused]] void *unused,
    1.22 +        void *data
    1.23 +) {
    1.24 +    strcpy((char *) data, "OK");
    1.25 +}
    1.26 +
    1.27 +static void verify_any_destructor(CxMap *map) {
    1.28 +    auto k1 = cx_hash_key_str("key 1");
    1.29 +    auto k2 = cx_hash_key_str("key 2");
    1.30 +    auto k3 = cx_hash_key_str("key 3");
    1.31 +    auto k4 = cx_hash_key_str("key 4");
    1.32 +    auto k5 = cx_hash_key_str("key 5");
    1.33 +
    1.34 +    char v1[] = "val 1";
    1.35 +    char v2[] = "val 2";
    1.36 +    char v3[] = "val 3";
    1.37 +    char v4[] = "val 4";
    1.38 +    char v5[] = "val 5";
    1.39 +
    1.40 +    cxMapPut(map, k1, (void *) v1);
    1.41 +    cxMapPut(map, k2, (void *) v2);
    1.42 +    cxMapPut(map, k3, (void *) v3);
    1.43 +    cxMapPut(map, k4, (void *) v4);
    1.44 +
    1.45 +    cxMapRemove(map, k2);
    1.46 +    auto r = cxMapRemoveAndGet(map, k3);
    1.47 +    cxMapDetach(map, k1);
    1.48 +
    1.49 +    EXPECT_STREQ(v1, "val 1");
    1.50 +    EXPECT_STREQ(v2, "OK");
    1.51 +    EXPECT_STREQ(v3, "val 3");
    1.52 +    EXPECT_STREQ(v4, "val 4");
    1.53 +    EXPECT_STREQ(v5, "val 5");
    1.54 +    EXPECT_EQ(r, v3);
    1.55 +
    1.56 +    cxMapClear(map);
    1.57 +
    1.58 +    EXPECT_STREQ(v1, "val 1");
    1.59 +    EXPECT_STREQ(v2, "OK");
    1.60 +    EXPECT_STREQ(v3, "val 3");
    1.61 +    EXPECT_STREQ(v4, "OK");
    1.62 +    EXPECT_STREQ(v5, "val 5");
    1.63 +
    1.64 +    cxMapPut(map, k1, (void *) v1);
    1.65 +    cxMapPut(map, k3, (void *) v3);
    1.66 +    cxMapPut(map, k5, (void *) v5);
    1.67 +
    1.68 +    {
    1.69 +        auto iter = cxMapMutIteratorKeys(map);
    1.70 +        cx_foreach(CxHashKey*, key, iter) {
    1.71 +            if (key->data.cstr[4] == '1') cxIteratorFlagRemoval(iter);
    1.72 +        }
    1.73 +    }
    1.74 +    {
    1.75 +        auto iter = cxMapMutIteratorValues(map);
    1.76 +        cx_foreach(char*, v, iter) {
    1.77 +            if (v[4] == '5') cxIteratorFlagRemoval(iter);
    1.78 +        }
    1.79 +    }
    1.80 +
    1.81 +    EXPECT_STREQ(v1, "OK");
    1.82 +    EXPECT_STREQ(v2, "OK");
    1.83 +    EXPECT_STREQ(v3, "val 3");
    1.84 +    EXPECT_STREQ(v4, "OK");
    1.85 +    EXPECT_STREQ(v5, "OK");
    1.86 +
    1.87 +    v1[0] = v2[0] = v4[0] = v5[0] = 'c';
    1.88 +
    1.89 +    cxMapDestroy(map);
    1.90 +
    1.91 +    EXPECT_STREQ(v1, "cK");
    1.92 +    EXPECT_STREQ(v2, "cK");
    1.93 +    EXPECT_STREQ(v3, "OK");
    1.94 +    EXPECT_STREQ(v4, "cK");
    1.95 +    EXPECT_STREQ(v5, "cK");
    1.96 +}
    1.97 +
    1.98 +TEST(CxHashMap, SimpleDestructor) {
    1.99 +    CxTestingAllocator allocator;
   1.100 +    auto map = cxHashMapCreate(&allocator, CX_STORE_POINTERS, 0);
   1.101 +    map->simple_destructor = test_simple_destructor;
   1.102 +    verify_any_destructor(map);
   1.103 +    EXPECT_TRUE(allocator.verify());
   1.104 +}
   1.105 +
   1.106 +TEST(CxHashMap, AdvancedDestructor) {
   1.107 +    CxTestingAllocator allocator;
   1.108 +    auto map = cxHashMapCreate(&allocator, CX_STORE_POINTERS, 0);
   1.109 +    map->advanced_destructor = test_advanced_destructor;
   1.110 +    verify_any_destructor(map);
   1.111 +    EXPECT_TRUE(allocator.verify());
   1.112 +}

mercurial