From eb5b8cb8b5622915aa43fb1d50f9feba7bf2f5f4 Mon Sep 17 00:00:00 2001 From: tiendo1011 Date: Sun, 19 Dec 2021 16:44:38 +0700 Subject: 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 --- lib/diff/lcs.rb | 2 +- spec/traverse_sequences_spec.rb | 6 ++---- 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 -- cgit v1.2.1