C++ Utilities  4.14.0
Useful C++ classes and routines such as argument parser, IO and conversion utilities
misctests.cpp
Go to the documentation of this file.
1 #include "../misc/levenshtein.h"
2 #include "../misc/multiarray.h"
3 #include "../tests/testutils.h"
4 
5 #include <cppunit/TestFixture.h>
6 #include <cppunit/extensions/HelperMacros.h>
7 
8 using namespace std;
9 using namespace MiscUtilities;
10 using namespace TestUtilities::Literals;
11 
12 using namespace CPPUNIT_NS;
13 
17 class MiscTests : public TestFixture {
18  CPPUNIT_TEST_SUITE(MiscTests);
19  CPPUNIT_TEST(testMultiArray);
20  CPPUNIT_TEST(testLevenshtein);
21  CPPUNIT_TEST_SUITE_END();
22 
23 public:
24  void setUp()
25  {
26  }
27  void tearDown()
28  {
29  }
30 
31  void testMultiArray();
32  void testLevenshtein();
33 };
34 
36 
38 {
39  static_assert(decltype(makeMultiArray<char>(3))::dimensionCount() == 1, "dimension count 1D");
40  static_assert(decltype(makeMultiArray<char>(3, 2))::dimensionCount() == 2, "dimension count 2D");
41  static_assert(decltype(makeMultiArray<char>(3, 2, 3))::dimensionCount() == 3, "dimension count 3D");
42 
43  auto array1d(makeMultiArray<char>(3));
44  CPPUNIT_ASSERT_EQUAL(3_st, array1d.dimensionSize<0>());
45  CPPUNIT_ASSERT_EQUAL(3_st, array1d.totalSize());
46  array1d.at(0) = 'a';
47  array1d.at(1) = 'b';
48  array1d.at(2) = 'c';
49  CPPUNIT_ASSERT_EQUAL("abc"s, string(array1d.data(), 3));
50 
51  auto array2d(makeMultiArray<char>(3, 2));
52  CPPUNIT_ASSERT_EQUAL(3_st, array2d.dimensionSize<0>());
53  CPPUNIT_ASSERT_EQUAL(2_st, array2d.dimensionSize<1>());
54  CPPUNIT_ASSERT_EQUAL(6_st, array2d.totalSize());
55  const char *const data(array2d.data());
56  array2d.at(0, 0) = 'a';
57  array2d.at(0, 1) = 'b';
58  array2d.at(1, 0) = 'c';
59  array2d.at(1, 1) = 'd';
60  array2d.at(2, 0) = 'e';
61  array2d.at(2, 1) = 'f';
62  CPPUNIT_ASSERT_EQUAL("abcdef"s, string(data, 6));
63 
64  auto array3d(makeMultiArray<char>(3, 2, 3));
65  CPPUNIT_ASSERT_EQUAL(3_st, array3d.dimensionSize<0>());
66  CPPUNIT_ASSERT_EQUAL(2_st, array3d.dimensionSize<1>());
67  CPPUNIT_ASSERT_EQUAL(3_st, array3d.dimensionSize<2>());
68  CPPUNIT_ASSERT_EQUAL(18_st, array3d.totalSize());
69  array3d.at(0, 0, 0) = 'a';
70  array3d.at(0, 0, 1) = 'b';
71  array3d.at(0, 0, 2) = 'c';
72  array3d.at(0, 1, 0) = 'd';
73  array3d.at(0, 1, 1) = 'e';
74  array3d.at(0, 1, 2) = 'f';
75  array3d.at(1, 0, 0) = 'g';
76  array3d.at(1, 0, 1) = 'h';
77  array3d.at(1, 0, 2) = 'i';
78  array3d.at(1, 1, 0) = 'j';
79  array3d.at(1, 1, 1) = 'k';
80  array3d.at(1, 1, 2) = 'l';
81  array3d.at(2, 0, 0) = 'm';
82  array3d.at(2, 0, 1) = 'n';
83  array3d.at(2, 0, 2) = 'o';
84  array3d.at(2, 1, 0) = 'p';
85  array3d.at(2, 1, 1) = 'q';
86  array3d.at(2, 1, 2) = 'r';
87  CPPUNIT_ASSERT_EQUAL("abcdefghijklmnopqr"s, string(array3d.data(), 18));
88 
89  auto stackMultiArray(makeFixedSizeMultiArray<char, 9>(3, 3));
90  CPPUNIT_ASSERT_EQUAL(3_st, stackMultiArray.dimensionSize<0>());
91  CPPUNIT_ASSERT_EQUAL(3_st, stackMultiArray.dimensionSize<1>());
92  CPPUNIT_ASSERT_EQUAL(9_st, stackMultiArray.totalSize());
93  stackMultiArray.at(0, 0) = 'a';
94  stackMultiArray.at(0, 1) = 'b';
95  stackMultiArray.at(0, 2) = 'c';
96  stackMultiArray.at(1, 0) = 'd';
97  stackMultiArray.at(1, 1) = 'e';
98  stackMultiArray.at(1, 2) = 'f';
99  stackMultiArray.at(2, 0) = 'g';
100  stackMultiArray.at(2, 1) = 'h';
101  stackMultiArray.at(2, 2) = 'i';
102  CPPUNIT_ASSERT_EQUAL("abcdefghi"s, string(stackMultiArray.data(), 9));
103 }
104 
106 {
107  CPPUNIT_ASSERT_EQUAL(1_st, computeDamerauLevenshteinDistance("ab", "abc"));
108  CPPUNIT_ASSERT_EQUAL(1_st, computeDamerauLevenshteinDistance("abc", "ab"));
109  CPPUNIT_ASSERT_EQUAL(2_st, computeDamerauLevenshteinDistance("xzaby", "xbay"));
110  CPPUNIT_ASSERT_EQUAL(0_st, computeDamerauLevenshteinDistance("", ""));
111  CPPUNIT_ASSERT_EQUAL(1_st, computeDamerauLevenshteinDistance("ab", "ba"));
112  CPPUNIT_ASSERT_EQUAL(1_st, computeDamerauLevenshteinDistance("xaby", "xbay"));
113  CPPUNIT_ASSERT_EQUAL(0_st, computeDamerauLevenshteinDistance("abc", "abc"));
114  CPPUNIT_ASSERT_EQUAL(1_st, computeDamerauLevenshteinDistance("ab", "abc"));
115  CPPUNIT_ASSERT_EQUAL(2_st, computeDamerauLevenshteinDistance("ca", "abc"));
116  CPPUNIT_ASSERT_EQUAL(4_st, computeDamerauLevenshteinDistance("", "abcd"));
117  CPPUNIT_ASSERT_EQUAL(4_st, computeDamerauLevenshteinDistance("abcd", ""));
118  CPPUNIT_ASSERT_EQUAL(3_st, computeDamerauLevenshteinDistance("abcd", "d"));
119  CPPUNIT_ASSERT_EQUAL(2_st, computeDamerauLevenshteinDistance("abcd", "bc"));
120  CPPUNIT_ASSERT_EQUAL(3_st, computeDamerauLevenshteinDistance("abcd", "a"));
121  CPPUNIT_ASSERT_EQUAL(2_st, computeDamerauLevenshteinDistance("adb", "abc"));
122  CPPUNIT_ASSERT_EQUAL(2_st, computeDamerauLevenshteinDistance("xxaxx", "xxäxx"));
123  CPPUNIT_ASSERT_EQUAL(1_st, computeDamerauLevenshteinDistance("xxöxx", "xxäxx"));
124  CPPUNIT_ASSERT_EQUAL(11_st, computeDamerauLevenshteinDistance("this is a long text", "this is too long for stack"));
125 }
void setUp()
Definition: misctests.cpp:24
STL namespace.
CPPUNIT_TEST_SUITE_REGISTRATION(MiscTests)
void tearDown()
Definition: misctests.cpp:27
Contains literals to ease asserting with CPPUNIT_ASSERT_EQUAL.
Definition: testutils.h:219
CPP_UTILITIES_EXPORT std::size_t computeDamerauLevenshteinDistance(const char *str1, std::size_t size1, const char *str2, std::size_t size2)
void testLevenshtein()
Definition: misctests.cpp:105
The MiscUtilities namespace contains various utilities such as computing Damerau–Levenshtein distanc...
Definition: multiarray.h:8
void testMultiArray()
Definition: misctests.cpp:37
The MiscTests class tests functions and classes from the misc directory.
Definition: misctests.cpp:17