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