variant: Add equals operator helper
This adds a generic equality operator intended to make it
straightforward to compare a variant to other variants or base values.
Change-Id: If59296e650bfb43880931e146e4e50b3d8aaa38f
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/meson.build b/test/meson.build
index c9ee047..9c0580b 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -16,6 +16,7 @@
'str/cexpr': [stdplus_dep, gtest_main_dep],
'str/maps': [stdplus_dep, gmock_dep, gtest_main_dep],
'util/cexec': [stdplus_dep, gtest_main_dep],
+ 'variant': [stdplus_dep, gtest_main_dep],
'zstring': [stdplus_dep, gtest_main_dep],
'zstring_view': [stdplus_dep, gtest_main_dep],
}
diff --git a/test/variant.cpp b/test/variant.cpp
new file mode 100644
index 0000000..48b4843
--- /dev/null
+++ b/test/variant.cpp
@@ -0,0 +1,41 @@
+#include <stdplus/variant.hpp>
+
+#include <gtest/gtest.h>
+
+namespace stdplus
+{
+
+using namespace std::literals::string_literals;
+using V = std::variant<int, float, std::string>;
+
+TEST(variantEqFuzzy, Basic)
+{
+ EXPECT_TRUE(variantEqFuzzy(V{1}, 1));
+ EXPECT_TRUE(variantEqFuzzy(V{1}, V{1}));
+ EXPECT_TRUE(variantEqFuzzy(V{1}, 1.));
+ EXPECT_TRUE(variantEqFuzzy(V{1}, V{1.f}));
+ EXPECT_TRUE(variantEqFuzzy(V{1.f}, 1));
+ EXPECT_TRUE(variantEqFuzzy(V{1.f}, 1.));
+ EXPECT_TRUE(variantEqFuzzy(V{1.f}, 1.f));
+ EXPECT_FALSE(variantEqFuzzy(V{"1"}, 1));
+ EXPECT_FALSE(variantEqFuzzy(V{"1"}, 1.));
+ EXPECT_TRUE(variantEqFuzzy(V{"1"}, "1"));
+ EXPECT_TRUE(variantEqFuzzy(V{"1"}, V{"1"}));
+ EXPECT_FALSE(variantEqFuzzy(V{"1"}, V{1}));
+}
+
+TEST(variantEqStrict, Basic)
+{
+ EXPECT_TRUE(variantEqStrict(V{1}, 1));
+ EXPECT_TRUE(variantEqStrict(V{1}, V{1}));
+ EXPECT_FALSE(variantEqStrict(V{1}, 1.f));
+ EXPECT_FALSE(variantEqStrict(V{1}, V{1.f}));
+ EXPECT_FALSE(variantEqStrict(V{1.f}, 1));
+ EXPECT_TRUE(variantEqStrict(V{1.f}, 1.f));
+ EXPECT_FALSE(variantEqStrict(V{"1"}, 1));
+ EXPECT_FALSE(variantEqStrict(V{"1"}, 1.f));
+ EXPECT_TRUE(variantEqStrict(V{"1"}, "1"s));
+ EXPECT_TRUE(variantEqStrict(V{"1"}, V{"1"}));
+}
+
+} // namespace stdplus