Skip to content
Snippets Groups Projects
Commit 956c1d65 authored by Jack Nagel's avatar Jack Nagel
Browse files

Initial version comparison implementation


Signed-off-by: default avatarJack Nagel <jacknagel@gmail.com>
parent 969ce2f6
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,10 @@ module VersionAssertions
def assert_version_nil url
assert_nil Version.parse(url)
end
def assert_comparison a, comparison, b
eval "assert Version.new(a) #{comparison} Version.new(b)"
end
end
class TestBadVersion < TestBall
......@@ -21,7 +25,19 @@ class TestBadVersion < TestBall
end
end
class VersionTests < Test::Unit::TestCase
class VersionComparisonTests < Test::Unit::TestCase
include VersionAssertions
def test_version_comparisons
assert_comparison '0.1', '==', '0.1.0'
assert_comparison '0.1', '!=', '0.2'
assert_comparison '1.2.3', '>', '1.2.2'
assert_comparison '1.2.3-p34', '>', '1.2.3-p33'
assert_comparison '1.2.4', '<', '1.2.4.1'
end
end
class VersionParsingTests < Test::Unit::TestCase
include VersionAssertions
def test_pathname_version
......
......@@ -6,12 +6,30 @@ class Version
@version = val.to_s.strip
end
def head?
@version == 'HEAD'
end
def nums
@version.scan(/\d+/).map { |d| d.to_i }
end
def <=>(other)
@version <=> other.version
return nil unless other.is_a? Version
return 0 if self.head? and other.head?
return 1 if self.head? and not other.head?
return -1 if not self.head? and other.head?
return 1 if other.nil?
snums = self.nums
onums = other.nums
count = [snums.length, onums.length].max
snums.fill(0, snums.length, count - snums.length)
onums.fill(0, onums.length, count - onums.length)
snums <=> onums
end
def to_s
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment