From 54b95b16629f0cd4bc30e6899e00019b3ab94012 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic <steven.lerouzic@gmail.com> Date: Sat, 17 May 2025 23:01:51 +0200 Subject: Buffer type has to be moveable, always --- asl/containers/buffer_tests.cpp | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'asl/containers/buffer_tests.cpp') diff --git a/asl/containers/buffer_tests.cpp b/asl/containers/buffer_tests.cpp index 2538e92..eb95ffe 100644 --- a/asl/containers/buffer_tests.cpp +++ b/asl/containers/buffer_tests.cpp @@ -159,13 +159,19 @@ struct MoveableType MoveableType(const MoveableType&) = delete; MoveableType(MoveableType&& other) : moved{other.moved + 1}, value{other.value} {} MoveableType& operator=(const MoveableType&) = delete; - MoveableType& operator=(MoveableType&&) = delete; + MoveableType& operator=(MoveableType&& other) + { + if (this == &other) { return *this; } + moved = other.moved + 1; + value = other.value; + return *this; + } ~MoveableType() = default; }; static_assert(!asl::trivially_copy_constructible<MoveableType>); static_assert(!asl::trivially_move_constructible<MoveableType>); static_assert(!asl::copyable<MoveableType>); -static_assert(asl::move_constructible<MoveableType>); +static_assert(asl::moveable<MoveableType>); // NOLINTNEXTLINE(*-complexity) ASL_TEST(push_move) @@ -213,6 +219,30 @@ ASL_TEST(push_move) ASL_TEST_EXPECT(b[3].moved == 1); ASL_TEST_EXPECT(b[4].value == 4); ASL_TEST_EXPECT(b[4].moved == 0); + + asl::buffer<MoveableType> b2 = std::move(b); + ASL_TEST_EXPECT(b2[0].value == 0); + ASL_TEST_EXPECT(b2[0].moved == 2); + ASL_TEST_EXPECT(b2[1].value == 1); + ASL_TEST_EXPECT(b2[1].moved == 2); + ASL_TEST_EXPECT(b2[2].value == 2); + ASL_TEST_EXPECT(b2[2].moved == 1); + ASL_TEST_EXPECT(b2[3].value == 3); + ASL_TEST_EXPECT(b2[3].moved == 1); + ASL_TEST_EXPECT(b2[4].value == 4); + ASL_TEST_EXPECT(b2[4].moved == 0); + + b = std::move(b2); + ASL_TEST_EXPECT(b[0].value == 0); + ASL_TEST_EXPECT(b[0].moved == 2); + ASL_TEST_EXPECT(b[1].value == 1); + ASL_TEST_EXPECT(b[1].moved == 2); + ASL_TEST_EXPECT(b[2].value == 2); + ASL_TEST_EXPECT(b[2].moved == 1); + ASL_TEST_EXPECT(b[3].value == 3); + ASL_TEST_EXPECT(b[3].moved == 1); + ASL_TEST_EXPECT(b[4].value == 4); + ASL_TEST_EXPECT(b[4].moved == 0); } ASL_TEST(clear) -- cgit