1.1 --- a/test/test_map.cpp Fri May 27 14:14:55 2022 +0200 1.2 +++ b/test/test_map.cpp Fri May 27 17:40:27 2022 +0200 1.3 @@ -200,3 +200,52 @@ 1.4 cxMapDestroy(map); 1.5 EXPECT_TRUE(allocator.verify()); 1.6 } 1.7 + 1.8 +TEST(CxHashMap, RehashNotRequired) { 1.9 + CxTestingAllocator allocator; 1.10 + auto map = cxHashMapCreate(&allocator, 8); 1.11 + 1.12 + cxMapPut(map, cxMapKeyStr("key 1"), (void *) "val 1"); 1.13 + cxMapPut(map, cxMapKeyStr("key 2"), (void *) "val 2"); 1.14 + cxMapPut(map, cxMapKeyStr("key 3"), (void *) "val 3"); 1.15 + cxMapPut(map, cxMapKeyStr("key 4"), (void *) "val 4"); 1.16 + cxMapPut(map, cxMapKeyStr("key 5"), (void *) "val 5"); 1.17 + cxMapPut(map, cxMapKeyStr("key 6"), (void *) "val 6"); 1.18 + 1.19 + // 6/8 does not exceed 0.75, therefore the function should not rehash 1.20 + int result = cxMapRehash(map); 1.21 + EXPECT_EQ(result, 0); 1.22 + EXPECT_EQ(reinterpret_cast<struct cx_hash_map_s *>(map)->bucket_count, 8); 1.23 + 1.24 + cxMapDestroy(map); 1.25 + EXPECT_TRUE(allocator.verify()); 1.26 +} 1.27 + 1.28 +TEST(CxHashMap, Rehash) { 1.29 + CxTestingAllocator allocator; 1.30 + auto map = cxHashMapCreate(&allocator, 8); 1.31 + 1.32 + cxMapPut(map, cxMapKeyStr("key 1"), (void *) "val 1"); 1.33 + cxMapPut(map, cxMapKeyStr("key 2"), (void *) "val 2"); 1.34 + cxMapPut(map, cxMapKeyStr("key 3"), (void *) "val 3"); 1.35 + cxMapPut(map, cxMapKeyStr("key 4"), (void *) "val 4"); 1.36 + cxMapPut(map, cxMapKeyStr("key 5"), (void *) "val 5"); 1.37 + cxMapPut(map, cxMapKeyStr("key 6"), (void *) "val 6"); 1.38 + cxMapPut(map, cxMapKeyStr("key 7"), (void *) "val 7"); 1.39 + 1.40 + int result = cxMapRehash(map); 1.41 + EXPECT_EQ(result, 0); 1.42 + EXPECT_EQ(reinterpret_cast<struct cx_hash_map_s *>(map)->bucket_count, 17); 1.43 + EXPECT_EQ(map->size, 7); 1.44 + 1.45 + EXPECT_EQ(strcmp((char *) cxMapGet(map, cxMapKeyStr("key 1")), "val 1"), 0); 1.46 + EXPECT_EQ(strcmp((char *) cxMapGet(map, cxMapKeyStr("key 2")), "val 2"), 0); 1.47 + EXPECT_EQ(strcmp((char *) cxMapGet(map, cxMapKeyStr("key 3")), "val 3"), 0); 1.48 + EXPECT_EQ(strcmp((char *) cxMapGet(map, cxMapKeyStr("key 4")), "val 4"), 0); 1.49 + EXPECT_EQ(strcmp((char *) cxMapGet(map, cxMapKeyStr("key 5")), "val 5"), 0); 1.50 + EXPECT_EQ(strcmp((char *) cxMapGet(map, cxMapKeyStr("key 6")), "val 6"), 0); 1.51 + EXPECT_EQ(strcmp((char *) cxMapGet(map, cxMapKeyStr("key 7")), "val 7"), 0); 1.52 + 1.53 + cxMapDestroy(map); 1.54 + EXPECT_TRUE(allocator.verify()); 1.55 +} 1.56 \ No newline at end of file