Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/test/variant_test.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/test/variant_test.cpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/test/variant_test.cpp')
-rw-r--r--source/test/variant_test.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/source/test/variant_test.cpp b/source/test/variant_test.cpp
new file mode 100644
index 0000000..03cb4e9
--- /dev/null
+++ b/source/test/variant_test.cpp
@@ -0,0 +1,68 @@
+#include "StarVariant.hpp"
+#include "StarMaybe.hpp"
+
+#include "gtest/gtest.h"
+
+using namespace Star;
+
+TEST(VariantTest, All) {
+ struct VariantTester {
+ shared_ptr<int> intptr;
+ };
+
+ MVariant<int, double, char, VariantTester> a, b;
+ EXPECT_EQ(a.typeIndex(), 0);
+ a = 'c';
+ EXPECT_EQ(a.typeIndex(), 3u);
+ EXPECT_TRUE(a.is<char>());
+ a.makeType(1);
+ EXPECT_EQ(a.get<int>(), 0);
+ EXPECT_TRUE(a.is<int>());
+ a = b;
+ EXPECT_TRUE(a.empty());
+
+ shared_ptr<int> intptr = make_shared<int>(42);
+ a = VariantTester{intptr};
+ b = VariantTester{intptr};
+ a = b;
+ a = a;
+ b = move(a);
+ a = move(b);
+ EXPECT_EQ(intptr.use_count(), 2);
+ a.reset();
+ EXPECT_EQ(intptr.use_count(), 1);
+
+ Variant<int, double, char> v(1.0);
+ MVariant<int, double, char> mv(v);
+ EXPECT_EQ(mv, 1.0);
+ v = 2;
+ mv = v;
+ EXPECT_EQ(mv, 2);
+ mv = '3';
+ v = mv.takeValue();
+ EXPECT_EQ(v, '3');
+ EXPECT_TRUE(mv.empty());
+}
+
+TEST(MaybeTest, All) {
+ struct MaybeTester {
+ shared_ptr<int> intptr;
+ };
+
+ Maybe<MaybeTester> a, b;
+
+ EXPECT_FALSE(a.isValid());
+
+ shared_ptr<int> intptr = make_shared<int>(42);
+ a = MaybeTester{intptr};
+ b = MaybeTester{intptr};
+ EXPECT_TRUE(a.isValid());
+ a = b;
+ a = a;
+ b = move(a);
+ a = move(b);
+ EXPECT_EQ(intptr.use_count(), 2);
+ a = {};
+ EXPECT_FALSE(a.isValid());
+ EXPECT_EQ(intptr.use_count(), 1);
+}