summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortiendo1011 <tiendo1011@gmail.com>2021-12-19 16:44:38 +0700
committertiendo1011 <tiendo1011@gmail.com>2021-12-19 16:49:28 +0700
commiteb5b8cb8b5622915aa43fb1d50f9feba7bf2f5f4 (patch)
treeb14bfa787056072b3568cdad0e562c3c7c0b70d8
parentcd4b76d53d77fa596d72584d7531fdb811cd38bf (diff)
downloaddiff-lcs-eb5b8cb8b5622915aa43fb1d50f9feba7bf2f5f4.tar.gz
Fix off-by-one error
in ruby, (0..matches.size) will include both sides in the range, which means we'll get off-by-one error
-rw-r--r--lib/diff/lcs.rb2
-rw-r--r--spec/traverse_sequences_spec.rb6
2 files changed, 3 insertions, 5 deletions
diff --git a/lib/diff/lcs.rb b/lib/diff/lcs.rb
index 63888a1..f57ec08 100644
--- a/lib/diff/lcs.rb
+++ b/lib/diff/lcs.rb
@@ -292,7 +292,7 @@ class << Diff::LCS
b_size = seq2.size
ai = bj = 0
- (0..matches.size).each do |i|
+ (0...matches.size).each do |i|
b_line = matches[i]
ax = string ? seq1[i, 1] : seq1[i]
diff --git a/spec/traverse_sequences_spec.rb b/spec/traverse_sequences_spec.rb
index ea7a129..b185e1d 100644
--- a/spec/traverse_sequences_spec.rb
+++ b/spec/traverse_sequences_spec.rb
@@ -127,13 +127,11 @@ describe 'Diff::LCS.traverse_sequences' do
end
it 'has done markers differently-sized sequences' do
- expect(@callback_s1_s2.done_a).to eq([['p', 9, 's', 10]])
+ expect(@callback_s1_s2.done_a).to eq([['p', 9, 't', 11]])
expect(@callback_s1_s2.done_b).to be_empty
- # 20110731 I don't yet understand why this particular behaviour
- # isn't transitive.
expect(@callback_s2_s1.done_a).to be_empty
- expect(@callback_s2_s1.done_b).to be_empty
+ expect(@callback_s2_s1.done_b).to eq([['t', 11, 'p', 9]])
end
end
end