+++ /dev/null
-! Copyright (C) 2010 Maximilian Lupke.
-! See https://factorcode.org/license.txt for BSD license.
-USING: help.markup help.syntax kernel strings ;
-IN: semantic-versioning
-
-HELP: version<
-{ $values
- { "version1" string } { "version2" string }
- { "?" boolean }
-} ;
-
-HELP: version<=
-{ $values
- { "version1" string } { "version2" string }
- { "?" boolean }
-} ;
-
-HELP: version<=>
-{ $values
- { "version1" string } { "version2" string }
- { "<=>" string }
-} ;
-
-HELP: version=
-{ $values
- { "version1" string } { "version2" string }
- { "?" boolean }
-} ;
-
-HELP: version>
-{ $values
- { "version1" string } { "version2" string }
- { "?" boolean }
-} ;
-
-HELP: version>=
-{ $values
- { "version1" string } { "version2" string }
- { "?" boolean }
-} ;
-
-ARTICLE: "semantic-versioning" "Semantic Versioning"
-{ $vocab-link "semantic-versioning" }
-$nl
-{ "See " { $url "https://semver.org/" } " for a detailed description of semantic versioning." }
-;
-
-ABOUT: "semantic-versioning"
+++ /dev/null
-USING: assocs kernel math.order random semantic-versioning
-sequences sequences.extras sorting tools.test ;
-IN: semantic-versioning
-
-{
- {
- { { 0 1 0 } f f }
- { { 0 97 0 } f f }
- { { 1 1 0 } f f }
- { { 1 2 3 } f f }
- { { 1 0 0 } "dev1" f }
- { { 1 0 0 } "rc1" "build" }
- { { 1 0 0 } "rc2" f }
- { { 1 0 0 } "rc2" "123456" }
- }
-} [
- {
- ".1"
- "0.97"
- "1.1"
- "1.2.3"
- "1.0.0dev1"
- "1.0.0rc1+build"
- "1.0.0-rc2"
- "1.0.0-rc2+123456"
- } [ split-version ] map
-] unit-test
-
-{ +gt+ } [ "1.2.0dev1" "0.12.1dev2" version<=> ] unit-test
-{ +lt+ } [ "1.9.0" "1.10.0" 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
-{ +lt+ } [ "1.0.0-rc.1" "1.0.0-rc.11" version<=> ] unit-test
-{ +lt+ } [ "1.0.0-rc.2" "1.0.0-rc.11" version<=> ] unit-test
-{ +eq+ } [ "1.0.0+foo" "1.0.0+bar" version<=> ] unit-test
-{ +eq+ } [ "1.0" "1.0.0" version<=> ] unit-test
-
-{ t } [
- {
- "1.0.0-alpha"
- "1.0.0-alpha.1"
- "1.0.0-alpha.beta"
- "1.0.0-beta"
- "1.0.0-beta.2"
- "1.0.0-beta.11"
- "1.0.0-rc.1"
- "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<=> ] zip-with
- values [ +gt+ = ] all?
-] unit-test
-
-{ t } [
- semver-gt-comparisons
- [ first2 swap version<=> ] zip-with
- values [ +lt+ = ] all?
-] unit-test
-
+++ /dev/null
-! Copyright (C) 2010 Maximilian Lupke.
-! See https://factorcode.org/license.txt for BSD license.
-USING: arrays ascii kernel math math.order math.parser sequences
-sorting.human splitting ;
-IN: semantic-versioning
-
-<PRIVATE
-
-: number<=> ( obj1 obj2 -- <=> )
- [ [ zero? ] trim-tail-slice ] bi@ <=> ;
-
-: pre-release<=> ( obj1 obj2 -- <=> )
- 2dup [ empty? ] either?
- [ [ length ] bi@ >=< ] [ human<=> ] if ;
-
-PRIVATE>
-
-: split-version ( string -- array )
- "+" split1 [
- dup [ [ digit? not ] [ CHAR: . = not ] bi and ] find [
- [ cut ] [ CHAR: - = [ rest [ f ] when-empty ] when ] bi*
- ] [ drop f ] if*
- [ "." split [ string>number 0 or ] map 3 0 pad-tail ] dip
- ] dip 3array ;
-
-: version<=> ( version1 version2 -- <=> )
- [ split-version ] bi@
- 2dup [ first ] bi@ number<=> dup +eq+ =
- [ drop [ second ] bi@ pre-release<=> ] [ 2nip ] if ;
-
-: version< ( version1 version2 -- ? )
- version<=> +lt+ eq? ;
-
-: version<= ( version1 version2 -- ? )
- version<=> { +lt+ +eq+ } member-eq? ;
-
-: version= ( version1 version2 -- ? )
- version<=> +eq+ eq? ;
-
-: version>= ( version1 version2 -- ? )
- version<=> { +gt+ +eq+ } member-eq? ;
-
-: version> ( version1 version2 -- ? )
- version<=> +gt+ eq? ;