]> gitweb.factorcode.org Git - factor.git/blob - extra/semver/semver-tests.factor
git: fix tests
[factor.git] / extra / semver / semver-tests.factor
1 ! Copyright (C) 2020 Doug Coleman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: assocs kernel math math.order random semver sequences
4 sequences.extras sorting tools.test ;
5 IN: semver.tests
6
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" }
14     { "1.0.0" "1.0.0" }
15     { ">=*" "*" }
16     ! { "" "*" }
17     { "*" "*" }
18     { "*" "*" }
19     { ">=1.0.0" ">=1.0.0" }
20     { ">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" }
25     { "<2.0.0" "<2.0.0" }
26     { "<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" }
43     { "||" "*" }
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" }
48     { "x" "*" }
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" }
52     { "*" "*" }
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" }
63     { "^0" "<1.0.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" }
73     { "<1" "<1.0.0-0" }
74     { "< 1" "<1.0.0-0" }
75     { ">=1" ">=1.0.0" }
76     { ">= 1" ">=1.0.0" }
77     { "<1.2" "<1.2.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" }
88     { ">1" ">=2.0.0" }
89     { ">1.2" ">=1.3.0" }
90     { ">X" "<0.0.0-0" }
91     { "<X" "<0.0.0-0" }
92     { "<x <* || >* 2.x" "<0.0.0-0" }
93     { ">x 2.x || * || <x" "*" }
94 }
95
96
97 ! first > second
98 CONSTANT: semver-gt-comparisons {
99     { "0.0.0" "0.0.0-foo" }
100     { "0.0.1" "0.0.0" }
101     { "1.0.0" "0.9.9" }
102     { "0.10.0" "0.9.0" }
103     { "0.99.0" "0.10.0" }
104     { "2.0.0" "1.2.3" }
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" }
130 }
131
132 { t } [
133     semver-gt-comparisons [ first2 semver<=> +gt+ eq? ] all?
134 ] unit-test
135
136 { t } [
137     semver-gt-comparisons [ first2 swap semver<=> +lt+ eq? ] all?
138 ] unit-test
139
140 { "2.0.0" } [ "1.0.4-rc.1" >semver bump-major semver>string ] unit-test
141 { "2.0.0" } [ "1.1.0-rc.1" >semver bump-major semver>string ] unit-test
142 { "2.0.0" } [ "1.1.4-rc.1" >semver bump-major semver>string ] unit-test
143 { "2.0.0" } [ "1.2.3" >semver bump-major semver>string ] unit-test
144 { "1.0.0" } [ "1.0.0-rc.1" >semver bump-major semver>string ] unit-test
145
146 { "0.2.0" } [ "0.2.0-rc.1" >semver bump-minor semver>string ] unit-test
147 { "0.3.0" } [ "0.2.5-rc.1" >semver bump-minor semver>string ] unit-test
148 { "1.4.0" } [ "1.3.1" >semver bump-minor semver>string ] unit-test
149
150 { "1.3.3" } [ "1.3.2" >semver bump-patch semver>string ] unit-test
151 { "0.1.5" } [ "0.1.5-rc.2" >semver bump-patch semver>string ] unit-test
152
153 {
154     "0.1.4"
155     "0.1.5-0"
156     "0.1.5-1"
157     "0.1.5-alpha.0"
158     "0.1.5-alpha.1"
159     "0.1.5-beta.0"
160     "0.1.5-beta.1"
161     "0.1.5-rc.0"
162     "0.1.5-rc.1"
163     "0.1.5"
164 } [
165     "0.1.4" >semver [ semver>string ] keep
166     2 [ bump-dev [ semver>string ] keep ] times
167     2 [ bump-alpha [ semver>string ] keep ] times
168     2 [ bump-beta [ semver>string ] keep ] times
169     2 [ bump-rc [ semver>string ] keep ] times
170     bump-patch semver>string
171 ] unit-test
172
173 { "1.2.4-0" } [ "1.2.3" >semver bump-prepatch semver>string ] unit-test
174 { "1.3.0-0" } [ "1.2.3" >semver bump-preminor semver>string ] unit-test
175 { "2.0.0-0" } [ "1.2.3" >semver bump-premajor semver>string ] unit-test
176 { "2.0.0-1" } [ "1.2.3" >semver bump-premajor bump-dev semver>string ] unit-test
177
178 { "1.2.3-erg.0" } [ "1.2.3-0" >semver "erg" bump-prerelease semver>string ] unit-test
179 { "1.2.3-erg.1" } [ "1.2.3-erg.0" >semver "erg" bump-prerelease semver>string ] unit-test
180 { "1.2.4-erg.0" } [ "1.2.3" >semver "erg" bump-prerelease semver>string ] unit-test
181
182 { T{ semver f 2 7 2 "pre" "build" } } [ "2.7.2-pre+build" >semver ] unit-test
183 { T{ semver f 2 7 2 "pre" f } } [ "2.7.2-pre" >semver ] unit-test
184 { T{ semver f 2 7 2 f "build" } } [ "2.7.2+build" >semver ] unit-test
185
186 [ "2.7.2.1+build" >semver ] [ malformed-semver? ] must-fail-with
187 [ "2.7.2.+build" >semver ] [ malformed-semver? ] must-fail-with
188 [ "2.7.2." >semver ] [ malformed-semver? ] must-fail-with
189 [ "2.7." >semver ] [ malformed-semver? ] must-fail-with
190 [ "2.7" >semver ] [ malformed-semver? ] must-fail-with
191 [ "2." >semver ] [ malformed-semver? ] must-fail-with
192 [ "2" >semver ] [ malformed-semver? ] must-fail-with
193
194 { +gt+ } [ "1.2.0-dev1" "0.12.1-dev2" semver<=> ] unit-test
195 { +lt+ } [ "1.2.0-dev12" "1.2.0-dev2" semver<=> ] unit-test
196 { +gt+ } [ "1.2.0-dev3" "1.2.0-dev21" semver<=> ] unit-test
197 { +lt+ } [ "1.9.0" "1.10.0" semver<=> ] unit-test
198 { +eq+ } [ "2.0.0-rc1" "2.0.0-rc1" semver<=> ] unit-test
199 { +lt+ } [ "1.0.0-rc1" "1.0.0" semver<=> ] unit-test
200 { +lt+ } [ "1.0.0-rc1" "1.0.0-rc2" semver<=> ] unit-test
201 { +lt+ } [ "1.0.0-rc.1" "1.0.0-rc.11" semver<=> ] unit-test
202 { +lt+ } [ "1.0.0-rc.2" "1.0.0-rc.11" semver<=> ] unit-test
203 { +eq+ } [ "1.0.0+foo" "1.0.0+bar" semver<=> ] unit-test
204 { +eq+ } [ "1.0.0" "1.0.0" semver<=> ] unit-test
205
206 { t } [
207     {
208         "1.0.0-0"
209         "1.0.0-12"
210         "1.0.0-alpha"
211         "1.0.0-alpha.1"
212         "1.0.0-alpha.beta"
213         "1.0.0-beta"
214         "1.0.0-beta.2"
215         "1.0.0-beta.11"
216         "1.0.0-rc.1"
217         "1.0.0"
218         "2.0.0"
219         "2.1.0"
220         "2.1.1"
221     } dup clone randomize [ semver<=> ] sort-with =
222 ] unit-test