aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/unit/testSparseVector.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2022-07-29 11:16:28 +1000
committerNeil <nyamatongwe@gmail.com>2022-07-29 11:16:28 +1000
commite030b1d56785405cb35531758d603be88af9b487 (patch)
tree9a428393f7963d50a0b7557e7c77ac1be37c7bb3 /test/unit/testSparseVector.cxx
parent6e6641d4733903d3c365fd9348f3656ff7000ddf (diff)
downloadscintilla-mirror-e030b1d56785405cb35531758d603be88af9b487.tar.gz
Apply rule-of-zero to delete standard methods where possible as handled by
contained types. This allows flexibility as most lower-level data types can be moved and SplitVector and Partitioning of non-move-only types may be copied. CellBuffer still needs destructor due to incomplete type so retains all standard operations.
Diffstat (limited to 'test/unit/testSparseVector.cxx')
-rw-r--r--test/unit/testSparseVector.cxx45
1 files changed, 45 insertions, 0 deletions
diff --git a/test/unit/testSparseVector.cxx b/test/unit/testSparseVector.cxx
index 763fa027c..3a784d4c2 100644
--- a/test/unit/testSparseVector.cxx
+++ b/test/unit/testSparseVector.cxx
@@ -27,6 +27,51 @@ using namespace Scintilla::Internal;
// Test SparseVector.
+using UniqueInt = std::unique_ptr<int>;
+
+TEST_CASE("CompileCopying SparseVector") {
+
+ // These are compile-time tests to check that basic copy and move
+ // operations are defined correctly.
+
+ SECTION("CopyingMoving") {
+ SparseVector<int> s;
+ SparseVector<int> s2;
+
+ // Copy constructor
+ SparseVector<int> sa(s);
+ // Copy assignment
+ SparseVector<int> sb;
+ sb = s;
+
+ // Move constructor
+ SparseVector<int> sc(std::move(s));
+ // Move assignment
+ SparseVector<int> sd;
+ sd = (std::move(s2));
+ }
+
+ SECTION("MoveOnly") {
+ SparseVector<UniqueInt> s;
+
+#if defined(SHOW_COPY_BUILD_FAILURES)
+ // Copy is not defined for std::unique_ptr
+ // Copy constructor fails
+ SparseVector<UniqueInt> sa(s);
+ // Copy assignment fails
+ SparseVector<UniqueInt> sb;
+ sb = s;
+#endif
+
+ // Move constructor
+ SparseVector<UniqueInt> sc(std::move(s));
+ // Move assignment
+ SparseVector<UniqueInt> sd;
+ sd = (std::move(s));
+ }
+
+}
+
// Helper to produce a string representation of a SparseVector<const char *>
// to simplify checks.
static std::string Representation(const SparseVector<UniqueString> &st) {