1 ! Copyright (C) 2020 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs kernel math.order semver sequences
4 sequences.extras tools.test ;
7 CONSTANT: semver-ranges {
8 { "1.0.0 - 2.0.0" ">=1.0.0 <=2.0.0" }
9 { "1.0.0 - 2.0.0" ">=1.0.0-0 <2.0.1-0" }
10 { "1 - 2" ">=1.0.0 <3.0.0-0" }
11 { "1 - 2" ">=1.0.0-0 <3.0.0-0" }
12 { "1.0 - 2.0" ">=1.0.0 <2.1.0-0" }
13 { "1.0 - 2.0" ">=1.0.0-0 <2.1.0-0" }
19 { ">=1.0.0" ">=1.0.0" }
21 { "<=2.0.0" "<=2.0.0" }
22 { "1" ">=1.0.0 <2.0.0-0" }
23 { "<=2.0.0" "<=2.0.0" }
24 { "<=2.0.0" "<=2.0.0" }
27 { ">= 1.0.0" ">=1.0.0" }
28 { ">= 1.0.0" ">=1.0.0" }
29 { ">= 1.0.0" ">=1.0.0" }
30 { "> 1.0.0" ">1.0.0" }
31 { "> 1.0.0" ">1.0.0" }
32 { "<= 2.0.0" "<=2.0.0" }
33 { "<= 2.0.0" "<=2.0.0" }
34 { "<= 2.0.0" "<=2.0.0" }
35 { "< 2.0.0" "<2.0.0" }
36 { "<\t2.0.0" "<2.0.0" }
37 { ">=0.1.97" ">=0.1.97" }
38 { ">=0.1.97" ">=0.1.97" }
39 { "0.1.20 || 1.2.4" "0.1.20||1.2.4" }
40 { ">=0.2.3 || <0.0.1" ">=0.2.3||<0.0.1" }
41 { ">=0.2.3 || <0.0.1" ">=0.2.3||<0.0.1" }
42 { ">=0.2.3 || <0.0.1" ">=0.2.3||<0.0.1" }
44 { "2.x.x" ">=2.0.0 <3.0.0-0" }
45 { "1.2.x" ">=1.2.0 <1.3.0-0" }
46 { "1.2.x || 2.x" ">=1.2.0 <1.3.0-0||>=2.0.0 <3.0.0-0" }
47 { "1.2.x || 2.x" ">=1.2.0 <1.3.0-0||>=2.0.0 <3.0.0-0" }
49 { "2.*.*" ">=2.0.0 <3.0.0-0" }
50 { "1.2.*" ">=1.2.0 <1.3.0-0" }
51 { "1.2.* || 2.*" ">=1.2.0 <1.3.0-0||>=2.0.0 <3.0.0-0" }
53 { "2" ">=2.0.0 <3.0.0-0" }
54 { "2.3" ">=2.3.0 <2.4.0-0" }
55 { "~2.4" ">=2.4.0 <2.5.0-0" }
56 { "~2.4" ">=2.4.0 <2.5.0-0" }
57 { "~>3.2.1" ">=3.2.1 <3.3.0-0" }
58 { "~1" ">=1.0.0 <2.0.0-0" }
59 { "~>1" ">=1.0.0 <2.0.0-0" }
60 { "~> 1" ">=1.0.0 <2.0.0-0" }
61 { "~1.0" ">=1.0.0 <1.1.0-0" }
62 { "~ 1.0" ">=1.0.0 <1.1.0-0" }
64 { "^ 1" ">=1.0.0 <2.0.0-0" }
65 { "^0.1" ">=0.1.0 <0.2.0-0" }
66 { "^1.0" ">=1.0.0 <2.0.0-0" }
67 { "^1.2" ">=1.2.0 <2.0.0-0" }
68 { "^0.0.1" ">=0.0.1 <0.0.2-0" }
69 { "^0.0.1-beta" ">=0.0.1-beta <0.0.2-0" }
70 { "^0.1.2" ">=0.1.2 <0.2.0-0" }
71 { "^1.2.3" ">=1.2.3 <2.0.0-0" }
72 { "^1.2.3-beta.4" ">=1.2.3-beta.4 <2.0.0-0" }
78 { "< 1.2" "<1.2.0-0" }
79 { "1" ">=1.0.0 <2.0.0-0" }
80 { ">01.02.03" ">1.2.3" }
81 ! { ">01.02.03" null" }
82 ! { "~1.2.3beta" ">=1.2.3-beta <1.3.0-0" }
83 ! { "~1.2.3beta" null" }
84 { "^ 1.2 ^ 1" ">=1.2.0 <2.0.0-0 >=1.0.0" }
85 { "1.2 - 3.4.5" ">=1.2.0 <=3.4.5" }
86 { "1.2.3 - 3.4" ">=1.2.3 <3.5.0-0" }
87 { "1.2 - 3.4" ">=1.2.0 <3.5.0-0" }
92 { "<x <* || >* 2.x" "<0.0.0-0" }
93 { ">x 2.x || * || <x" "*" }
98 CONSTANT: semver-gt-comparisons {
99 { "0.0.0" "0.0.0-foo" }
103 { "0.99.0" "0.10.0" }
105 ! { "v0.0.0" "0.0.0-oo" }
106 ! { "v0.0.1" "0.0.0" }
107 ! { "v1.0.0" "0.9.9" }
108 ! { "v0.10.0" "0.9.0" }
109 ! { "v0.99.0" "0.10.0" }
110 ! { "v2.0.0" "1.2.3" }
111 ! { "0.0.0" "v0.0.0-fo" }
112 ! { "0.0.1" "v0.0.0" }
113 ! { "1.0.0" "v0.9.9" }
114 ! { "0.10.0" "v0.9.0" }
115 ! { "0.99.0" "v0.10.0" }
116 ! { "2.0.0" "v1.2.3" }
117 { "1.2.3" "1.2.3-asf" }
118 { "1.2.3" "1.2.3-4" }
119 { "1.2.3" "1.2.3-4-fo" }
120 { "1.2.3-5-foo" "1.2.3-5" }
121 { "1.2.3-5" "1.2.3-4" }
122 { "1.2.3-5-foo" "1.2.3-5-Foo" }
123 { "3.0.0" "2.7.2+asdf" }
124 { "1.2.3-a.10" "1.2.3-a.5" }
125 { "1.2.3-a.b" "1.2.3-a.5" }
126 { "1.2.3-a.b" "1.2.3-a" }
127 ! { "1.2.3-a.b.c.10.d.5" ".2.3-a.b.c.5.d.100" }
128 { "1.2.3-r2" "1.2.3-r100" }
129 { "1.2.3-r100" "1.2.3-R2" }
133 semver-gt-comparisons
134 [ first2 [ parse-semver ] bi@ <=> ] zip-with
135 values [ +gt+ = ] all?
139 semver-gt-comparisons
140 [ first2 swap [ parse-semver ] bi@ <=> ] zip-with
141 values [ +lt+ = ] all?