From 8607772d4f9e21f53c1abfd9379737403b97f430 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Sun, 5 Jan 2025 15:25:45 +0100 Subject: Fix a few mistakes in option, and make it trivial when possible --- asl/tests/box_tests.cpp | 4 +++- asl/tests/maybe_uninit_tests.cpp | 16 ++++++++++++++-- asl/tests/option_tests.cpp | 18 +++++++++++------- 3 files changed, 28 insertions(+), 10 deletions(-) (limited to 'asl/tests') diff --git a/asl/tests/box_tests.cpp b/asl/tests/box_tests.cpp index 53b6dda..0395e5f 100644 --- a/asl/tests/box_tests.cpp +++ b/asl/tests/box_tests.cpp @@ -55,6 +55,8 @@ ASL_TEST(arrow) ASL_TEST(niche) { + static_assert(sizeof(asl::box) == sizeof(asl::option>)); + asl::option> opt; ASL_TEST_EXPECT(!opt.has_value()); @@ -66,7 +68,7 @@ ASL_TEST(niche) ASL_TEST_EXPECT(!opt.has_value()); bool destroyed = false; - asl::option> opt2 = asl::make_box(&destroyed); + asl::option opt2 = asl::make_box(&destroyed); ASL_TEST_EXPECT(opt2.has_value()); ASL_TEST_EXPECT(!destroyed); diff --git a/asl/tests/maybe_uninit_tests.cpp b/asl/tests/maybe_uninit_tests.cpp index 92999a2..524a10b 100644 --- a/asl/tests/maybe_uninit_tests.cpp +++ b/asl/tests/maybe_uninit_tests.cpp @@ -5,6 +5,18 @@ static_assert(asl::layout::of() == asl::layout::of>( static_assert(asl::size_of == asl::size_of>); static_assert(asl::align_of == asl::align_of>); -static_assert(asl::trivially_destructible>); -static_assert(!asl::trivially_destructible>); +#define TEST_TYPE_PROPERTIES(PRP) \ + static_assert(asl::PRP> == asl::PRP); \ + static_assert(asl::PRP> == asl::PRP); \ + static_assert(asl::PRP> == asl::PRP); \ + static_assert(asl::PRP> == asl::PRP); \ + static_assert(asl::PRP> == asl::PRP); \ + static_assert(asl::PRP> == asl::PRP); + +TEST_TYPE_PROPERTIES(trivially_default_constructible); +TEST_TYPE_PROPERTIES(trivially_copy_constructible); +TEST_TYPE_PROPERTIES(trivially_move_constructible); +TEST_TYPE_PROPERTIES(trivially_copy_assignable); +TEST_TYPE_PROPERTIES(trivially_move_assignable); +TEST_TYPE_PROPERTIES(trivially_destructible); diff --git a/asl/tests/option_tests.cpp b/asl/tests/option_tests.cpp index 557e2fe..20ee756 100644 --- a/asl/tests/option_tests.cpp +++ b/asl/tests/option_tests.cpp @@ -14,14 +14,14 @@ struct NonZero ASL_ASSERT(x != 0); } - constexpr explicit NonZero(asl::niche) : value(0) {} + constexpr explicit NonZero(asl::niche_t) : value(0) {} - constexpr bool operator==(asl::niche) const { return value == 0; } + constexpr bool operator==(asl::niche_t) const { return value == 0; } }; static_assert(asl::has_niche); static_assert(!asl::has_niche); -static_assert(sizeof(asl::option) > sizeof(int)); +static_assert(sizeof(asl::option) >= sizeof(int)); static_assert(sizeof(asl::option) == sizeof(NonZero)); static_assert(!asl::is_option); @@ -31,22 +31,26 @@ static_assert(asl::is_option>); static_assert(asl::trivially_destructible>); static_assert(!asl::trivially_destructible>); -static_assert(asl::copy_constructible>); +static_assert(asl::trivially_copy_constructible>); +static_assert(asl::trivially_copy_constructible>); static_assert(asl::copy_constructible>); static_assert(!asl::copy_constructible>); static_assert(!asl::copy_constructible>); -static_assert(asl::move_constructible>); +static_assert(asl::trivially_move_constructible>); +static_assert(asl::trivially_move_constructible>); static_assert(asl::move_constructible>); static_assert(asl::move_constructible>); static_assert(!asl::move_constructible>); -static_assert(asl::copy_assignable>); +static_assert(asl::trivially_copy_assignable>); +static_assert(asl::trivially_copy_assignable>); static_assert(asl::copy_assignable>); static_assert(!asl::copy_assignable>); static_assert(!asl::copy_assignable>); -static_assert(asl::move_assignable>); +static_assert(asl::trivially_move_assignable>); +static_assert(asl::trivially_move_assignable>); static_assert(asl::move_assignable>); static_assert(asl::move_assignable>); static_assert(!asl::move_assignable>); -- cgit