File indexing completed on 2024-04-28 17:01:43
0001 /* 0002 SPDX-FileCopyrightText: 2011 Dmitry Risenberg <dmitry.risenberg@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "levenshteintest.h" 0008 0009 #include <QTest> 0010 #include "difference.h" 0011 #include "differencestringpair.h" 0012 #include "levenshteintable.h" 0013 #include "stringlistpair.h" 0014 0015 using namespace Diff2; 0016 0017 namespace QTest { 0018 0019 template<> char* toString(const Marker& marker) 0020 { 0021 QByteArray result = "Marker("; 0022 if (marker.type() == Marker::Start) { 0023 result += "Start, "; 0024 } else { 0025 result += "End, "; 0026 } 0027 result += QByteArray::number(marker.offset()); 0028 result += ")"; 0029 return qstrdup(result.data()); 0030 } 0031 0032 } 0033 0034 void LevenshteinTest::testFirstEmptyString() 0035 { 0036 DifferenceString* string1 = new DifferenceString(QString("12345")); 0037 DifferenceString* string2 = new DifferenceString(QString()); 0038 DifferenceStringPair* pair = new DifferenceStringPair(string1, string2); 0039 LevenshteinTable<DifferenceStringPair> table; 0040 table.createTable(pair); 0041 table.createListsOfMarkers(); 0042 MarkerList markersFirstExpected; 0043 markersFirstExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 5); 0044 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0045 QCOMPARE(*string1->markerList()[i], *markersFirstExpected[i]); 0046 } 0047 MarkerList markersSecondExpected; 0048 markersSecondExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 0); 0049 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0050 QCOMPARE(*string2->markerList()[i], *markersSecondExpected[i]); 0051 } 0052 } 0053 0054 void LevenshteinTest::testSecondEmptyString() 0055 { 0056 DifferenceString* string1 = new DifferenceString(QString()); 0057 DifferenceString* string2 = new DifferenceString(QString("12345")); 0058 DifferenceStringPair* pair = new DifferenceStringPair(string1, string2); 0059 LevenshteinTable<DifferenceStringPair> table; 0060 table.createTable(pair); 0061 table.createListsOfMarkers(); 0062 MarkerList markersFirstExpected; 0063 markersFirstExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 0); 0064 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0065 QCOMPARE(*string1->markerList()[i], *markersFirstExpected[i]); 0066 } 0067 MarkerList markersSecondExpected; 0068 markersSecondExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 5); 0069 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0070 QCOMPARE(*string2->markerList()[i], *markersSecondExpected[i]); 0071 } 0072 } 0073 0074 0075 void LevenshteinTest::testDifferenceStrings() 0076 { 0077 DifferenceString* string1 = new DifferenceString(QString("aaabcddefghik")); 0078 DifferenceString* string2 = new DifferenceString(QString("aabcefghijk")); 0079 DifferenceStringPair* pair = new DifferenceStringPair(string1, string2); 0080 LevenshteinTable<DifferenceStringPair> table; 0081 table.createTable(pair); 0082 table.createListsOfMarkers(); 0083 MarkerList markersFirstExpected; 0084 markersFirstExpected << new Marker(Marker::Start, 2) << new Marker(Marker::End, 3) << new Marker(Marker::Start, 5) << new Marker(Marker::End, 7); 0085 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0086 QCOMPARE(*string1->markerList()[i], *markersFirstExpected[i]); 0087 } 0088 MarkerList markersSecondExpected; 0089 markersSecondExpected << new Marker(Marker::Start, 9) << new Marker(Marker::End, 10); 0090 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0091 QCOMPARE(*string2->markerList()[i], *markersSecondExpected[i]); 0092 } 0093 } 0094 0095 void LevenshteinTest::testStringLists() 0096 { 0097 QStringList list1; 0098 list1 << "delete1" << "line1" << "line2" << "line3" << "delete2" << "delete3" << "line4"; 0099 QStringList list2; 0100 list2 << "line1" << "line2" << "line3" << "insert1" << "line4" << "insert2"; 0101 StringListPair* pair = new StringListPair(list1, list2); 0102 LevenshteinTable<StringListPair> table; 0103 table.createTable(pair); 0104 table.createListsOfMarkers(); 0105 0106 MarkerList markersFirstExpected; 0107 markersFirstExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 1) << new Marker(Marker::Start, 4) << new Marker(Marker::End, 6); 0108 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0109 QCOMPARE(*pair->markerListFirst()[i], *markersFirstExpected[i]); 0110 } 0111 MarkerList markersSecondExpected; 0112 markersSecondExpected << new Marker(Marker::Start, 3) << new Marker(Marker::End, 4) << new Marker(Marker::Start, 5) << new Marker(Marker::End, 6); 0113 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0114 QCOMPARE(*pair->markerListSecond()[i], *markersSecondExpected[i]); 0115 } 0116 } 0117 0118 void LevenshteinTest::testSmth() 0119 { 0120 QStringList list1; 0121 list1 << "insert1\n" << "newline1\n" << "newline2\n" << "insert2\n";; 0122 QStringList list2; 0123 list2 << "delete1\n" << "efgh\n" << "delete2\n"; 0124 StringListPair* pair = new StringListPair(list1, list2); 0125 LevenshteinTable<StringListPair> table; 0126 table.createTable(pair); 0127 table.createListsOfMarkers(); 0128 0129 MarkerList markersFirstExpected; 0130 markersFirstExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 4); 0131 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0132 QCOMPARE(*pair->markerListFirst()[i], *markersFirstExpected[i]); 0133 } 0134 MarkerList markersSecondExpected; 0135 markersSecondExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 3); 0136 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0137 QCOMPARE(*pair->markerListSecond()[i], *markersSecondExpected[i]); 0138 } 0139 } 0140 0141 0142 QTEST_GUILESS_MAIN(LevenshteinTest); 0143 0144 #include "moc_levenshteintest.cpp"