diff-lcs 1.1.2 → 1.1.3

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.
@@ -0,0 +1,390 @@
1
+ # -*- ruby encoding: utf-8 -*-
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "Diff::LCS.patch" do
6
+ include Diff::LCS::SpecHelper::Matchers
7
+
8
+ shared_examples "patch sequences correctly" do
9
+ it "should correctly patch left-to-right (patch autodiscovery)" do
10
+ Diff::LCS.patch(s1, patch_set).should == s2
11
+ end
12
+
13
+ it "should correctly patch left-to-right (explicit patch)" do
14
+ Diff::LCS.patch(s1, patch_set, :patch).should == s2
15
+ Diff::LCS.patch!(s1, patch_set).should == s2
16
+ end
17
+
18
+ it "should correctly patch right-to-left (unpatch autodiscovery)" do
19
+ Diff::LCS.patch(s2, patch_set).should == s1
20
+ end
21
+
22
+ it "should correctly patch right-to-left (explicit unpatch)" do
23
+ Diff::LCS.patch(s2, patch_set, :unpatch).should == s1
24
+ Diff::LCS.unpatch!(s2, patch_set).should == s1
25
+ end
26
+ end
27
+
28
+ describe "using a Diff::LCS.diff patchset" do
29
+ describe "with default diff callbacks (DiffCallbacks)" do
30
+ describe "forward (s1 -> s2)" do
31
+ it_has_behavior "patch sequences correctly" do
32
+ let(:s1) { seq1 }
33
+ let(:s2) { seq2 }
34
+ let(:patch_set) { Diff::LCS.diff(seq1, seq2) }
35
+ end
36
+ end
37
+
38
+ describe "reverse (s2 -> s1)" do
39
+ it_has_behavior "patch sequences correctly" do
40
+ let(:s1) { seq2 }
41
+ let(:s2) { seq1 }
42
+ let(:patch_set) { Diff::LCS.diff(seq2, seq1) }
43
+ end
44
+ end
45
+ end
46
+
47
+ describe "with context diff callbacks (ContextDiffCallbacks)" do
48
+ describe "forward (s1 -> s2)" do
49
+ it_has_behavior "patch sequences correctly" do
50
+ let(:s1) { seq1 }
51
+ let(:s2) { seq2 }
52
+ let(:patch_set) {
53
+ Diff::LCS.diff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
54
+ }
55
+ end
56
+ end
57
+
58
+ describe "reverse (s2 -> s1)" do
59
+ it_has_behavior "patch sequences correctly" do
60
+ let(:s1) { seq2 }
61
+ let(:s2) { seq1 }
62
+ let(:patch_set) {
63
+ Diff::LCS.diff(seq2, seq1, Diff::LCS::ContextDiffCallbacks)
64
+ }
65
+ end
66
+ end
67
+ end
68
+
69
+ describe "with sdiff callbacks (SDiffCallbacks)" do
70
+ describe "forward (s1 -> s2)" do
71
+ it_has_behavior "patch sequences correctly" do
72
+ let(:s1) { seq1 }
73
+ let(:s2) { seq2 }
74
+ let(:patch_set) {
75
+ Diff::LCS.diff(seq1, seq2, Diff::LCS::SDiffCallbacks)
76
+ }
77
+ end
78
+ end
79
+
80
+ describe "reverse (s2 -> s1)" do
81
+ it_has_behavior "patch sequences correctly" do
82
+ let(:s1) { seq2 }
83
+ let(:s2) { seq1 }
84
+ let(:patch_set) {
85
+ Diff::LCS.diff(seq2, seq1, Diff::LCS::SDiffCallbacks)
86
+ }
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ describe "using a Diff::LCS.sdiff patchset" do
93
+ describe "with default diff callbacks (DiffCallbacks)" do
94
+ describe "forward (s1 -> s2)" do
95
+ it_has_behavior "patch sequences correctly" do
96
+ let(:s1) { seq1 }
97
+ let(:s2) { seq2 }
98
+ let(:patch_set) {
99
+ Diff::LCS.sdiff(seq1, seq2, Diff::LCS::DiffCallbacks)
100
+ }
101
+ end
102
+ end
103
+
104
+ describe "reverse (s2 -> s1)" do
105
+ it_has_behavior "patch sequences correctly" do
106
+ let(:s1) { seq2 }
107
+ let(:s2) { seq1 }
108
+ let(:patch_set) {
109
+ Diff::LCS.sdiff(seq2, seq1, Diff::LCS::DiffCallbacks)
110
+ }
111
+ end
112
+ end
113
+ end
114
+
115
+ describe "with context diff callbacks (DiffCallbacks)" do
116
+ describe "forward (s1 -> s2)" do
117
+ it_has_behavior "patch sequences correctly" do
118
+ let(:s1) { seq1 }
119
+ let(:s2) { seq2 }
120
+ let(:patch_set) {
121
+ Diff::LCS.sdiff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
122
+ }
123
+ end
124
+ end
125
+
126
+ describe "reverse (s2 -> s1)" do
127
+ it_has_behavior "patch sequences correctly" do
128
+ let(:s1) { seq2 }
129
+ let(:s2) { seq1 }
130
+ let(:patch_set) {
131
+ Diff::LCS.sdiff(seq2, seq1, Diff::LCS::ContextDiffCallbacks)
132
+ }
133
+ end
134
+ end
135
+ end
136
+
137
+ describe "with sdiff callbacks (SDiffCallbacks)" do
138
+ describe "forward (s1 -> s2)" do
139
+ it_has_behavior "patch sequences correctly" do
140
+ let(:s1) { seq1 }
141
+ let(:s2) { seq2 }
142
+ let(:patch_set) { Diff::LCS.sdiff(seq1, seq2) }
143
+ end
144
+ end
145
+
146
+ describe "reverse (s2 -> s1)" do
147
+ it_has_behavior "patch sequences correctly" do
148
+ let(:s1) { seq2 }
149
+ let(:s2) { seq1 }
150
+ let(:patch_set) { Diff::LCS.sdiff(seq2, seq1) }
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ # Note: because of the error in autodiscovery ("does not autodiscover s1
157
+ # to s2 patches"), this cannot use the "patch sequences correctly" shared
158
+ # set. Once the bug in autodiscovery is fixed, this can be converted as
159
+ # above.
160
+ describe "fix bug 891: patchsets do not contain the last equal part" do
161
+ before(:each) do
162
+ @s1 = %w(a b c d e f g h i j k)
163
+ @s2 = %w(a b c d D e f g h i j k)
164
+ end
165
+
166
+ describe "using Diff::LCS.diff with default diff callbacks" do
167
+ before(:each) do
168
+ @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2)
169
+ @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1)
170
+ end
171
+
172
+ it "does not autodiscover s1 to s2 patches" do
173
+ # It should, but it doesn't.
174
+ expect do
175
+ Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
176
+ end.to raise_error(RuntimeError, /provided patchset/)
177
+
178
+ expect do
179
+ Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
180
+ end.to raise_error(RuntimeError, /provided patchset/)
181
+ end
182
+
183
+ it "should autodiscover s2 to s1 the left-to-right patches" do
184
+ Diff::LCS.patch(@s2, @patch_set_s2_s1).should == @s1
185
+ Diff::LCS.patch(@s2, @patch_set_s1_s2).should == @s1
186
+ end
187
+
188
+ it "should correctly patch left-to-right (explicit patch)" do
189
+ Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch).should == @s2
190
+ Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch).should == @s1
191
+ Diff::LCS.patch!(@s1, @patch_set_s1_s2).should == @s2
192
+ Diff::LCS.patch!(@s2, @patch_set_s2_s1).should == @s1
193
+ end
194
+
195
+ it "should correctly patch right-to-left (explicit unpatch)" do
196
+ Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch).should == @s1
197
+ Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch).should == @s2
198
+ Diff::LCS.unpatch!(@s2, @patch_set_s1_s2).should == @s1
199
+ Diff::LCS.unpatch!(@s1, @patch_set_s2_s1).should == @s2
200
+ end
201
+ end
202
+
203
+ describe "using Diff::LCS.diff with context diff callbacks" do
204
+ before(:each) do
205
+ @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2, Diff::LCS::ContextDiffCallbacks)
206
+ @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1, Diff::LCS::ContextDiffCallbacks)
207
+ end
208
+
209
+ it "does not autodiscover s1 to s2 patches" do
210
+ # It should, but it doesn't.
211
+ expect do
212
+ Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
213
+ end.to raise_error(RuntimeError, /provided patchset/)
214
+
215
+ expect do
216
+ Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
217
+ end.to raise_error(RuntimeError, /provided patchset/)
218
+ end
219
+
220
+ it "should autodiscover s2 to s1 the left-to-right patches" do
221
+ Diff::LCS.patch(@s2, @patch_set_s2_s1).should == @s1
222
+ Diff::LCS.patch(@s2, @patch_set_s1_s2).should == @s1
223
+ end
224
+
225
+ it "should correctly patch left-to-right (explicit patch)" do
226
+ Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch).should == @s2
227
+ Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch).should == @s1
228
+ Diff::LCS.patch!(@s1, @patch_set_s1_s2).should == @s2
229
+ Diff::LCS.patch!(@s2, @patch_set_s2_s1).should == @s1
230
+ end
231
+
232
+ it "should correctly patch right-to-left (explicit unpatch)" do
233
+ Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch).should == @s1
234
+ Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch).should == @s2
235
+ Diff::LCS.unpatch!(@s2, @patch_set_s1_s2).should == @s1
236
+ Diff::LCS.unpatch!(@s1, @patch_set_s2_s1).should == @s2
237
+ end
238
+ end
239
+
240
+ describe "using Diff::LCS.diff with sdiff callbacks" do
241
+ before(:each) do
242
+ @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2, Diff::LCS::SDiffCallbacks)
243
+ @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1, Diff::LCS::SDiffCallbacks)
244
+ end
245
+
246
+ it "does not autodiscover s1 to s2 patches" do
247
+ # It should, but it doesn't.
248
+ expect do
249
+ Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
250
+ end.to raise_error(RuntimeError, /provided patchset/)
251
+
252
+ expect do
253
+ Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
254
+ end.to raise_error(RuntimeError, /provided patchset/)
255
+ end
256
+
257
+ it "should autodiscover s2 to s1 the left-to-right patches" do
258
+ Diff::LCS.patch(@s2, @patch_set_s2_s1).should == @s1
259
+ Diff::LCS.patch(@s2, @patch_set_s1_s2).should == @s1
260
+ end
261
+
262
+ it "should correctly patch left-to-right (explicit patch)" do
263
+ Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch).should == @s2
264
+ Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch).should == @s1
265
+ Diff::LCS.patch!(@s1, @patch_set_s1_s2).should == @s2
266
+ Diff::LCS.patch!(@s2, @patch_set_s2_s1).should == @s1
267
+ end
268
+
269
+ it "should correctly patch right-to-left (explicit unpatch)" do
270
+ Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch).should == @s1
271
+ Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch).should == @s2
272
+ Diff::LCS.unpatch!(@s2, @patch_set_s1_s2).should == @s1
273
+ Diff::LCS.unpatch!(@s1, @patch_set_s2_s1).should == @s2
274
+ end
275
+ end
276
+
277
+ describe "using Diff::LCS.sdiff with default sdiff callbacks" do
278
+ before(:each) do
279
+ @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2)
280
+ @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1)
281
+ end
282
+
283
+ it "does not autodiscover s1 to s2 patches" do
284
+ # It should, but it doesn't.
285
+ expect do
286
+ Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
287
+ end.to raise_error(RuntimeError, /provided patchset/)
288
+
289
+ expect do
290
+ Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
291
+ end.to raise_error(RuntimeError, /provided patchset/)
292
+ end
293
+
294
+ it "should autodiscover s2 to s1 the left-to-right patches" do
295
+ Diff::LCS.patch(@s2, @patch_set_s2_s1).should == @s1
296
+ Diff::LCS.patch(@s2, @patch_set_s1_s2).should == @s1
297
+ end
298
+
299
+ it "should correctly patch left-to-right (explicit patch)" do
300
+ Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch).should == @s2
301
+ Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch).should == @s1
302
+ Diff::LCS.patch!(@s1, @patch_set_s1_s2).should == @s2
303
+ Diff::LCS.patch!(@s2, @patch_set_s2_s1).should == @s1
304
+ end
305
+
306
+ it "should correctly patch right-to-left (explicit unpatch)" do
307
+ Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch).should == @s1
308
+ Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch).should == @s2
309
+ Diff::LCS.unpatch!(@s2, @patch_set_s1_s2).should == @s1
310
+ Diff::LCS.unpatch!(@s1, @patch_set_s2_s1).should == @s2
311
+ end
312
+ end
313
+
314
+ describe "using Diff::LCS.sdiff with context diff callbacks" do
315
+ before(:each) do
316
+ @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2, Diff::LCS::ContextDiffCallbacks)
317
+ @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::ContextDiffCallbacks)
318
+ end
319
+
320
+ it "does not autodiscover s1 to s2 patches" do
321
+ # It should, but it doesn't.
322
+ expect do
323
+ Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
324
+ end.to raise_error(RuntimeError, /provided patchset/)
325
+
326
+ expect do
327
+ Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
328
+ end.to raise_error(RuntimeError, /provided patchset/)
329
+ end
330
+
331
+ it "should autodiscover s2 to s1 the left-to-right patches" do
332
+ Diff::LCS.patch(@s2, @patch_set_s2_s1).should == @s1
333
+ Diff::LCS.patch(@s2, @patch_set_s1_s2).should == @s1
334
+ end
335
+
336
+ it "should correctly patch left-to-right (explicit patch)" do
337
+ Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch).should == @s2
338
+ Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch).should == @s1
339
+ Diff::LCS.patch!(@s1, @patch_set_s1_s2).should == @s2
340
+ Diff::LCS.patch!(@s2, @patch_set_s2_s1).should == @s1
341
+ end
342
+
343
+ it "should correctly patch right-to-left (explicit unpatch)" do
344
+ Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch).should == @s1
345
+ Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch).should == @s2
346
+ Diff::LCS.unpatch!(@s2, @patch_set_s1_s2).should == @s1
347
+ Diff::LCS.unpatch!(@s1, @patch_set_s2_s1).should == @s2
348
+ end
349
+ end
350
+
351
+ describe "using Diff::LCS.sdiff with default diff callbacks" do
352
+ before(:each) do
353
+ @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2, Diff::LCS::DiffCallbacks)
354
+ @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::DiffCallbacks)
355
+ end
356
+
357
+ it "does not autodiscover s1 to s2 patches" do
358
+ # It should, but it doesn't.
359
+ expect do
360
+ Diff::LCS.patch(@s1, @patch_set_s1_s2).should == @s2
361
+ end.to raise_error(RuntimeError, /provided patchset/)
362
+
363
+ expect do
364
+ Diff::LCS.patch(@s1, @patch_set_s2_s1).should == @s2
365
+ end.to raise_error(RuntimeError, /provided patchset/)
366
+ end
367
+
368
+ it "should autodiscover s2 to s1 the left-to-right patches" do
369
+ Diff::LCS.patch(@s2, @patch_set_s2_s1).should == @s1
370
+ Diff::LCS.patch(@s2, @patch_set_s1_s2).should == @s1
371
+ end
372
+
373
+ it "should correctly patch left-to-right (explicit patch)" do
374
+ Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch).should == @s2
375
+ Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch).should == @s1
376
+ Diff::LCS.patch!(@s1, @patch_set_s1_s2).should == @s2
377
+ Diff::LCS.patch!(@s2, @patch_set_s2_s1).should == @s1
378
+ end
379
+
380
+ it "should correctly patch right-to-left (explicit unpatch)" do
381
+ Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch).should == @s1
382
+ Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch).should == @s2
383
+ Diff::LCS.unpatch!(@s2, @patch_set_s1_s2).should == @s1
384
+ Diff::LCS.unpatch!(@s1, @patch_set_s2_s1).should == @s2
385
+ end
386
+ end
387
+ end
388
+ end
389
+
390
+ # vim: ft=ruby
@@ -0,0 +1,204 @@
1
+ # -*- ruby encoding: utf-8 -*-
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "Diff::LCS.sdiff" do
6
+ include Diff::LCS::SpecHelper::Matchers
7
+
8
+ shared_examples "compare sequences correctly" do
9
+ it "should compare s1 -> s2 correctly" do
10
+ Diff::LCS.sdiff(s1, s2).should == context_diff(result)
11
+ end
12
+
13
+ it "should compare s2 -> s1 correctly" do
14
+ Diff::LCS.sdiff(s2, s1).should == context_diff(reverse_sdiff(result))
15
+ end
16
+ end
17
+
18
+ describe "using seq1 & seq2" do
19
+ let(:s1) { seq1 }
20
+ let(:s2) { seq2 }
21
+ let(:result) { correct_forward_sdiff }
22
+
23
+ it_has_behavior "compare sequences correctly"
24
+ end
25
+
26
+ describe "using %w(abc def yyy xxx ghi jkl) & %w(abc dxf xxx ghi jkl)" do
27
+ let(:s1) { %w(abc def yyy xxx ghi jkl) }
28
+ let(:s2) { %w(abc dxf xxx ghi jkl) }
29
+ let(:result) {
30
+ [
31
+ [ '=', [ 0, 'abc' ], [ 0, 'abc' ] ],
32
+ [ '!', [ 1, 'def' ], [ 1, 'dxf' ] ],
33
+ [ '-', [ 2, 'yyy' ], [ 2, nil ] ],
34
+ [ '=', [ 3, 'xxx' ], [ 2, 'xxx' ] ],
35
+ [ '=', [ 4, 'ghi' ], [ 3, 'ghi' ] ],
36
+ [ '=', [ 5, 'jkl' ], [ 4, 'jkl' ] ]
37
+ ]
38
+ }
39
+
40
+ it_has_behavior "compare sequences correctly"
41
+ end
42
+
43
+ describe "using %w(a b c d e) & %w(a e)" do
44
+ let(:s1) { %w(a b c d e) }
45
+ let(:s2) { %w(a e) }
46
+ let(:result) {
47
+ [
48
+ [ '=', [ 0, 'a' ], [ 0, 'a' ] ],
49
+ [ '-', [ 1, 'b' ], [ 1, nil ] ],
50
+ [ '-', [ 2, 'c' ], [ 1, nil ] ],
51
+ [ '-', [ 3, 'd' ], [ 1, nil ] ],
52
+ [ '=', [ 4, 'e' ], [ 1, 'e' ] ]
53
+ ]
54
+ }
55
+
56
+ it_has_behavior "compare sequences correctly"
57
+ end
58
+
59
+ describe "using %w(a e) & %w(a b c d e)" do
60
+ let(:s1) { %w(a e) }
61
+ let(:s2) { %w(a b c d e) }
62
+ let(:result) {
63
+ [
64
+ [ '=', [ 0, 'a' ], [ 0, 'a' ] ],
65
+ [ '+', [ 1, nil ], [ 1, 'b' ] ],
66
+ [ '+', [ 1, nil ], [ 2, 'c' ] ],
67
+ [ '+', [ 1, nil ], [ 3, 'd' ] ],
68
+ [ '=', [ 1, 'e' ], [ 4, 'e' ] ]
69
+ ]
70
+ }
71
+
72
+ it_has_behavior "compare sequences correctly"
73
+ end
74
+
75
+ describe "using %w(v x a e) & %w(w y a b c d e)" do
76
+ let(:s1) { %w(v x a e) }
77
+ let(:s2) { %w(w y a b c d e) }
78
+ let(:result) {
79
+ [
80
+ [ '!', [ 0, 'v' ], [ 0, 'w' ] ],
81
+ [ '!', [ 1, 'x' ], [ 1, 'y' ] ],
82
+ [ '=', [ 2, 'a' ], [ 2, 'a' ] ],
83
+ [ '+', [ 3, nil ], [ 3, 'b' ] ],
84
+ [ '+', [ 3, nil ], [ 4, 'c' ] ],
85
+ [ '+', [ 3, nil ], [ 5, 'd' ] ],
86
+ [ '=', [ 3, 'e' ], [ 6, 'e' ] ]
87
+ ]
88
+ }
89
+
90
+ it_has_behavior "compare sequences correctly"
91
+ end
92
+
93
+ describe "using %w(x a e) & %w(a b c d e)" do
94
+ let(:s1) { %w(x a e) }
95
+ let(:s2) { %w(a b c d e) }
96
+ let(:result) {
97
+ [
98
+ [ '-', [ 0, 'x' ], [ 0, nil ] ],
99
+ [ '=', [ 1, 'a' ], [ 0, 'a' ] ],
100
+ [ '+', [ 2, nil ], [ 1, 'b' ] ],
101
+ [ '+', [ 2, nil ], [ 2, 'c' ] ],
102
+ [ '+', [ 2, nil ], [ 3, 'd' ] ],
103
+ [ '=', [ 2, 'e' ], [ 4, 'e' ] ]
104
+ ]
105
+ }
106
+
107
+ it_has_behavior "compare sequences correctly"
108
+ end
109
+
110
+ describe "using %w(a e) & %w(x a b c d e)" do
111
+ let(:s1) { %w(a e) }
112
+ let(:s2) { %w(x a b c d e) }
113
+ let(:result) {
114
+ [
115
+ [ '+', [ 0, nil ], [ 0, 'x' ] ],
116
+ [ '=', [ 0, 'a' ], [ 1, 'a' ] ],
117
+ [ '+', [ 1, nil ], [ 2, 'b' ] ],
118
+ [ '+', [ 1, nil ], [ 3, 'c' ] ],
119
+ [ '+', [ 1, nil ], [ 4, 'd' ] ],
120
+ [ '=', [ 1, 'e' ], [ 5, 'e' ] ]
121
+ ]
122
+ }
123
+
124
+ it_has_behavior "compare sequences correctly"
125
+ end
126
+
127
+ describe "using %w(a e v) & %w(x a b c d e w x)" do
128
+ let(:s1) { %w(a e v) }
129
+ let(:s2) { %w(x a b c d e w x) }
130
+ let(:result) {
131
+ [
132
+ [ '+', [ 0, nil ], [ 0, 'x' ] ],
133
+ [ '=', [ 0, 'a' ], [ 1, 'a' ] ],
134
+ [ '+', [ 1, nil ], [ 2, 'b' ] ],
135
+ [ '+', [ 1, nil ], [ 3, 'c' ] ],
136
+ [ '+', [ 1, nil ], [ 4, 'd' ] ],
137
+ [ '=', [ 1, 'e' ], [ 5, 'e' ] ],
138
+ [ '!', [ 2, 'v' ], [ 6, 'w' ] ],
139
+ [ '+', [ 3, nil ], [ 7, 'x' ] ]
140
+ ]
141
+ }
142
+
143
+ it_has_behavior "compare sequences correctly"
144
+ end
145
+
146
+ describe "using %w() & %w(a b c)" do
147
+ let(:s1) { %w() }
148
+ let(:s2) { %w(a b c) }
149
+ let(:result) {
150
+ [
151
+ [ '+', [ 0, nil ], [ 0, 'a' ] ],
152
+ [ '+', [ 0, nil ], [ 1, 'b' ] ],
153
+ [ '+', [ 0, nil ], [ 2, 'c' ] ]
154
+ ]
155
+ }
156
+
157
+ it_has_behavior "compare sequences correctly"
158
+ end
159
+
160
+ describe "using %w(a b c) & %w(1)" do
161
+ let(:s1) { %w(a b c) }
162
+ let(:s2) { %w(1) }
163
+ let(:result) {
164
+ [
165
+ [ '!', [ 0, 'a' ], [ 0, '1' ] ],
166
+ [ '-', [ 1, 'b' ], [ 1, nil ] ],
167
+ [ '-', [ 2, 'c' ], [ 1, nil ] ]
168
+ ]
169
+ }
170
+
171
+ it_has_behavior "compare sequences correctly"
172
+ end
173
+
174
+ describe "using %w(a b c) & %w(c)" do
175
+ let(:s1) { %w(a b c) }
176
+ let(:s2) { %w(c) }
177
+ let(:result) {
178
+ [
179
+ [ '-', [ 0, 'a' ], [ 0, nil ] ],
180
+ [ '-', [ 1, 'b' ], [ 0, nil ] ],
181
+ [ '=', [ 2, 'c' ], [ 0, 'c' ] ]
182
+ ]
183
+ }
184
+
185
+ it_has_behavior "compare sequences correctly"
186
+ end
187
+
188
+ describe "using %w(abcd efgh ijkl mnop) & []" do
189
+ let(:s1) { %w(abcd efgh ijkl mnop) }
190
+ let(:s2) { [] }
191
+ let(:result) {
192
+ [
193
+ [ '-', [ 0, 'abcd' ], [ 0, nil ] ],
194
+ [ '-', [ 1, 'efgh' ], [ 0, nil ] ],
195
+ [ '-', [ 2, 'ijkl' ], [ 0, nil ] ],
196
+ [ '-', [ 3, 'mnop' ], [ 0, nil ] ]
197
+ ]
198
+ }
199
+
200
+ it_has_behavior "compare sequences correctly"
201
+ end
202
+ end
203
+
204
+ # vim: ft=ruby