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