]> gitweb.factorcode.org Git - factor.git/commitdiff
semantic-versioning: Better comparison code.
authorDoug Coleman <doug.coleman@gmail.com>
Mon, 21 Dec 2020 16:32:15 +0000 (10:32 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Mon, 21 Dec 2020 16:32:15 +0000 (10:32 -0600)
extra/semantic-versioning/semantic-versioning-tests.factor
extra/semantic-versioning/semantic-versioning.factor

index 8d822171add7e95532d891667d3ccd3a31cfd013..8e5a2560ea5555ac6c94c822f058bd4c4c2d7f25 100644 (file)
@@ -1,5 +1,6 @@
-USING: kernel math.order random semantic-versioning sequences
-sorting tools.test ;
+USING: assocs kernel math.order random semantic-versioning
+sequences sequences.extras sorting tools.test ;
+IN: semantic-versioning
 
 {
     {
@@ -47,3 +48,52 @@ sorting tools.test ;
         "1.0.0"
     } dup clone randomize [ version<=> ] sort =
 ] unit-test
+
+! { +gt+ } [ "1.2.3-r2" "1.2.3-r100" version<=> ] unit-test
+
+! first > second
+CONSTANT: semver-gt-comparisons {
+    { "0.0.0" "0.0.0-foo" }
+    { "0.0.1" "0.0.0" }
+    { "1.0.0" "0.9.9" }
+    { "0.10.0" "0.9.0" }
+    { "0.99.0" "0.10.0" }
+    { "2.0.0" "1.2.3" }
+    ! { "v0.0.0" "0.0.0-oo" }
+    ! { "v0.0.1" "0.0.0" }
+    ! { "v1.0.0" "0.9.9" }
+    ! { "v0.10.0" "0.9.0" }
+    ! { "v0.99.0" "0.10.0" }
+    ! { "v2.0.0" "1.2.3" }
+    ! { "0.0.0" "v0.0.0-fo" }
+    ! { "0.0.1" "v0.0.0" }
+    ! { "1.0.0" "v0.9.9" }
+    ! { "0.10.0" "v0.9.0" }
+    ! { "0.99.0" "v0.10.0" }
+    ! { "2.0.0" "v1.2.3" }
+    { "1.2.3" "1.2.3-asf" }
+    { "1.2.3" "1.2.3-4" }
+    { "1.2.3" "1.2.3-4-fo" }
+    { "1.2.3-5-foo" "1.2.3-5" }
+    { "1.2.3-5" "1.2.3-4" }
+    { "1.2.3-5-foo" "1.2.3-5-Foo" }
+    { "3.0.0" "2.7.2+asdf" }
+    { "1.2.3-a.10" "1.2.3-a.5" }
+    { "1.2.3-a.b" "1.2.3-a.5" }
+    { "1.2.3-a.b" "1.2.3-a" }
+    ! { "1.2.3-a.b.c.10.d.5" ".2.3-a.b.c.5.d.100" } ! bad parse
+    ! { "1.2.3-r2" "1.2.3-r100" } ! fixme
+    { "1.2.3-r100" "1.2.3-R2" }
+}
+
+{ t } [
+    semver-gt-comparisons
+    [ first2 version<=> ] map-zip
+    values [ +gt+ = ] all?
+] unit-test
+
+{ t } [
+    semver-gt-comparisons
+    [ first2 swap version<=> ] map-zip
+    values [ +lt+ = ] all?
+] unit-test
\ No newline at end of file
index 8d6ad224104caa2ecdf3d2e42cbd7a8da450b1ef..c55a067680f3a23678fe42fdd4e55e6f4f3d4651 100644 (file)
@@ -29,16 +29,16 @@ PRIVATE>
     [ drop [ second ] bi@ pre-release<=> ] [ 2nip ] if ;
 
 : version< ( version1 version2 -- ? )
-    version<=> +lt+ = ;
+    version<=> +lt+ eq? ;
 
 : version<= ( version1 version2 -- ? )
-    version<=> [ +lt+ = ] [ +eq+ = ] either? ;
+    version<=> { +lt+ +eq+ } member-eq? ;
 
 : version= ( version1 version2 -- ? )
-    version<=> +eq+ = ;
+    version<=> +eq+ eq? ;
 
 : version>= ( version1 version2 -- ? )
-    version<=> [ +gt+ = ] [ +eq+ = ] either? ;
+    version<=> { +gt+ +eq+ } member-eq? ;
 
 : version> ( version1 version2 -- ? )
-    version<=> +gt+ = ;
+    version<=> +gt+ eq? ;