aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/unit
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/testPartitioning.cxx24
-rw-r--r--test/unit/testPerLine.cxx24
-rw-r--r--test/unit/testRunStyles.cxx46
-rw-r--r--test/unit/testSparseVector.cxx45
-rw-r--r--test/unit/testSplitVector.cxx47
5 files changed, 186 insertions, 0 deletions
diff --git a/test/unit/testPartitioning.cxx b/test/unit/testPartitioning.cxx
index fc55b4da1..5eef60c39 100644
--- a/test/unit/testPartitioning.cxx
+++ b/test/unit/testPartitioning.cxx
@@ -27,6 +27,30 @@ static const int testArray[lengthTestArray] = {3, 4, 5, 6, 7, 8, 9, 10};
// Test Partitioning.
+TEST_CASE("CompileCopying Partitioning") {
+
+ // These are compile-time tests to check that basic copy and move
+ // operations are defined correctly.
+
+ SECTION("CopyingMoving") {
+ Partitioning<int> s;
+ Partitioning<int> s2;
+
+ // Copy constructor
+ Partitioning<int> sa(s);
+ // Copy assignment
+ Partitioning<int> sb;
+ sb = s;
+
+ // Move constructor
+ Partitioning<int> sc(std::move(s));
+ // Move assignment
+ Partitioning<int> sd;
+ sd = (std::move(s2));
+ }
+
+}
+
TEST_CASE("Partitioning") {
Partitioning<Sci::Position> part;
diff --git a/test/unit/testPerLine.cxx b/test/unit/testPerLine.cxx
index 74881f40e..d9cf11ac6 100644
--- a/test/unit/testPerLine.cxx
+++ b/test/unit/testPerLine.cxx
@@ -31,6 +31,30 @@ constexpr int FoldBase = static_cast<int>(Scintilla::FoldLevel::Base);
// Test MarkerHandleSet.
+TEST_CASE("CompileCopying MarkerHandleSet") {
+
+ // These are compile-time tests to check that basic copy and move
+ // operations are defined correctly.
+
+ SECTION("CopyingMoving") {
+ MarkerHandleSet s;
+ MarkerHandleSet s2;
+
+ // Copy constructor
+ MarkerHandleSet sa(s);
+ // Copy assignment
+ MarkerHandleSet sb;
+ sb = s;
+
+ // Move constructor
+ MarkerHandleSet sc(std::move(s));
+ // Move assignment
+ MarkerHandleSet sd;
+ sd = (std::move(s2));
+ }
+
+}
+
TEST_CASE("MarkerHandleSet") {
MarkerHandleSet mhs;
diff --git a/test/unit/testRunStyles.cxx b/test/unit/testRunStyles.cxx
index 92e6b9ae8..74be54dc7 100644
--- a/test/unit/testRunStyles.cxx
+++ b/test/unit/testRunStyles.cxx
@@ -25,6 +25,52 @@ using namespace Scintilla::Internal;
// Test RunStyles.
+using UniqueInt = std::unique_ptr<int>;
+
+TEST_CASE("CompileCopying RunStyles") {
+
+ // These are compile-time tests to check that basic copy and move
+ // operations are defined correctly.
+
+ SECTION("CopyingMoving") {
+ RunStyles<int, int> s;
+ RunStyles<int, int> s2;
+
+ // Copy constructor
+ RunStyles<int, int> sa(s);
+ // Copy assignment fails
+ RunStyles<int, int> sb;
+ sb = s;
+
+ // Move constructor
+ RunStyles<int, int> sc(std::move(s));
+ // Move assignment
+ RunStyles<int, int> sd;
+ sd = (std::move(s2));
+ }
+
+#if defined(SHOW_COPY_BUILD_FAILURES)
+ // It should be reasonable to instantiate RunStyles where STYLE is move-only but fails
+ SECTION("MoveOnly") {
+ RunStyles<int, UniqueInt> s;
+
+ // Copy is not defined for std::unique_ptr
+ // Copy constructor fails
+ RunStyles<int, UniqueInt> sa(s);
+ // Copy assignment fails
+ RunStyles<int, UniqueInt> sb;
+ sb = s;
+
+ // Move constructor fails
+ RunStyles<int, UniqueInt> sc(std::move(s));
+ // Move assignment fails
+ RunStyles<int, UniqueInt> sd;
+ sd = (std::move(s));
+ }
+#endif
+
+}
+
namespace Scintilla::Internal { // Xcode clang 9.0 doesn't like this when in the unnamed namespace
bool operator==(const FillResult<int> &fra, const FillResult<int> &frb) {
return fra.changed == frb.changed &&
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) {
diff --git a/test/unit/testSplitVector.cxx b/test/unit/testSplitVector.cxx
index aa855f1b1..c836a4ffe 100644
--- a/test/unit/testSplitVector.cxx
+++ b/test/unit/testSplitVector.cxx
@@ -23,6 +23,53 @@ using namespace Scintilla::Internal;
// Test SplitVector.
+using UniqueInt = std::unique_ptr<int>;
+
+// Test SplitVector.
+
+TEST_CASE("CompileCopying SplitVector") {
+
+ // These are compile-time tests to check that basic copy and move
+ // operations are defined correctly.
+
+ SECTION("CopyingMoving") {
+ SplitVector<int> s;
+ SplitVector<int> s2;
+
+ // Copy constructor fails
+ SplitVector<int> sa(s);
+ // Copy assignment fails
+ SplitVector<int> sb;
+ sb = s;
+
+ // Move constructor fails
+ SplitVector<int> sc(std::move(s));
+ // Move assignment fails
+ SplitVector<int> sd;
+ sd = (std::move(s2));
+ }
+
+ SECTION("MoveOnly") {
+ SplitVector<UniqueInt> s;
+
+#if defined(SHOW_COPY_BUILD_FAILURES)
+ // Copy is not defined for std::unique_ptr
+ // Copy constructor fails
+ SplitVector<UniqueInt> sa(s);
+ // Copy assignment fails
+ SplitVector<UniqueInt> sb;
+ sb = s;
+#endif
+
+ // Move constructor fails
+ SplitVector<UniqueInt> sc(std::move(s));
+ // Move assignment fails
+ SplitVector<UniqueInt> sd;
+ sd = (std::move(s));
+ }
+
+}
+
struct StringSetHolder {
SplitVector<std::string> sa;
bool Check() const noexcept {