1#include "../misc/flagenumclass.h"
2#include "../misc/levenshtein.h"
3#include "../misc/multiarray.h"
5#include "../conversion/stringbuilder.h"
6#include "../conversion/stringconversion.h"
10#include "../tests/testutils.h"
12#include "resources/version.h"
14#include <cppunit/TestFixture.h>
15#include <cppunit/extensions/HelperMacros.h>
22using namespace CPPUNIT_NS;
25#if CPP_UTILITIES_VERSION_CHECK(5, 2, 1) > CPP_UTILITIES_VERSION_CHECK(6, 0, 0)
26#error "Check for major version doesn't work"
28#if CPP_UTILITIES_VERSION_CHECK(5, 2, 2) > CPP_UTILITIES_VERSION_CHECK(5, 3, 0)
29#error "Check for minor version doesn't work"
31#if CPP_UTILITIES_VERSION_CHECK(5, 2, 1) > CPP_UTILITIES_VERSION_CHECK(5, 2, 2)
32#error "Check for path version doesn't work"
34#if CPP_UTILITIES_VERSION < CPP_UTILITIES_VERSION_CHECK(5, 0, 0)
35#error "Library version seems wrongly defined, should be already >= 5.0.0"
46 CPPUNIT_TEST_SUITE_END();
65 static_assert(
decltype(makeMultiArray<char>(3))::dimensionCount() == 1,
"dimension count 1D");
66 static_assert(
decltype(makeMultiArray<char>(3, 2))::dimensionCount() == 2,
"dimension count 2D");
67 static_assert(
decltype(makeMultiArray<char>(3, 2, 3))::dimensionCount() == 3,
"dimension count 3D");
69 auto array1d(makeMultiArray<char>(3));
70 CPPUNIT_ASSERT_EQUAL(3_st, array1d.dimensionSize<0>());
71 CPPUNIT_ASSERT_EQUAL(3_st, array1d.totalSize());
75 CPPUNIT_ASSERT_EQUAL(
"abc"s,
string(array1d.data(), 3));
77 auto array2d(makeMultiArray<char>(3, 2));
78 CPPUNIT_ASSERT_EQUAL(3_st, array2d.dimensionSize<0>());
79 CPPUNIT_ASSERT_EQUAL(2_st, array2d.dimensionSize<1>());
80 CPPUNIT_ASSERT_EQUAL(6_st, array2d.totalSize());
81 const char *
const data(array2d.data());
82 array2d.at(0, 0) =
'a';
83 array2d.at(0, 1) =
'b';
84 array2d.at(1, 0) =
'c';
85 array2d.at(1, 1) =
'd';
86 array2d.at(2, 0) =
'e';
87 array2d.at(2, 1) =
'f';
88 CPPUNIT_ASSERT_EQUAL(
"abcdef"s,
string(data, 6));
90 auto array3d(makeMultiArray<char>(3, 2, 3));
91 CPPUNIT_ASSERT_EQUAL(3_st, array3d.dimensionSize<0>());
92 CPPUNIT_ASSERT_EQUAL(2_st, array3d.dimensionSize<1>());
93 CPPUNIT_ASSERT_EQUAL(3_st, array3d.dimensionSize<2>());
94 CPPUNIT_ASSERT_EQUAL(18_st, array3d.totalSize());
95 array3d.at(0, 0, 0) =
'a';
96 array3d.at(0, 0, 1) =
'b';
97 array3d.at(0, 0, 2) =
'c';
98 array3d.at(0, 1, 0) =
'd';
99 array3d.at(0, 1, 1) =
'e';
100 array3d.at(0, 1, 2) =
'f';
101 array3d.at(1, 0, 0) =
'g';
102 array3d.at(1, 0, 1) =
'h';
103 array3d.at(1, 0, 2) =
'i';
104 array3d.at(1, 1, 0) =
'j';
105 array3d.at(1, 1, 1) =
'k';
106 array3d.at(1, 1, 2) =
'l';
107 array3d.at(2, 0, 0) =
'm';
108 array3d.at(2, 0, 1) =
'n';
109 array3d.at(2, 0, 2) =
'o';
110 array3d.at(2, 1, 0) =
'p';
111 array3d.at(2, 1, 1) =
'q';
112 array3d.at(2, 1, 2) =
'r';
113 CPPUNIT_ASSERT_EQUAL(
"abcdefghijklmnopqr"s,
string(array3d.data(), 18));
115 auto stackMultiArray(makeFixedSizeMultiArray<char, 9>(3, 3));
116 CPPUNIT_ASSERT_EQUAL(3_st, stackMultiArray.dimensionSize<0>());
117 CPPUNIT_ASSERT_EQUAL(3_st, stackMultiArray.dimensionSize<1>());
118 CPPUNIT_ASSERT_EQUAL(9_st, stackMultiArray.totalSize());
119 stackMultiArray.at(0, 0) =
'a';
120 stackMultiArray.at(0, 1) =
'b';
121 stackMultiArray.at(0, 2) =
'c';
122 stackMultiArray.at(1, 0) =
'd';
123 stackMultiArray.at(1, 1) =
'e';
124 stackMultiArray.at(1, 2) =
'f';
125 stackMultiArray.at(2, 0) =
'g';
126 stackMultiArray.at(2, 1) =
'h';
127 stackMultiArray.at(2, 2) =
'i';
128 CPPUNIT_ASSERT_EQUAL(
"abcdefghi"s,
string(stackMultiArray.data(), 9));
158 const auto workingCopyPathForNestedTestFile =
workingCopyPath(
"subdir/nested-testfile.txt");
159 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"creation of subdirectories in working dir",
"some file\n"s,
readFile(workingCopyPathForNestedTestFile));
161 const auto workingCopyPathUnderDifferentNameForNestedTestFile =
workingCopyPathAs(
"subdir/nested-testfile.txt",
"subdir2/foo.txt");
162 const auto splittedPath = splitString<vector<string>>(workingCopyPathUnderDifferentNameForNestedTestFile,
"/", EmptyPartsTreat::Omit);
163 CPPUNIT_ASSERT_GREATEREQUAL(2_st, splittedPath.size());
164 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"different subdir",
"subdir2"s, splittedPath[splittedPath.size() - 2]);
165 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"different file name",
"foo.txt"s, splittedPath[splittedPath.size() - 1]);
166 CPPUNIT_ASSERT_EQUAL_MESSAGE(
167 "creation of subdirectories in working dir",
"some file\n"s,
readFile(workingCopyPathUnderDifferentNameForNestedTestFile));
171 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"printing hex numbers",
"0x10"s, ss.str());
The MiscTests class tests misc functions and classes (mainly of files contained by the misc directory...
void testTestUtilities()
Tests helper from TestUtilities namespace which aren't used in other tests anyways.
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(FlagEnumTests, FlagEnumTests::TestFlags)
CPPUNIT_TEST_SUITE_REGISTRATION(MiscTests)
Contains literals to ease asserting with CPPUNIT_ASSERT_EQUAL.
Contains all utilities provides by the c++utilities library.
CPP_UTILITIES_EXPORT std::string readFile(const std::string &path, std::string::size_type maxSize=std::string::npos)
Reads all contents of the specified file in a single call.
CPP_UTILITIES_EXPORT std::string workingCopyPath(const std::string &relativeTestFilePath, WorkingCopyMode mode=WorkingCopyMode::CreateCopy)
Convenience function to invoke TestApplication::workingCopyPath().
constexpr bool checkFlagEnum(FlagEnumClass flagVariable, FlagEnumClass flagsToCheck)
Returns whether the specified flagVariable has set all flags specified via flagsToCheck to true.
AsHexNumber< T > asHexNumber(const T &value)
Wraps a value to be printed using the hex system in the error case when asserted with cppunit (or sim...
CPP_UTILITIES_EXPORT std::string workingCopyPathAs(const std::string &relativeTestFilePath, const std::string &relativeWorkingCopyPath, WorkingCopyMode mode=WorkingCopyMode::CreateCopy)
Convenience function to invoke TestApplication::workingCopyPathAs().
constexpr FlagEnumClass & modFlagEnum(FlagEnumClass &flagVariable, FlagEnumClass relevantFlags, bool value)
Sets the specified relevantFlags in the specified flagVariable to the specified value.
CPP_UTILITIES_EXPORT std::size_t computeDamerauLevenshteinDistance(const char *str1, std::size_t size1, const char *str2, std::size_t size2)
constexpr bool testFlagEnumClass()
#define TESTUTILS_ASSERT_LIKE(message, expectedRegex, actualString)
Asserts whether the specified string matches the specified regex.