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"