I'm trying to implement a custom class including the comparable mixin. Later the class is used to do a diff. The class looks like
class Element
  include Comparable
  attr_reader :name
  def initialize(name)
    @name = name
  end
  def <=>(other)
    @name <=> other.name
  end
end
Now some test values with two added entries compared to a.
a = Array.new
b = Array.new
a.push Element.new('y1')
a.push Element.new('y2')
a.push Element.new('y4')
a.push Element.new('x1')
a.push Element.new('x2')
a.push Element.new('x4')
b.push Element.new('y1')
b.push Element.new('y2')
b.push Element.new('y3')
b.push Element.new('y4')
b.push Element.new('x1')
b.push Element.new('x2')
b.push Element.new('x3')
b.push Element.new('x4')
And now run diff between both arrays
puts Diff::LCS.diff(a, b).inspect
I would expect two added objects now but it finds 8 changes... Any ideas why?
[[["-", 2, #<Element:0x007fa9fb567898 @name="y4">],
  ["-", 3, #<Element:0x007fa9fbc69830 @name="x1">],
  ["-", 4, #<Element:0x007fa9fbca3378 @name="x2">],
  ["+", 2, #<Element:0x007fa9fb5e5e78 @name="y3">],
  ["+", 3, #<Element:0x007fa9fb606920 @name="y4">],
  ["+", 4, #<Element:0x007fa9fb625848 @name="x1">],
  ["+", 5, #<Element:0x007fa9fb647da8 @name="x2">],
  ["+", 6, #<Element:0x007fa9fbde8670 @name="x3">]]]
If we run the test with
a = Array.new
b = Array.new
a.push 'y1'
a.push 'y2'
a.push 'y4'
a.push 'x1'
a.push 'x2'
a.push 'x4'
b.push 'y1'
b.push 'y2'
b.push 'y3'
b.push 'y4'
b.push 'x1'
b.push 'x2'
b.push 'x3'
b.push 'x4'
Everything works as expected:
[[["+", 2, "y3"]],
 [["+", 6, "x3"]]]
 
     
    