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/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