From defa7e1b9e16c6276e17a39b61d019c1a116472b Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic <steven.lerouzic@gmail.com> Date: Fri, 22 Nov 2024 18:15:40 +0100 Subject: Use niche in option --- asl/tests/option_tests.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'asl/tests/option_tests.cpp') diff --git a/asl/tests/option_tests.cpp b/asl/tests/option_tests.cpp index 4c65892..8b98c99 100644 --- a/asl/tests/option_tests.cpp +++ b/asl/tests/option_tests.cpp @@ -5,6 +5,25 @@ class Base {}; class Derived : public Base {}; +struct NonZero +{ + int value; + + constexpr explicit NonZero(int x) : value(x) + { + ASL_ASSERT(x != 0); + } + + constexpr explicit NonZero(asl::niche) : value(0) {} + + constexpr bool operator==(asl::niche) const { return value == 0; } +}; +static_assert(asl::has_niche<NonZero>); +static_assert(!asl::has_niche<int>); + +static_assert(sizeof(asl::option<int>) > sizeof(int)); +static_assert(sizeof(asl::option<NonZero>) == sizeof(NonZero)); + static_assert(!asl::is_option<int>); static_assert(asl::is_option<asl::option<int>>); static_assert(asl::is_option<const asl::option<int>>); @@ -276,3 +295,17 @@ ASL_TEST(or_else) ASL_TEST_ASSERT(b2.has_value()); ASL_TEST_EXPECT(b2.value() == 12); } + +ASL_TEST(niche) +{ + asl::option<NonZero> opt; + ASL_TEST_EXPECT(!opt.has_value()); + + asl::option<NonZero> opt2(2); + ASL_TEST_EXPECT(opt2.has_value()); + ASL_TEST_EXPECT(opt2.value().value == 2); + + opt = opt2; + ASL_TEST_EXPECT(opt2.has_value()); + ASL_TEST_EXPECT(opt2.value().value == 2); +} -- cgit