diff options
Diffstat (limited to 'test/unit')
-rw-r--r-- | test/unit/testPartitioning.cxx | 24 | ||||
-rw-r--r-- | test/unit/testPerLine.cxx | 24 | ||||
-rw-r--r-- | test/unit/testRunStyles.cxx | 46 | ||||
-rw-r--r-- | test/unit/testSparseVector.cxx | 45 | ||||
-rw-r--r-- | test/unit/testSplitVector.cxx | 47 |
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 { |