5 #include "levenshtein.h"
7 void printTable(vector
<vector
<int> > &table
)
9 int rows
= table
.size();
10 int cols
= table
[0].size();
12 for (int i
=0; i
< rows
; i
++){
13 for (int j
=0; j
< cols
; j
++){
14 cout
<< table
[i
][j
] << " ";
19 void printTrace(list
<pair
<int, int> > &trace
)
21 list
<pair
<int, int> >::const_iterator it
= trace
.begin();
22 list
<pair
<int, int> >::const_iterator it_end
= trace
.end();
23 for (; it
!= it_end
; it
++){
24 cout
<< "(" << (*it
).first
<< ", " << (*it
).second
<< ") ";
29 void printRanges(vector
<range_t
> &ranges
)
31 int len
= ranges
.size();
32 cout
<< "INSERTION: " << range_t::INSERTION
<< endl
;
33 cout
<< "SUBSTITUTION: " << range_t::SUBSTITUTION
<< endl
;
34 for (int i
=0; i
< len
; i
++){
35 cout
<< "type: " << ranges
[i
].type
<< ", "
36 << "original: " << ranges
[i
].original
<< ", "
37 << "from: " << ranges
[i
].from
<< ", "
38 << "length: " << ranges
[i
].length
<< endl
;
42 TEST_CASE(TestCaseLevenshtein
);
44 vector
<vector
<int> > table
;
45 list
<pair
<int, int> > trace
;
46 vector
<range_t
> ranges
;
56 for (int i
=0; i
< 8; i
++){
60 for (int i
=0; i
< 7; i
++)
63 table
[1][1] = 1; table
[1][2] = 2; table
[1][3] = 3;
64 table
[1][4] = 4; table
[1][5] = 5; table
[1][6] = 6;
66 table
[2][1] = 2; table
[2][2] = 1; table
[2][3] = 2;
67 table
[2][4] = 3; table
[2][5] = 4; table
[2][6] = 5;
69 table
[3][1] = 3; table
[3][2] = 2; table
[3][3] = 1;
70 table
[3][4] = 2; table
[3][5] = 3; table
[3][6] = 4;
72 table
[4][1] = 4; table
[4][2] = 3; table
[4][3] = 2;
73 table
[4][4] = 1; table
[4][5] = 2; table
[4][6] = 3;
75 table
[5][1] = 5; table
[5][2] = 4; table
[5][3] = 3;
76 table
[5][4] = 2; table
[5][5] = 2; table
[5][6] = 3;
78 table
[6][1] = 6; table
[6][2] = 5; table
[6][3] = 4;
79 table
[6][4] = 3; table
[6][5] = 3; table
[6][6] = 2;
81 table
[7][1] = 7; table
[7][2] = 6; table
[7][3] = 5;
82 table
[7][4] = 4; table
[7][5] = 4; table
[7][6] = 3;
84 trace
.push_front(pair
<int, int>(7, 6));
85 trace
.push_front(pair
<int, int>(6, 6));
86 trace
.push_front(pair
<int, int>(5, 5));
87 trace
.push_front(pair
<int, int>(4, 4));
88 trace
.push_front(pair
<int, int>(3, 3));
89 trace
.push_front(pair
<int, int>(2, 2));
90 trace
.push_front(pair
<int, int>(1, 1));
94 range
.type
= range_t::SUBSTITUTION
;
95 range
.original
= true;
98 ranges
.push_back(range
);
100 range
.original
= false;
101 ranges
.push_back(range
);
103 range
.original
= true;
106 ranges
.push_back(range
);
108 range
.original
= false;
109 ranges
.push_back(range
);
111 range
.type
= range_t::INSERTION
;
112 range
.original
= false;
115 ranges
.push_back(range
);
120 LevenshteinTable
l_table(original
, modified
);
121 vector
<vector
<int> > table2
;
122 list
<pair
<int, int> > trace2
;
123 l_table
.dumpTable(table2
);
124 l_table
.dumpTrace(trace2
);
126 assertEqualsM(table
, table2
, "Incorrect Levenshtein table.");
127 assertEqualsM(trace
, trace2
, "Incorrect trace back.");
132 LevenshteinTable
l_table(original
, modified
);
133 vector
<range_t
> ranges2
;
134 l_table
.fillRanges(ranges2
);
136 //printRanges(ranges);
137 //printRanges(ranges2);
139 assertEqualsM(ranges
.size(), ranges2
.size(), "Incorrect size of ranges.");
140 int len
= ranges
.size();
141 for (int i
=0; i
< len
; i
++){
142 assertTrue(ranges2
.end() != std::find(ranges2
.begin(), ranges2
.end(), ranges
[i
]));
148 REG_TEST(testRanges
);