From 2a10eaae094e48a157d55ec886aaa07b0d0be6c9 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Mon, 28 Oct 2024 23:52:48 +0100 Subject: Some work on test framework & option --- asl/tests/option_tests.cpp | 87 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 16 deletions(-) (limited to 'asl/tests/option_tests.cpp') diff --git a/asl/tests/option_tests.cpp b/asl/tests/option_tests.cpp index e423cc9..e7fff8b 100644 --- a/asl/tests/option_tests.cpp +++ b/asl/tests/option_tests.cpp @@ -24,35 +24,90 @@ static_assert(asl::move_assignable>); static_assert(asl::move_assignable>); static_assert(!asl::move_assignable>); -ASL_TEST(Option_cheese) +ASL_TEST(make_null) { asl::option a; - asl::option b; + asl::option b = asl::nullopt; - a = ASL_MOVE(b); + ASL_TEST_EXPECT(!a.has_value()); + ASL_TEST_EXPECT(!b.has_value()); } -ASL_TEST(Option_cheese2) +ASL_TEST(make_value) { - asl::option a; - asl::option b; + asl::option a = 48; - a = ASL_MOVE(b); + ASL_TEST_EXPECT(a.has_value()); } -ASL_TEST(Option_cheese3) +ASL_TEST(reset) { - asl::option a; - asl::option b; + asl::option b = 48; + ASL_TEST_EXPECT(b.has_value()); + + b.reset(); + ASL_TEST_EXPECT(!b.has_value()); +} + +ASL_TEST(call_destructor) +{ + bool destroyed = false; + + { + DestructorObserver obs(&destroyed); + + asl::option opt(ASL_MOVE(obs)); + ASL_TEST_EXPECT(!destroyed); + + asl::option opt2 = ASL_MOVE(opt); + ASL_TEST_EXPECT(!destroyed); + } - a = ASL_MOVE(b); - asl::testing::report_failure("OH NO", __FILE__, __LINE__); + ASL_TEST_EXPECT(destroyed); } -ASL_TEST(Option_cheese4) +ASL_TEST(call_destructor_on_reset) { - asl::option a; - asl::option b; + bool destroyed = false; + + asl::option opt(&destroyed); + ASL_TEST_EXPECT(!destroyed); + + opt.reset(); + ASL_TEST_EXPECT(destroyed); +} + +ASL_TEST(value) +{ + asl::option a = 1; + asl::option b = 2; + asl::option c = a; + + ASL_TEST_EXPECT(a.value() == 1); + ASL_TEST_EXPECT(b.value() == 2); + ASL_TEST_EXPECT(c.value() == 1); - a = ASL_MOVE(b); + c = b; + ASL_TEST_EXPECT(c.value() == 2); +} + +ASL_TEST(value_move) +{ + bool destroyed = false; + + asl::option opt(&destroyed); + ASL_TEST_EXPECT(!destroyed); + + { + auto x = ASL_MOVE(opt).value(); + ASL_TEST_EXPECT(!destroyed); + } + + ASL_TEST_EXPECT(destroyed); +} + +ASL_TEST(deduction_guide) +{ + asl::option opt(45); + ASL_TEST_EXPECT(opt.value() == 45); } -- cgit