incremental
diff --git a/src/ci_map_tests.cpp b/src/ci_map_tests.cpp
new file mode 100644
index 0000000..acaaa6e
--- /dev/null
+++ b/src/ci_map_tests.cpp
@@ -0,0 +1,78 @@
+#include "crow/ci_map.h"
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+using namespace testing;
+
+TEST(CiMap, MapEmpty) {
+ crow::ci_map map;
+ EXPECT_TRUE(map.empty());
+ EXPECT_EQ(map.size(), 0);
+
+ map.emplace("foo", "bar");
+
+ map.clear();
+ EXPECT_TRUE(map.empty());
+}
+
+TEST(CiMap, MapBasicInsert) {
+ crow::ci_map map;
+ map.emplace("foo", "bar");
+ auto x = map.find("foo");
+ ASSERT_NE(x, map.end());
+
+ EXPECT_EQ(map.find("foo")->first, "foo");
+ EXPECT_EQ(map.find("foo")->second, "bar");
+ EXPECT_EQ(map.find("FOO")->first, "foo");
+ EXPECT_EQ(map.find("FOO")->second, "bar");
+}
+
+TEST(CiMap, MapManyInsert) {
+ crow::ci_map map;
+ map.emplace("foo", "car");
+ map.emplace("foo", "boo");
+ map.emplace("bar", "cat");
+ map.emplace("baz", "bat");
+
+ EXPECT_EQ(map.size(), 3);
+ ASSERT_NE(map.find("foo"), map.end());
+ EXPECT_EQ(map.find("foo")->first, "foo");
+ EXPECT_EQ(map.find("foo")->second, "car");
+
+ ASSERT_NE(map.find("FOO"), map.end());
+ EXPECT_EQ(map.find("FOO")->first, "foo");
+ EXPECT_EQ(map.find("FOO")->second, "car");
+
+ ASSERT_NE(map.find("bar"), map.end());
+ EXPECT_EQ(map.find("bar")->first, "bar");
+ EXPECT_EQ(map.find("bar")->second, "cat");
+
+ ASSERT_NE(map.find("BAR"), map.end());
+ EXPECT_EQ(map.find("BAR")->first, "bar");
+ EXPECT_EQ(map.find("BAR")->second, "cat");
+
+ ASSERT_NE(map.find("baz"), map.end());
+ EXPECT_EQ(map.find("baz")->first, "baz");
+ EXPECT_EQ(map.find("baz")->second, "bat");
+
+ ASSERT_NE(map.find("BAZ"), map.end());
+ EXPECT_EQ(map.find("BAZ")->first, "baz");
+ EXPECT_EQ(map.find("BAZ")->second, "bat");
+
+ EXPECT_EQ(map.count("foo"), 1);
+ EXPECT_EQ(map.count("bar"), 1);
+ EXPECT_EQ(map.count("baz"), 1);
+ EXPECT_EQ(map.count("FOO"), 1);
+ EXPECT_EQ(map.count("BAR"), 1);
+ EXPECT_EQ(map.count("BAZ"), 1);
+}
+
+TEST(CiMap, MapMultiInsert) {
+ crow::ci_map map;
+ map.emplace("foo", "bar1");
+ map.emplace("foo", "bar2");
+ EXPECT_EQ(map.count("foo"), 1);
+ EXPECT_EQ(map.count("FOO"), 1);
+ EXPECT_EQ(map.count("fOo"), 1);
+ EXPECT_EQ(map.count("FOo"), 1);
+}
\ No newline at end of file