// Copyright 2018 The Fuchsia Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include namespace fuzzing { namespace testing { namespace { bool TestEmpty() { BEGIN_TEST; StringMap map; EXPECT_TRUE(map.is_empty()); map.begin(); const char** nil = nullptr; EXPECT_FALSE(map.next(nil, nil)); END_TEST; } bool TestGetAndSet() { BEGIN_TEST; StringMap map; const char* val; val = map.get("key1"); EXPECT_NULL(val); map.set("key1", "val1"); map.set("key2", "val2"); val = map.get("key1"); ASSERT_NONNULL(val); EXPECT_STR_EQ(val, "val1"); val = map.get("key2"); ASSERT_NONNULL(val); EXPECT_STR_EQ(val, "val2"); map.set("key1", "val2"); val = map.get("key1"); ASSERT_NONNULL(val); EXPECT_STR_EQ(val, "val2"); val = map.get("key2"); ASSERT_NONNULL(val); EXPECT_STR_EQ(val, "val2"); END_TEST; } bool TestBeginAndNext() { BEGIN_TEST; StringMap map; const char* key; const char* val; map.set("8", "1"); map.set("7", "2"); map.set("6", "3"); map.set("5", "4"); map.set("4", "5"); map.set("3", "6"); map.set("2", "7"); map.set("1", "8"); // Iterate over all pairs uint8_t keys = 0; EXPECT_FALSE(map.next(&key, nullptr)); map.begin(); while (map.next(&key, &val)) { keys |= static_cast(1 << (key[0] - '0' - 1)); } EXPECT_EQ(keys, 0xff); // Reset and iterate again uint8_t vals = 0; EXPECT_FALSE(map.next(nullptr, &val)); map.begin(); while (map.next(&key, &val)) { vals |= static_cast(1 << (val[0] - '0' - 1)); } EXPECT_EQ(keys, 0xff); END_TEST; } bool TestEraseAndClear() { BEGIN_TEST; StringMap map; const char* val; map.clear(); map.erase("key1"); val = map.get("key1"); EXPECT_NULL(val); map.set("key1", "val1"); map.set("key2", "val2"); map.erase("key1"); val = map.get("key1"); EXPECT_NULL(val); val = map.get("key2"); ASSERT_NONNULL(val); EXPECT_STR_EQ(val, "val2"); map.set("key1", "val1"); map.clear(); val = map.get("key1"); EXPECT_NULL(val); val = map.get("key2"); EXPECT_NULL(val); END_TEST; } BEGIN_TEST_CASE(StringMapTest) RUN_TEST(TestEmpty) RUN_TEST(TestGetAndSet) RUN_TEST(TestBeginAndNext) RUN_TEST(TestEraseAndClear) END_TEST_CASE(StringMapTest) } // namespace } // namespace testing } // namespace fuzzing