diff-lcs 2.0.0.beta.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -5
- data/CODE_OF_CONDUCT.md +152 -114
- data/CONTRIBUTING.md +8 -3
- data/CONTRIBUTORS.md +19 -9
- data/Manifest.txt +88 -70
- data/README.md +30 -17
- data/Rakefile +90 -22
- data/SECURITY.md +3 -12
- data/integration/compare/array_diff_spec.rb +10 -0
- data/integration/compare/hash_diff_spec.rb +25 -0
- data/integration/compare/string_diff_spec.rb +10 -0
- data/integration/rspec_differ_spec.rb +26 -0
- data/integration/rspec_expectations_spec.rb +32 -0
- data/integration/runner +20 -0
- data/lib/diff/lcs/change.rb +21 -16
- data/lib/diff/lcs/ldiff.rb +9 -4
- data/lib/diff/lcs/version.rb +1 -1
- data/spec/hunk_spec.rb +32 -34
- data/spec/ldiff_spec.rb +7 -7
- data/spec/spec_helper.rb +4 -12
- data/test/fixtures/ldiff/output.diff-c +7 -0
- data/test/fixtures/ldiff/output.diff-u +5 -0
- data/test/fixtures/ldiff/output.diff.bin2 +1 -0
- data/test/fixtures/ldiff/output.diff.bin2-c +1 -0
- data/test/fixtures/ldiff/output.diff.bin2-e +1 -0
- data/test/fixtures/ldiff/output.diff.bin2-f +1 -0
- data/test/fixtures/ldiff/output.diff.bin2-u +1 -0
- data/{spec → test}/fixtures/ldiff/output.diff.chef-c +2 -2
- data/test/fixtures/ldiff/output.diff.chef-u +9 -0
- data/{spec → test}/fixtures/ldiff/output.diff.chef2-c +2 -2
- data/{spec → test}/fixtures/ldiff/output.diff.chef2-u +2 -2
- data/test/fixtures/ldiff/output.diff.empty.vs.four_lines-c +9 -0
- data/test/fixtures/ldiff/output.diff.empty.vs.four_lines-u +7 -0
- data/test/fixtures/ldiff/output.diff.four_lines.vs.empty-c +9 -0
- data/test/fixtures/ldiff/output.diff.four_lines.vs.empty-u +7 -0
- data/test/fixtures/ldiff/output.diff.issue95_trailing_context-c +9 -0
- data/test/fixtures/ldiff/output.diff.issue95_trailing_context-u +6 -0
- data/{spec → test}/fixtures/ldiff/output.diff.missing_new_line1-c +2 -2
- data/test/fixtures/ldiff/output.diff.missing_new_line1-u +9 -0
- data/{spec → test}/fixtures/ldiff/output.diff.missing_new_line2-c +2 -2
- data/test/fixtures/ldiff/output.diff.missing_new_line2-u +9 -0
- data/test/test_block.rb +34 -0
- data/test/test_change.rb +234 -0
- data/test/test_diff.rb +53 -0
- data/test/test_helper.rb +225 -0
- data/test/test_hunk.rb +72 -0
- data/test/test_issues.rb +168 -0
- data/test/test_lcs.rb +47 -0
- data/test/test_ldiff.rb +89 -0
- data/test/test_patch.rb +362 -0
- data/test/test_sdiff.rb +167 -0
- data/test/test_traverse_balanced.rb +322 -0
- data/test/test_traverse_sequences.rb +187 -0
- metadata +136 -105
- data/spec/fixtures/ldiff/output.diff-c +0 -7
- data/spec/fixtures/ldiff/output.diff-u +0 -5
- data/spec/fixtures/ldiff/output.diff.bin2 +0 -1
- data/spec/fixtures/ldiff/output.diff.bin2-c +0 -1
- data/spec/fixtures/ldiff/output.diff.bin2-e +0 -1
- data/spec/fixtures/ldiff/output.diff.bin2-f +0 -1
- data/spec/fixtures/ldiff/output.diff.bin2-u +0 -1
- data/spec/fixtures/ldiff/output.diff.chef-u +0 -9
- data/spec/fixtures/ldiff/output.diff.empty.vs.four_lines-c +0 -9
- data/spec/fixtures/ldiff/output.diff.empty.vs.four_lines-u +0 -7
- data/spec/fixtures/ldiff/output.diff.four_lines.vs.empty-c +0 -9
- data/spec/fixtures/ldiff/output.diff.four_lines.vs.empty-u +0 -7
- data/spec/fixtures/ldiff/output.diff.issue95_trailing_context-c +0 -9
- data/spec/fixtures/ldiff/output.diff.issue95_trailing_context-u +0 -6
- data/spec/fixtures/ldiff/output.diff.missing_new_line1-u +0 -9
- data/spec/fixtures/ldiff/output.diff.missing_new_line2-u +0 -9
- /data/{spec → test}/fixtures/123_x +0 -0
- /data/{spec → test}/fixtures/456_x +0 -0
- /data/{spec → test}/fixtures/aX +0 -0
- /data/{spec → test}/fixtures/bXaX +0 -0
- /data/{spec → test}/fixtures/ds1.csv +0 -0
- /data/{spec → test}/fixtures/ds2.csv +0 -0
- /data/{spec → test}/fixtures/empty +0 -0
- /data/{spec → test}/fixtures/file1.bin +0 -0
- /data/{spec → test}/fixtures/file2.bin +0 -0
- /data/{spec → test}/fixtures/four_lines +0 -0
- /data/{spec → test}/fixtures/four_lines_with_missing_new_line +0 -0
- /data/{spec → test}/fixtures/ldiff/diff.missing_new_line1-e +0 -0
- /data/{spec → test}/fixtures/ldiff/diff.missing_new_line1-f +0 -0
- /data/{spec → test}/fixtures/ldiff/diff.missing_new_line2-e +0 -0
- /data/{spec → test}/fixtures/ldiff/diff.missing_new_line2-f +0 -0
- /data/{spec → test}/fixtures/ldiff/error.diff.chef-e +0 -0
- /data/{spec → test}/fixtures/ldiff/error.diff.chef-f +0 -0
- /data/{spec → test}/fixtures/ldiff/error.diff.missing_new_line1-e +0 -0
- /data/{spec → test}/fixtures/ldiff/error.diff.missing_new_line1-f +0 -0
- /data/{spec → test}/fixtures/ldiff/error.diff.missing_new_line2-e +0 -0
- /data/{spec → test}/fixtures/ldiff/error.diff.missing_new_line2-f +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.bin1 +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.bin1-c +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.bin1-e +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.bin1-f +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.bin1-u +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.chef +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.chef2 +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.chef2-d +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.empty.vs.four_lines +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.empty.vs.four_lines-e +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.empty.vs.four_lines-f +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.four_lines.vs.empty +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.four_lines.vs.empty-e +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.four_lines.vs.empty-f +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.issue95_trailing_context +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.issue95_trailing_context-e +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.issue95_trailing_context-f +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.missing_new_line1 +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.missing_new_line1-e +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.missing_new_line1-f +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.missing_new_line2 +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.missing_new_line2-e +0 -0
- /data/{spec → test}/fixtures/ldiff/output.diff.missing_new_line2-f +0 -0
- /data/{spec → test}/fixtures/new-chef +0 -0
- /data/{spec → test}/fixtures/new-chef2 +0 -0
- /data/{spec → test}/fixtures/old-chef +0 -0
- /data/{spec → test}/fixtures/old-chef2 +0 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "test_helper"
|
|
4
|
+
|
|
5
|
+
class TestTraverseBalanced < Minitest::Test
|
|
6
|
+
def balanced_traversal(s1, s2, callback_type)
|
|
7
|
+
callback = send(callback_type)
|
|
8
|
+
traverse_balanced(s1, s2, callback)
|
|
9
|
+
callback
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def balanced_reverse(change_result)
|
|
13
|
+
new_result = []
|
|
14
|
+
change_result.each do |line|
|
|
15
|
+
line = [line[0], line[2], line[1]]
|
|
16
|
+
case line[0]
|
|
17
|
+
when "<"
|
|
18
|
+
line[0] = ">"
|
|
19
|
+
when ">"
|
|
20
|
+
line[0] = "<"
|
|
21
|
+
end
|
|
22
|
+
new_result << line
|
|
23
|
+
end
|
|
24
|
+
new_result.sort_by { |line| [line[1], line[2]] }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def map_to_no_change(change_result)
|
|
28
|
+
new_result = []
|
|
29
|
+
change_result.each do |line|
|
|
30
|
+
case line[0]
|
|
31
|
+
when "!"
|
|
32
|
+
new_result << ["<", line[1], line[2]]
|
|
33
|
+
new_result << [">", line[1] + 1, line[2]]
|
|
34
|
+
else
|
|
35
|
+
new_result << line
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
new_result
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class BalancedCallback
|
|
42
|
+
def initialize
|
|
43
|
+
reset
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
attr_reader :result
|
|
47
|
+
|
|
48
|
+
def reset
|
|
49
|
+
@result = []
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def match(event)
|
|
53
|
+
@result << ["=", event.old_position, event.new_position]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def discard_a(event)
|
|
57
|
+
@result << ["<", event.old_position, event.new_position]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def discard_b(event)
|
|
61
|
+
@result << [">", event.old_position, event.new_position]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def change(event)
|
|
65
|
+
@result << ["!", event.old_position, event.new_position]
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def balanced_callback
|
|
70
|
+
BalancedCallback.new
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class BalancedCallbackNoChange < BalancedCallback
|
|
74
|
+
undef :change
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def balanced_callback_no_change
|
|
78
|
+
BalancedCallbackNoChange.new
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def assert_traversal_with_change(s1, s2, result)
|
|
82
|
+
traversal = balanced_traversal(s1, s2, :balanced_callback)
|
|
83
|
+
assert_equal result, traversal.result
|
|
84
|
+
|
|
85
|
+
traversal = balanced_traversal(s2, s1, :balanced_callback)
|
|
86
|
+
assert_equal balanced_reverse(result), traversal.result
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def assert_traversal_without_change(s1, s2, result)
|
|
90
|
+
traversal = balanced_traversal(s1, s2, :balanced_callback_no_change)
|
|
91
|
+
assert_equal map_to_no_change(result), traversal.result
|
|
92
|
+
|
|
93
|
+
traversal = balanced_traversal(s2, s1, :balanced_callback_no_change)
|
|
94
|
+
assert_equal map_to_no_change(balanced_reverse(result)), traversal.result
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_identical_string_sequences_abc
|
|
98
|
+
s1 = s2 = "abc"
|
|
99
|
+
result = [
|
|
100
|
+
["=", 0, 0],
|
|
101
|
+
["=", 1, 1],
|
|
102
|
+
["=", 2, 2]
|
|
103
|
+
]
|
|
104
|
+
assert_traversal_with_change(s1, s2, result)
|
|
105
|
+
assert_traversal_without_change(s1, s2, result)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_identical_array_sequences_a_b_c
|
|
109
|
+
s1 = s2 = %w[a b c]
|
|
110
|
+
result = [
|
|
111
|
+
["=", 0, 0],
|
|
112
|
+
["=", 1, 1],
|
|
113
|
+
["=", 2, 2]
|
|
114
|
+
]
|
|
115
|
+
assert_traversal_with_change(s1, s2, result)
|
|
116
|
+
assert_traversal_without_change(s1, s2, result)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_sequences_a_b_c_and_a_x_c
|
|
120
|
+
s1 = %w[a b c]
|
|
121
|
+
s2 = %w[a x c]
|
|
122
|
+
result = [
|
|
123
|
+
["=", 0, 0],
|
|
124
|
+
["!", 1, 1],
|
|
125
|
+
["=", 2, 2]
|
|
126
|
+
]
|
|
127
|
+
assert_traversal_with_change(s1, s2, result)
|
|
128
|
+
assert_traversal_without_change(s1, s2, result)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_sequences_a_x_y_c_and_a_v_w_c
|
|
132
|
+
s1 = %w[a x y c]
|
|
133
|
+
s2 = %w[a v w c]
|
|
134
|
+
result = [
|
|
135
|
+
["=", 0, 0],
|
|
136
|
+
["!", 1, 1],
|
|
137
|
+
["!", 2, 2],
|
|
138
|
+
["=", 3, 3]
|
|
139
|
+
]
|
|
140
|
+
assert_traversal_with_change(s1, s2, result)
|
|
141
|
+
assert_traversal_without_change(s1, s2, result)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def test_sequences_x_y_c_and_v_w_c
|
|
145
|
+
s1 = %w[x y c]
|
|
146
|
+
s2 = %w[v w c]
|
|
147
|
+
result = [
|
|
148
|
+
["!", 0, 0],
|
|
149
|
+
["!", 1, 1],
|
|
150
|
+
["=", 2, 2]
|
|
151
|
+
]
|
|
152
|
+
assert_traversal_with_change(s1, s2, result)
|
|
153
|
+
assert_traversal_without_change(s1, s2, result)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def test_sequences_a_x_y_z_and_b_v_w
|
|
157
|
+
s1 = %w[a x y z]
|
|
158
|
+
s2 = %w[b v w]
|
|
159
|
+
result = [
|
|
160
|
+
["!", 0, 0],
|
|
161
|
+
["!", 1, 1],
|
|
162
|
+
["!", 2, 2],
|
|
163
|
+
["<", 3, 3]
|
|
164
|
+
]
|
|
165
|
+
assert_traversal_with_change(s1, s2, result)
|
|
166
|
+
assert_traversal_without_change(s1, s2, result)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def test_sequences_a_z_and_a
|
|
170
|
+
s1 = %w[a z]
|
|
171
|
+
s2 = %w[a]
|
|
172
|
+
result = [
|
|
173
|
+
["=", 0, 0],
|
|
174
|
+
["<", 1, 1]
|
|
175
|
+
]
|
|
176
|
+
assert_traversal_with_change(s1, s2, result)
|
|
177
|
+
assert_traversal_without_change(s1, s2, result)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_sequences_z_a_and_a
|
|
181
|
+
s1 = %w[z a]
|
|
182
|
+
s2 = %w[a]
|
|
183
|
+
result = [
|
|
184
|
+
["<", 0, 0],
|
|
185
|
+
["=", 1, 0]
|
|
186
|
+
]
|
|
187
|
+
assert_traversal_with_change(s1, s2, result)
|
|
188
|
+
assert_traversal_without_change(s1, s2, result)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def test_sequences_a_b_c_and_x_y_z
|
|
192
|
+
s1 = %w[a b c]
|
|
193
|
+
s2 = %w[x y z]
|
|
194
|
+
result = [
|
|
195
|
+
["!", 0, 0],
|
|
196
|
+
["!", 1, 1],
|
|
197
|
+
["!", 2, 2]
|
|
198
|
+
]
|
|
199
|
+
assert_traversal_with_change(s1, s2, result)
|
|
200
|
+
assert_traversal_without_change(s1, s2, result)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def test_strings_a_b_c_and_a_x_c
|
|
204
|
+
s1 = "a b c"
|
|
205
|
+
s2 = "a x c"
|
|
206
|
+
result = [
|
|
207
|
+
["=", 0, 0],
|
|
208
|
+
["=", 1, 1],
|
|
209
|
+
["!", 2, 2],
|
|
210
|
+
["=", 3, 3],
|
|
211
|
+
["=", 4, 4]
|
|
212
|
+
]
|
|
213
|
+
assert_traversal_with_change(s1, s2, result)
|
|
214
|
+
assert_traversal_without_change(s1, s2, result)
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def test_strings_a_x_y_c_and_a_v_w_c
|
|
218
|
+
s1 = "a x y c"
|
|
219
|
+
s2 = "a v w c"
|
|
220
|
+
result = [
|
|
221
|
+
["=", 0, 0],
|
|
222
|
+
["=", 1, 1],
|
|
223
|
+
["!", 2, 2],
|
|
224
|
+
["=", 3, 3],
|
|
225
|
+
["!", 4, 4],
|
|
226
|
+
["=", 5, 5],
|
|
227
|
+
["=", 6, 6]
|
|
228
|
+
]
|
|
229
|
+
assert_traversal_with_change(s1, s2, result)
|
|
230
|
+
assert_traversal_without_change(s1, s2, result)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def test_strings_x_y_c_and_v_w_c
|
|
234
|
+
s1 = "x y c"
|
|
235
|
+
s2 = "v w c"
|
|
236
|
+
result = [
|
|
237
|
+
["!", 0, 0],
|
|
238
|
+
["=", 1, 1],
|
|
239
|
+
["!", 2, 2],
|
|
240
|
+
["=", 3, 3],
|
|
241
|
+
["=", 4, 4]
|
|
242
|
+
]
|
|
243
|
+
assert_traversal_with_change(s1, s2, result)
|
|
244
|
+
assert_traversal_without_change(s1, s2, result)
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def test_strings_a_z_and_a
|
|
248
|
+
s1 = "a z"
|
|
249
|
+
s2 = "a"
|
|
250
|
+
result = [
|
|
251
|
+
["=", 0, 0],
|
|
252
|
+
["<", 1, 1],
|
|
253
|
+
["<", 2, 1]
|
|
254
|
+
]
|
|
255
|
+
assert_traversal_with_change(s1, s2, result)
|
|
256
|
+
assert_traversal_without_change(s1, s2, result)
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def test_strings_z_a_and_a
|
|
260
|
+
s1 = "z a"
|
|
261
|
+
s2 = "a"
|
|
262
|
+
result = [
|
|
263
|
+
["<", 0, 0],
|
|
264
|
+
["<", 1, 0],
|
|
265
|
+
["=", 2, 0]
|
|
266
|
+
]
|
|
267
|
+
assert_traversal_with_change(s1, s2, result)
|
|
268
|
+
assert_traversal_without_change(s1, s2, result)
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def test_strings_a_b_c_and_x_y_z
|
|
272
|
+
s1 = "a b c"
|
|
273
|
+
s2 = "x y z"
|
|
274
|
+
result = [
|
|
275
|
+
["!", 0, 0],
|
|
276
|
+
["=", 1, 1],
|
|
277
|
+
["!", 2, 2],
|
|
278
|
+
["=", 3, 3],
|
|
279
|
+
["!", 4, 4]
|
|
280
|
+
]
|
|
281
|
+
assert_traversal_with_change(s1, s2, result)
|
|
282
|
+
assert_traversal_without_change(s1, s2, result)
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def test_strings_abcd_efgh_ijkl_mnopqrstuvwxyz_and_empty
|
|
286
|
+
s1 = "abcd efgh ijkl mnopqrstuvwxyz"
|
|
287
|
+
s2 = ""
|
|
288
|
+
result = [
|
|
289
|
+
["<", 0, 0],
|
|
290
|
+
["<", 1, 0],
|
|
291
|
+
["<", 2, 0],
|
|
292
|
+
["<", 3, 0],
|
|
293
|
+
["<", 4, 0],
|
|
294
|
+
["<", 5, 0],
|
|
295
|
+
["<", 6, 0],
|
|
296
|
+
["<", 7, 0],
|
|
297
|
+
["<", 8, 0],
|
|
298
|
+
["<", 9, 0],
|
|
299
|
+
["<", 10, 0],
|
|
300
|
+
["<", 11, 0],
|
|
301
|
+
["<", 12, 0],
|
|
302
|
+
["<", 13, 0],
|
|
303
|
+
["<", 14, 0],
|
|
304
|
+
["<", 15, 0],
|
|
305
|
+
["<", 16, 0],
|
|
306
|
+
["<", 17, 0],
|
|
307
|
+
["<", 18, 0],
|
|
308
|
+
["<", 19, 0],
|
|
309
|
+
["<", 20, 0],
|
|
310
|
+
["<", 21, 0],
|
|
311
|
+
["<", 22, 0],
|
|
312
|
+
["<", 23, 0],
|
|
313
|
+
["<", 24, 0],
|
|
314
|
+
["<", 25, 0],
|
|
315
|
+
["<", 26, 0],
|
|
316
|
+
["<", 27, 0],
|
|
317
|
+
["<", 28, 0]
|
|
318
|
+
]
|
|
319
|
+
assert_traversal_with_change(s1, s2, result)
|
|
320
|
+
assert_traversal_without_change(s1, s2, result)
|
|
321
|
+
end
|
|
322
|
+
end
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "test_helper"
|
|
4
|
+
|
|
5
|
+
class TestTraverseSequences < Minitest::Test
|
|
6
|
+
def test_callback_with_no_finishers_over_seq1_seq2_has_correct_lcs_result_on_left_matches
|
|
7
|
+
callback_s1_s2 = simple_callback_no_finishers
|
|
8
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
9
|
+
|
|
10
|
+
callback_s2_s1 = simple_callback_no_finishers
|
|
11
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
12
|
+
|
|
13
|
+
assert_equal correct_lcs, callback_s1_s2.matched_a
|
|
14
|
+
assert_equal correct_lcs, callback_s2_s1.matched_a
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_callback_with_no_finishers_over_seq1_seq2_has_correct_lcs_result_on_right_matches
|
|
18
|
+
callback_s1_s2 = simple_callback_no_finishers
|
|
19
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
20
|
+
|
|
21
|
+
callback_s2_s1 = simple_callback_no_finishers
|
|
22
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
23
|
+
|
|
24
|
+
assert_equal correct_lcs, callback_s1_s2.matched_b
|
|
25
|
+
assert_equal correct_lcs, callback_s2_s1.matched_b
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_callback_with_no_finishers_over_seq1_seq2_has_correct_skipped_sequences_with_left_sequence
|
|
29
|
+
callback_s1_s2 = simple_callback_no_finishers
|
|
30
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
31
|
+
|
|
32
|
+
callback_s2_s1 = simple_callback_no_finishers
|
|
33
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
34
|
+
|
|
35
|
+
assert_equal skipped_seq1, callback_s1_s2.discards_a
|
|
36
|
+
assert_equal skipped_seq2, callback_s2_s1.discards_a
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_callback_with_no_finishers_over_seq1_seq2_has_correct_skipped_sequences_with_right_sequence
|
|
40
|
+
callback_s1_s2 = simple_callback_no_finishers
|
|
41
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
42
|
+
|
|
43
|
+
callback_s2_s1 = simple_callback_no_finishers
|
|
44
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
45
|
+
|
|
46
|
+
assert_equal skipped_seq2, callback_s1_s2.discards_b
|
|
47
|
+
assert_equal skipped_seq1, callback_s2_s1.discards_b
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_callback_with_no_finishers_over_seq1_seq2_does_not_have_done_markers
|
|
51
|
+
callback_s1_s2 = simple_callback_no_finishers
|
|
52
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
53
|
+
|
|
54
|
+
callback_s2_s1 = simple_callback_no_finishers
|
|
55
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
56
|
+
|
|
57
|
+
assert_empty callback_s1_s2.done_a
|
|
58
|
+
assert_empty callback_s1_s2.done_b
|
|
59
|
+
assert_empty callback_s2_s1.done_a
|
|
60
|
+
assert_empty callback_s2_s1.done_b
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_callback_with_no_finishers_over_hello_hello_has_correct_lcs_result_on_left_matches
|
|
64
|
+
callback = simple_callback_no_finishers
|
|
65
|
+
traverse_sequences(hello, hello, callback)
|
|
66
|
+
|
|
67
|
+
assert_equal hello.chars, callback.matched_a
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_callback_with_no_finishers_over_hello_hello_has_correct_lcs_result_on_right_matches
|
|
71
|
+
callback = simple_callback_no_finishers
|
|
72
|
+
traverse_sequences(hello, hello, callback)
|
|
73
|
+
|
|
74
|
+
assert_equal hello.chars, callback.matched_b
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_callback_with_no_finishers_over_hello_hello_has_correct_skipped_sequences_with_left_sequence
|
|
78
|
+
callback = simple_callback_no_finishers
|
|
79
|
+
traverse_sequences(hello, hello, callback)
|
|
80
|
+
|
|
81
|
+
assert_empty callback.discards_a
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_callback_with_no_finishers_over_hello_hello_has_correct_skipped_sequences_with_right_sequence
|
|
85
|
+
callback = simple_callback_no_finishers
|
|
86
|
+
traverse_sequences(hello, hello, callback)
|
|
87
|
+
|
|
88
|
+
assert_empty callback.discards_b
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def test_callback_with_no_finishers_over_hello_hello_does_not_have_done_markers
|
|
92
|
+
callback = simple_callback_no_finishers
|
|
93
|
+
traverse_sequences(hello, hello, callback)
|
|
94
|
+
|
|
95
|
+
assert_empty callback.done_a
|
|
96
|
+
assert_empty callback.done_b
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_callback_with_no_finishers_over_hello_ary_hello_ary_has_correct_lcs_result_on_left_matches
|
|
100
|
+
callback = simple_callback_no_finishers
|
|
101
|
+
traverse_sequences(hello_ary, hello_ary, callback)
|
|
102
|
+
|
|
103
|
+
assert_equal hello_ary, callback.matched_a
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_callback_with_no_finishers_over_hello_ary_hello_ary_has_correct_lcs_result_on_right_matches
|
|
107
|
+
callback = simple_callback_no_finishers
|
|
108
|
+
traverse_sequences(hello_ary, hello_ary, callback)
|
|
109
|
+
|
|
110
|
+
assert_equal hello_ary, callback.matched_b
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_callback_with_no_finishers_over_hello_ary_hello_ary_has_correct_skipped_sequences_with_left_sequence
|
|
114
|
+
callback = simple_callback_no_finishers
|
|
115
|
+
traverse_sequences(hello_ary, hello_ary, callback)
|
|
116
|
+
|
|
117
|
+
assert_empty callback.discards_a
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_callback_with_no_finishers_over_hello_ary_hello_ary_has_correct_skipped_sequences_with_right_sequence
|
|
121
|
+
callback = simple_callback_no_finishers
|
|
122
|
+
traverse_sequences(hello_ary, hello_ary, callback)
|
|
123
|
+
|
|
124
|
+
assert_empty callback.discards_b
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_callback_with_no_finishers_over_hello_ary_hello_ary_does_not_have_done_markers
|
|
128
|
+
callback = simple_callback_no_finishers
|
|
129
|
+
traverse_sequences(hello_ary, hello_ary, callback)
|
|
130
|
+
|
|
131
|
+
assert_empty callback.done_a
|
|
132
|
+
assert_empty callback.done_b
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def test_callback_with_finisher_has_correct_lcs_result_on_left_matches
|
|
136
|
+
callback_s1_s2 = simple_callback
|
|
137
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
138
|
+
callback_s2_s1 = simple_callback
|
|
139
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
140
|
+
|
|
141
|
+
assert_equal correct_lcs, callback_s1_s2.matched_a
|
|
142
|
+
assert_equal correct_lcs, callback_s2_s1.matched_a
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def test_callback_with_finisher_has_correct_lcs_result_on_right_matches
|
|
146
|
+
callback_s1_s2 = simple_callback
|
|
147
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
148
|
+
callback_s2_s1 = simple_callback
|
|
149
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
150
|
+
|
|
151
|
+
assert_equal correct_lcs, callback_s1_s2.matched_b
|
|
152
|
+
assert_equal correct_lcs, callback_s2_s1.matched_b
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_callback_with_finisher_has_correct_skipped_sequences_for_left_sequence
|
|
156
|
+
callback_s1_s2 = simple_callback
|
|
157
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
158
|
+
callback_s2_s1 = simple_callback
|
|
159
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
160
|
+
|
|
161
|
+
assert_equal skipped_seq1, callback_s1_s2.discards_a
|
|
162
|
+
assert_equal skipped_seq2, callback_s2_s1.discards_a
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def test_callback_with_finisher_has_correct_skipped_sequences_for_right_sequence
|
|
166
|
+
callback_s1_s2 = simple_callback
|
|
167
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
168
|
+
callback_s2_s1 = simple_callback
|
|
169
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
170
|
+
|
|
171
|
+
assert_equal skipped_seq2, callback_s1_s2.discards_b
|
|
172
|
+
assert_equal skipped_seq1, callback_s2_s1.discards_b
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def test_callback_with_finisher_has_done_markers_differently_sized_sequences
|
|
176
|
+
callback_s1_s2 = simple_callback
|
|
177
|
+
traverse_sequences(seq1, seq2, callback_s1_s2)
|
|
178
|
+
callback_s2_s1 = simple_callback
|
|
179
|
+
traverse_sequences(seq2, seq1, callback_s2_s1)
|
|
180
|
+
|
|
181
|
+
assert_equal [["p", 9, "t", 11]], callback_s1_s2.done_a
|
|
182
|
+
assert_empty callback_s1_s2.done_b
|
|
183
|
+
|
|
184
|
+
assert_empty callback_s2_s1.done_a
|
|
185
|
+
assert_equal [["t", 11, "p", 9]], callback_s2_s1.done_b
|
|
186
|
+
end
|
|
187
|
+
end
|