From 343d872be9f91e5fcb9167021790831458cbf19c Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Fri, 1 Nov 2024 22:56:06 +0100 Subject: More work on option --- asl/tests/option_tests.cpp | 80 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) (limited to 'asl/tests/option_tests.cpp') diff --git a/asl/tests/option_tests.cpp b/asl/tests/option_tests.cpp index e7fff8b..dea046e 100644 --- a/asl/tests/option_tests.cpp +++ b/asl/tests/option_tests.cpp @@ -1,6 +1,13 @@ #include "asl/option.hpp" #include "asl/tests/test_types.hpp" -#include "asl/testing/testing.hpp" +#include "asl/testing/testing.hpp" + +class Base {}; +class Derived : public Base {}; + +static_assert(!asl::is_option); +static_assert(asl::is_option>); +static_assert(asl::is_option>); static_assert(asl::trivially_destructible>); static_assert(!asl::trivially_destructible>); @@ -22,8 +29,39 @@ static_assert(!asl::copy_assignable>); static_assert(asl::move_assignable>); static_assert(asl::move_assignable>); +static_assert(asl::move_assignable>); static_assert(!asl::move_assignable>); +static_assert(asl::assignable&, asl::option>); +static_assert(!asl::assignable&, asl::option>); + +static_assert(!asl::convertible, asl::option>); +static_assert(asl::convertible, asl::option>); + +class ExplicitConversion { public: explicit ExplicitConversion(int) {} }; +class ImplicitConversion { public: ImplicitConversion(int) {} }; // NOLINT + +static_assert(!asl::convertible); +static_assert(asl::convertible); + +static_assert(!asl::convertible>); +static_assert(asl::convertible>); + +static_assert(!asl::convertible, asl::option>); +static_assert(asl::convertible, asl::option>); + +static_assert(asl::trivially_copy_constructible>); +static_assert(!asl::trivially_copy_constructible>); + +static_assert(asl::trivially_move_constructible>); +static_assert(!asl::trivially_move_constructible>); + +static_assert(asl::trivially_copy_assignable>); +static_assert(!asl::trivially_copy_assignable>); + +static_assert(asl::trivially_move_assignable>); +static_assert(!asl::trivially_move_assignable>); + ASL_TEST(make_null) { asl::option a; @@ -111,3 +149,43 @@ ASL_TEST(deduction_guide) asl::option opt(45); ASL_TEST_EXPECT(opt.value() == 45); } + +ASL_TEST(convert_copy) +{ + asl::option opt8 = uint8_t{8}; + asl::option opt16 = opt8; + + ASL_TEST_EXPECT(opt16.has_value()); + ASL_TEST_EXPECT(opt16.value() == 8); + + opt8 = uint8_t{10}; + ASL_TEST_EXPECT(opt8.has_value()); + ASL_TEST_EXPECT(opt8.value() == 10); + + opt16 = asl::nullopt; + ASL_TEST_EXPECT(!opt16.has_value()); + + opt16 = opt8; + ASL_TEST_EXPECT(opt16.has_value()); + ASL_TEST_EXPECT(opt16.value() == 10); +} + +ASL_TEST(convert_move) +{ + asl::option opt8 = uint8_t{8}; + asl::option opt16 = ASL_MOVE(opt8); + + ASL_TEST_EXPECT(opt16.has_value()); + ASL_TEST_EXPECT(opt16.value() == 8); + + opt8 = ASL_MOVE(uint8_t{10}); + ASL_TEST_EXPECT(opt8.has_value()); + ASL_TEST_EXPECT(opt8.value() == 10); + + opt16 = asl::nullopt; + ASL_TEST_EXPECT(!opt16.has_value()); + + opt16 = ASL_MOVE(opt8); + ASL_TEST_EXPECT(opt16.has_value()); + ASL_TEST_EXPECT(opt16.value() == 10); +} -- cgit