1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <fuzz-utils/string-map.h> 6#include <unittest/unittest.h> 7 8namespace fuzzing { 9namespace testing { 10namespace { 11 12bool TestEmpty() { 13 BEGIN_TEST; 14 StringMap map; 15 16 EXPECT_TRUE(map.is_empty()); 17 map.begin(); 18 EXPECT_FALSE(map.next(nullptr, nullptr)); 19 20 END_TEST; 21} 22 23bool TestGetAndSet() { 24 BEGIN_TEST; 25 StringMap map; 26 const char* val; 27 28 val = map.get("key1"); 29 EXPECT_NULL(val); 30 31 map.set("key1", "val1"); 32 map.set("key2", "val2"); 33 34 val = map.get("key1"); 35 ASSERT_NONNULL(val); 36 EXPECT_STR_EQ(val, "val1"); 37 38 val = map.get("key2"); 39 ASSERT_NONNULL(val); 40 EXPECT_STR_EQ(val, "val2"); 41 42 map.set("key1", "val2"); 43 44 val = map.get("key1"); 45 ASSERT_NONNULL(val); 46 EXPECT_STR_EQ(val, "val2"); 47 48 val = map.get("key2"); 49 ASSERT_NONNULL(val); 50 EXPECT_STR_EQ(val, "val2"); 51 52 END_TEST; 53} 54 55bool TestBeginAndNext() { 56 BEGIN_TEST; 57 StringMap map; 58 const char* key; 59 const char* val; 60 61 map.set("8", "1"); 62 map.set("7", "2"); 63 map.set("6", "3"); 64 map.set("5", "4"); 65 map.set("4", "5"); 66 map.set("3", "6"); 67 map.set("2", "7"); 68 map.set("1", "8"); 69 70 // Iterate over all pairs 71 uint8_t keys = 0; 72 EXPECT_FALSE(map.next(&key, nullptr)); 73 map.begin(); 74 while (map.next(&key, &val)) { 75 keys |= static_cast<uint8_t>(1 << (key[0] - '0' - 1)); 76 } 77 EXPECT_EQ(keys, 0xff); 78 79 // Reset and iterate again 80 uint8_t vals = 0; 81 EXPECT_FALSE(map.next(nullptr, &val)); 82 map.begin(); 83 while (map.next(&key, &val)) { 84 vals |= static_cast<uint8_t>(1 << (val[0] - '0' - 1)); 85 } 86 EXPECT_EQ(keys, 0xff); 87 88 END_TEST; 89} 90 91bool TestEraseAndClear() { 92 BEGIN_TEST; 93 StringMap map; 94 const char* val; 95 96 map.clear(); 97 98 map.erase("key1"); 99 val = map.get("key1"); 100 EXPECT_NULL(val); 101 102 map.set("key1", "val1"); 103 map.set("key2", "val2"); 104 map.erase("key1"); 105 106 val = map.get("key1"); 107 EXPECT_NULL(val); 108 109 val = map.get("key2"); 110 ASSERT_NONNULL(val); 111 EXPECT_STR_EQ(val, "val2"); 112 113 map.set("key1", "val1"); 114 map.clear(); 115 116 val = map.get("key1"); 117 EXPECT_NULL(val); 118 119 val = map.get("key2"); 120 EXPECT_NULL(val); 121 122 END_TEST; 123} 124 125BEGIN_TEST_CASE(StringMapTest) 126RUN_TEST(TestEmpty) 127RUN_TEST(TestGetAndSet) 128RUN_TEST(TestBeginAndNext) 129RUN_TEST(TestEraseAndClear) 130END_TEST_CASE(StringMapTest) 131 132} // namespace 133} // namespace testing 134} // namespace fuzzing 135