]> gitweb.factorcode.org Git - factor.git/commitdiff
add "version<=>"
authorMaximilian Lupke <simply.malu@googlemail.com>
Mon, 22 Feb 2010 20:23:43 +0000 (21:23 +0100)
committerMaximilian Lupke <simply.malu@googlemail.com>
Tue, 23 Feb 2010 12:25:33 +0000 (13:25 +0100)
extra/semantic-versioning/semantic-versioning-tests.factor
extra/semantic-versioning/semantic-versioning.factor

index 9745cc94a274de43ee3a76869462d98e6a636788..236e802458974823614ef6a26558cbedb0b0bab8 100644 (file)
@@ -1,5 +1,10 @@
-USING: semantic-versioning tools.test ;
+USING: math.order semantic-versioning tools.test ;
 IN: semantic-versioning.tests
 
 [ { 1 0 0 "dev1" } ] [ "1.0.0dev1" split-version ] unit-test
 [ { 1 2 3 } ] [ "1.2.3" split-version ] unit-test
+
+[ +gt+ ] [ "1.2.0dev1" "0.12.1dev2" version<=> ] unit-test
+[ +eq+ ] [ "2.0.0rc1" "2.0.0rc1" version<=> ] unit-test
+[ +lt+ ] [ "1.0.0rc1" "1.0.0" version<=> ] unit-test
+[ +lt+ ] [ "1.0.0rc1" "1.0.0rc2" version<=> ] unit-test
\ No newline at end of file
index 116d5a58a1edeab8abcc553ff3f991437f400480..c21cca9a7e966740150309a1f7d4277c8651c626 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2010 Maximilian Lupke.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: arrays ascii kernel math.parser sequences splitting ;
+USING: arrays ascii combinators kernel math.order math.parser
+sequences splitting ;
 IN: semantic-versioning
 
 : split-version ( string -- array )
@@ -8,3 +9,14 @@ IN: semantic-versioning
     [ cut [ [ string>number ] tri@ ] dip 4array ]
     [ drop [ string>number ] tri@ 3array ]
     if ;
+
+! okay, not beautiful
+: version<=> ( version1 version2 -- <=> )
+    [ split-version ] bi@
+    {
+        { [ [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] }
+        { [ drop [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] }
+        { [ drop [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] }
+        { [ drop 2dup [ length ] bi@ >=< dup +eq+ = not ] [ 2nip ] }
+        [ drop [ first ] bi@ <=> ]
+    } cond ;