summaryrefslogtreecommitdiff
path: root/asl/containers/buffer_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/containers/buffer_tests.cpp')
-rw-r--r--asl/containers/buffer_tests.cpp34
1 files changed, 32 insertions, 2 deletions
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)