diff options
Diffstat (limited to 'diff-lcs/tags/release-1.1.2/tests/00test.rb')
-rw-r--r-- | diff-lcs/tags/release-1.1.2/tests/00test.rb | 626 |
1 files changed, 0 insertions, 626 deletions
diff --git a/diff-lcs/tags/release-1.1.2/tests/00test.rb b/diff-lcs/tags/release-1.1.2/tests/00test.rb deleted file mode 100644 index 8872dfd..0000000 --- a/diff-lcs/tags/release-1.1.2/tests/00test.rb +++ /dev/null @@ -1,626 +0,0 @@ -#! /usr/bin/env ruby -# -$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0 - -require 'diff/lcs' -require 'test/unit' -require 'pp' -require 'diff/lcs/array' - -module Diff::LCS::Tests - def __format_diffs(diffs) - diffs.map do |e| - if e.kind_of?(Array) - e.map { |f| f.to_a.join }.join(", ") - else - e.to_a.join - end - end.join("; ") - end - - def __map_diffs(diffs, klass = Diff::LCS::ContextChange) - diffs.map do |chunks| - if klass == Diff::LCS::ContextChange - klass.from_a(chunks) - else - chunks.map { |changes| klass.from_a(changes) } - end - end - end - - def __simple_callbacks - callbacks = Object.new - class << callbacks - attr_reader :matched_a - attr_reader :matched_b - attr_reader :discards_a - attr_reader :discards_b - attr_reader :done_a - attr_reader :done_b - - def reset - @matched_a = [] - @matched_b = [] - @discards_a = [] - @discards_b = [] - @done_a = [] - @done_b = [] - end - - def match(event) - @matched_a << event.old_element - @matched_b << event.new_element - end - - def discard_b(event) - @discards_b << event.new_element - end - - def discard_a(event) - @discards_a << event.old_element - end - - def finished_a(event) - @done_a << [event.old_element, event.old_position] - end - - def finished_b(event) - @done_b << [event.new_element, event.new_position] - end - end - callbacks.reset - callbacks - end - - def __balanced_callback - cb = Object.new - class << cb - attr_reader :result - - def reset - @result = "" - end - - def match(event) - @result << "M#{event.old_position}#{event.new_position} " - end - - def discard_a(event) - @result << "DA#{event.old_position}#{event.new_position} " - end - - def discard_b(event) - @result << "DB#{event.old_position}#{event.new_position} " - end - - def change(event) - @result << "C#{event.old_position}#{event.new_position} " - end - end - cb.reset - cb - end - - def setup - @seq1 = %w(a b c e h j l m n p) - @seq2 = %w(b c d e f j k l m r s t) - - @correct_lcs = %w(b c e j l m) - - @skipped_seq1 = 'a h n p' - @skipped_seq2 = 'd f k r s t' - - correct_diff = [ - [ [ '-', 0, 'a' ] ], - [ [ '+', 2, 'd' ] ], - [ [ '-', 4, 'h' ], - [ '+', 4, 'f' ] ], - [ [ '+', 6, 'k' ] ], - [ [ '-', 8, 'n' ], - [ '-', 9, 'p' ], - [ '+', 9, 'r' ], - [ '+', 10, 's' ], - [ '+', 11, 't' ] ] ] - @correct_diff = __map_diffs(correct_diff, Diff::LCS::Change) - end -end - -class TestLCS < Test::Unit::TestCase - include Diff::LCS::Tests - - def test_lcs - res = ares = bres = nil - assert_nothing_raised { res = Diff::LCS.__lcs(@seq1, @seq2) } - # The result of the LCS (less the +nil+ values) must be as long as the - # correct result. - assert_equal(res.compact.size, @correct_lcs.size) - res.each_with_index { |ee, ii| assert(ee.nil? || (@seq1[ii] == @seq2[ee])) } - assert_nothing_raised { ares = (0...res.size).map { |ii| res[ii] ? @seq1[ii] : nil } } - assert_nothing_raised { bres = (0...res.size).map { |ii| res[ii] ? @seq2[res[ii]] : nil } } - assert_equal(@correct_lcs, ares.compact) - assert_equal(@correct_lcs, bres.compact) - assert_nothing_raised { res = Diff::LCS.LCS(@seq1, @seq2) } - assert_equal(res.compact, @correct_lcs) - end -end - -class TestSequences < Test::Unit::TestCase - include Diff::LCS::Tests - - def test_sequences - callbacks = nil - assert_nothing_raised do - callbacks = __simple_callbacks - class << callbacks - undef :finished_a - undef :finished_b - end - Diff::LCS.traverse_sequences(@seq1, @seq2, callbacks) - end - assert_equal(@correct_lcs.size, callbacks.matched_a.size) - assert_equal(@correct_lcs.size, callbacks.matched_b.size) - assert_equal(@skipped_seq1, callbacks.discards_a.join(" ")) - assert_equal(@skipped_seq2, callbacks.discards_b.join(" ")) - assert_nothing_raised do - callbacks = __simple_callbacks - Diff::LCS.traverse_sequences(@seq1, @seq2, callbacks) - end - assert_equal(@correct_lcs.size, callbacks.matched_a.size) - assert_equal(@correct_lcs.size, callbacks.matched_b.size) - assert_equal(@skipped_seq1, callbacks.discards_a.join(" ")) - assert_equal(@skipped_seq2, callbacks.discards_b.join(" ")) - assert_equal(9, callbacks.done_a[0][1]) - assert_nil(callbacks.done_b[0]) - -# seqw = %w(abcd efgh ijkl mnopqrstuvwxyz) -# assert_nothing_raised do -# callbacks = __simple_callbacks -# class << callbacks -# undef :finished_a -# undef :finished_b -# end -# Diff::LCS.traverse_sequences(seqw, [], callbacks) -# end - end - - def test_diff - diff = nil - assert_nothing_raised { diff = Diff::LCS.diff(@seq1, @seq2) } - assert_equal(__format_diffs(@correct_diff), __format_diffs(diff)) - assert_equal(@correct_diff, diff) - end - - def test_diff_empty - seqw = %w(abcd efgh ijkl mnopqrstuvwxyz) - correct_diff = [ - [ [ '-', 0, 'abcd' ], - [ '-', 1, 'efgh' ], - [ '-', 2, 'ijkl' ], - [ '-', 3, 'mnopqrstuvwxyz' ] ] ] - diff = nil - - assert_nothing_raised { diff = Diff::LCS.diff(seqw, []) } - assert_equal(__format_diffs(correct_diff), __format_diffs(diff)) - - correct_diff = [ - [ [ '+', 0, 'abcd' ], - [ '+', 1, 'efgh' ], - [ '+', 2, 'ijkl' ], - [ '+', 3, 'mnopqrstuvwxyz' ] ] ] - assert_nothing_raised { diff = Diff::LCS.diff([], seqw) } - assert_equal(__format_diffs(correct_diff), __format_diffs(diff)) - end -end - -class TestBalanced < Test::Unit::TestCase - include Diff::LCS::Tests - - def test_sdiff_a - sdiff = nil - seq1 = %w(abc def yyy xxx ghi jkl) - seq2 = %w(abc dxf xxx ghi jkl) - correct_sdiff = [ - [ '=', [ 0, 'abc' ], [ 0, 'abc' ] ], - [ '!', [ 1, 'def' ], [ 1, 'dxf' ] ], - [ '-', [ 2, 'yyy' ], [ 2, nil ] ], - [ '=', [ 3, 'xxx' ], [ 2, 'xxx' ] ], - [ '=', [ 4, 'ghi' ], [ 3, 'ghi' ] ], - [ '=', [ 5, 'jkl' ], [ 4, 'jkl' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_b - sdiff = nil - correct_sdiff = [ - [ '-', [ 0, 'a' ], [ 0, nil ] ], - [ '=', [ 1, 'b' ], [ 0, 'b' ] ], - [ '=', [ 2, 'c' ], [ 1, 'c' ] ], - [ '+', [ 3, nil ], [ 2, 'd' ] ], - [ '=', [ 3, 'e' ], [ 3, 'e' ] ], - [ '!', [ 4, 'h' ], [ 4, 'f' ] ], - [ '=', [ 5, 'j' ], [ 5, 'j' ] ], - [ '+', [ 6, nil ], [ 6, 'k' ] ], - [ '=', [ 6, 'l' ], [ 7, 'l' ] ], - [ '=', [ 7, 'm' ], [ 8, 'm' ] ], - [ '!', [ 8, 'n' ], [ 9, 'r' ] ], - [ '!', [ 9, 'p' ], [ 10, 's' ] ], - [ '+', [ 10, nil ], [ 11, 't' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(@seq1, @seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_c - sdiff = nil - seq1 = %w(a b c d e) - seq2 = %w(a e) - correct_sdiff = [ - [ '=', [ 0, 'a' ], [ 0, 'a' ] ], - [ '-', [ 1, 'b' ], [ 1, nil ] ], - [ '-', [ 2, 'c' ], [ 1, nil ] ], - [ '-', [ 3, 'd' ], [ 1, nil ] ], - [ '=', [ 4, 'e' ], [ 1, 'e' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_d - sdiff = nil - seq1 = %w(a e) - seq2 = %w(a b c d e) - correct_sdiff = [ - [ '=', [ 0, 'a' ], [ 0, 'a' ] ], - [ '+', [ 1, nil ], [ 1, 'b' ] ], - [ '+', [ 1, nil ], [ 2, 'c' ] ], - [ '+', [ 1, nil ], [ 3, 'd' ] ], - [ '=', [ 1, 'e' ], [ 4, 'e' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_e - sdiff = nil - seq1 = %w(v x a e) - seq2 = %w(w y a b c d e) - correct_sdiff = [ - [ '!', [ 0, 'v' ], [ 0, 'w' ] ], - [ '!', [ 1, 'x' ], [ 1, 'y' ] ], - [ '=', [ 2, 'a' ], [ 2, 'a' ] ], - [ '+', [ 3, nil ], [ 3, 'b' ] ], - [ '+', [ 3, nil ], [ 4, 'c' ] ], - [ '+', [ 3, nil ], [ 5, 'd' ] ], - [ '=', [ 3, 'e' ], [ 6, 'e' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_f - sdiff = nil - seq1 = %w(x a e) - seq2 = %w(a b c d e) - correct_sdiff = [ - [ '-', [ 0, 'x' ], [ 0, nil ] ], - [ '=', [ 1, 'a' ], [ 0, 'a' ] ], - [ '+', [ 2, nil ], [ 1, 'b' ] ], - [ '+', [ 2, nil ], [ 2, 'c' ] ], - [ '+', [ 2, nil ], [ 3, 'd' ] ], - [ '=', [ 2, 'e' ], [ 4, 'e' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_g - sdiff = nil - seq1 = %w(a e) - seq2 = %w(x a b c d e) - correct_sdiff = [ - [ '+', [ 0, nil ], [ 0, 'x' ] ], - [ '=', [ 0, 'a' ], [ 1, 'a' ] ], - [ '+', [ 1, nil ], [ 2, 'b' ] ], - [ '+', [ 1, nil ], [ 3, 'c' ] ], - [ '+', [ 1, nil ], [ 4, 'd' ] ], - [ '=', [ 1, 'e' ], [ 5, 'e' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_h - sdiff = nil - seq1 = %w(a e v) - seq2 = %w(x a b c d e w x) - correct_sdiff = [ - [ '+', [ 0, nil ], [ 0, 'x' ] ], - [ '=', [ 0, 'a' ], [ 1, 'a' ] ], - [ '+', [ 1, nil ], [ 2, 'b' ] ], - [ '+', [ 1, nil ], [ 3, 'c' ] ], - [ '+', [ 1, nil ], [ 4, 'd' ] ], - [ '=', [ 1, 'e' ], [ 5, 'e' ] ], - [ '!', [ 2, 'v' ], [ 6, 'w' ] ], - [ '+', [ 3, nil ], [ 7, 'x' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_i - sdiff = nil - seq1 = %w() - seq2 = %w(a b c) - correct_sdiff = [ - [ '+', [ 0, nil ], [ 0, 'a' ] ], - [ '+', [ 0, nil ], [ 1, 'b' ] ], - [ '+', [ 0, nil ], [ 2, 'c' ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_j - sdiff = nil - seq1 = %w(a b c) - seq2 = %w() - correct_sdiff = [ - [ '-', [ 0, 'a' ], [ 0, nil ] ], - [ '-', [ 1, 'b' ], [ 0, nil ] ], - [ '-', [ 2, 'c' ], [ 0, nil ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_k - sdiff = nil - seq1 = %w(a b c) - seq2 = %w(1) - correct_sdiff = [ - [ '!', [ 0, 'a' ], [ 0, '1' ] ], - [ '-', [ 1, 'b' ], [ 1, nil ] ], - [ '-', [ 2, 'c' ], [ 1, nil ] ] ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_l - sdiff = nil - seq1 = %w(a b c) - seq2 = %w(c) - correct_sdiff = [ - [ '-', [ 0, 'a' ], [ 0, nil ] ], - [ '-', [ 1, 'b' ], [ 0, nil ] ], - [ '=', [ 2, 'c' ], [ 0, 'c' ] ] - ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_m - sdiff = nil - seq1 = %w(abcd efgh ijkl mnop) - seq2 = [] - correct_sdiff = [ - [ '-', [ 0, 'abcd' ], [ 0, nil ] ], - [ '-', [ 1, 'efgh' ], [ 0, nil ] ], - [ '-', [ 2, 'ijkl' ], [ 0, nil ] ], - [ '-', [ 3, 'mnop' ], [ 0, nil ] ] - ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_sdiff_n - sdiff = nil - seq1 = [] - seq2 = %w(abcd efgh ijkl mnop) - correct_sdiff = [ - [ '+', [ 0, nil ], [ 0, 'abcd' ] ], - [ '+', [ 0, nil ], [ 1, 'efgh' ] ], - [ '+', [ 0, nil ], [ 2, 'ijkl' ] ], - [ '+', [ 0, nil ], [ 3, 'mnop' ] ] - ] - correct_sdiff = __map_diffs(correct_sdiff) - assert_nothing_raised { sdiff = Diff::LCS.sdiff(seq1, seq2) } - assert_equal(correct_sdiff, sdiff) - end - - def test_balanced_a - seq1 = %w(a b c) - seq2 = %w(a x c) - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("M00 C11 M22 ", callback.result) - end - - def test_balanced_b - seq1 = %w(a b c) - seq2 = %w(a x c) - callback = nil - assert_nothing_raised do - callback = __balanced_callback - class << callback - undef change - end - end - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("M00 DA11 DB21 M22 ", callback.result) - end - - def test_balanced_c - seq1 = %w(a x y c) - seq2 = %w(a v w c) - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("M00 C11 C22 M33 ", callback.result) - end - - def test_balanced_d - seq1 = %w(x y c) - seq2 = %w(v w c) - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("C00 C11 M22 ", callback.result) - end - - def test_balanced_e - seq1 = %w(a x y z) - seq2 = %w(b v w) - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("C00 C11 C22 DA33 ", callback.result) - end - - def test_balanced_f - seq1 = %w(a z) - seq2 = %w(a) - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("M00 DA11 ", callback.result) - end - - def test_balanced_g - seq1 = %w(z a) - seq2 = %w(a) - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("DA00 M10 ", callback.result) - end - - def test_balanced_h - seq1 = %w(a b c) - seq2 = %w(x y z) - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("C00 C11 C22 ", callback.result) - end - - def test_balanced_i - seq1 = %w(abcd efgh ijkl mnopqrstuvwxyz) - seq2 = [] - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("DA00 DA10 DA20 DA30 ", callback.result) - end - - def test_balanced_j - seq1 = [] - seq2 = %w(abcd efgh ijkl mnopqrstuvwxyz) - callback = nil - assert_nothing_raised { callback = __balanced_callback } - assert_nothing_raised { Diff::LCS.traverse_balanced(seq1, seq2, callback) } - assert_equal("DB00 DB01 DB02 DB03 ", callback.result) - end -end - -class TestPatching < Test::Unit::TestCase - include Diff::LCS::Tests - - def test_patch_diff - ps = ms1 = ms2 = ms3 = nil - assert_nothing_raised do - ps = Diff::LCS.diff(@seq1, @seq2) - ms1 = Diff::LCS.patch(@seq1, ps) - ms2 = Diff::LCS.patch(@seq2, ps, :unpatch) - ms3 = Diff::LCS.patch(@seq2, ps) - end - assert_equal(@seq2, ms1) - assert_equal(@seq1, ms2) - assert_equal(@seq1, ms3) - assert_nothing_raised do - ps = Diff::LCS.diff(@seq1, @seq2, Diff::LCS::ContextDiffCallbacks) - ms1 = Diff::LCS.patch(@seq1, ps) - ms2 = Diff::LCS.patch(@seq2, ps, :unpatch) - ms2 = Diff::LCS.patch(@seq2, ps) - end - assert_equal(@seq2, ms1) - assert_equal(@seq1, ms2) - assert_equal(@seq1, ms3) - assert_nothing_raised do - ps = Diff::LCS.diff(@seq1, @seq2, Diff::LCS::SDiffCallbacks) - ms1 = Diff::LCS.patch(@seq1, ps) - ms2 = Diff::LCS.patch(@seq2, ps, :unpatch) - ms3 = Diff::LCS.patch(@seq2, ps) - end - assert_equal(@seq2, ms1) - assert_equal(@seq1, ms2) - assert_equal(@seq1, ms3) - end - - # Tests patch bug #891: - # http://rubyforge.org/tracker/?func=detail&atid=407&aid=891&group_id=84 - def test_patch_bug891 - s1 = s2 = s3 = s4 = s5 = ps = nil - assert_nothing_raised do - s1 = %w{a b c d e f g h i j k } - s2 = %w{a b c d D e f g h i j k } - ps = Diff::LCS::diff(s1, s2) - s3 = Diff::LCS.patch(s1, ps, :patch) - ps = Diff::LCS::diff(s1, s2, Diff::LCS::ContextDiffCallbacks) - s4 = Diff::LCS.patch(s1, ps, :patch) - ps = Diff::LCS::diff(s1, s2, Diff::LCS::SDiffCallbacks) - s5 = Diff::LCS.patch(s1, ps, :patch) - end - assert_equal(s2, s3) - assert_equal(s2, s4) - assert_equal(s2, s5) - - assert_nothing_raised do - ps = Diff::LCS::sdiff(s1, s2) - s3 = Diff::LCS.patch(s1, ps, :patch) - ps = Diff::LCS::diff(s1, s2, Diff::LCS::ContextDiffCallbacks) - s4 = Diff::LCS.patch(s1, ps, :patch) - ps = Diff::LCS::diff(s1, s2, Diff::LCS::DiffCallbacks) - s5 = Diff::LCS.patch(s1, ps, :patch) - end - assert_equal(s2, s3) - assert_equal(s2, s4) - assert_equal(s2, s5) - end - - def test_patch_sdiff - ps = ms1 = ms2 = ms3 = nil - assert_nothing_raised do - ps = Diff::LCS.sdiff(@seq1, @seq2) - ms1 = Diff::LCS.patch(@seq1, ps) - ms2 = Diff::LCS.patch(@seq2, ps, :unpatch) - ms3 = Diff::LCS.patch(@seq2, ps) - end - assert_equal(@seq2, ms1) - assert_equal(@seq1, ms2) - assert_equal(@seq1, ms3) - assert_nothing_raised do - ps = Diff::LCS.sdiff(@seq1, @seq2, Diff::LCS::ContextDiffCallbacks) - ms1 = Diff::LCS.patch(@seq1, ps) - ms2 = Diff::LCS.patch(@seq2, ps, :unpatch) - ms3 = Diff::LCS.patch(@seq2, ps) - end - assert_equal(@seq2, ms1) - assert_equal(@seq1, ms2) - assert_equal(@seq1, ms3) - assert_nothing_raised do - ps = Diff::LCS.sdiff(@seq1, @seq2, Diff::LCS::DiffCallbacks) - ms1 = Diff::LCS.patch(@seq1, ps) - ms2 = Diff::LCS.patch(@seq2, ps, :unpatch) - ms3 = Diff::LCS.patch(@seq2, ps) - end - assert_equal(@seq2, ms1) - assert_equal(@seq1, ms2) - assert_equal(@seq1, ms3) - end -end |