racket/collects/tests/mzscheme/version.ss
Eli Barzilay c3985c706c Change parsing of old versions:
NNNpN -> N.NN.N
  NNN.N -> N.NN.0.N
This is better than mapping NNN.N to N.NN.N, because it follows the
fact that NNN.N were not release versions, so they're mapped to
numbers that are not release versions now.

svn: r11398
2008-08-23 07:06:33 +00:00

67 lines
2.7 KiB
Scheme

(load-relative "loadtest.ss")
(Section 'version)
(require version/utils)
;; sanity check
(unless (and (< (string->number (car (regexp-match #rx"^[0-9]+" (version)))) 49)
(integer? (version->integer (version))))
;; When this happens, we got to numbers that can be confused with old version
;; numbers, and the version/utils code should be modified. With the current
;; rate of changes, this should happen in more 150 years. Either programming
;; is probably done with a direct brain link, or this software has nobody to
;; fix it because everybody went back to the trees.
(error 'version/utils.ss "this file should be updated"))
(test #t valid-version? (version))
(for-each (lambda (v+i) (test (cadr v+i) version->integer (car v+i)))
'(;; legacy version scheme
["372" 372000000]
["372.0" #f] ; should be just "372"
["372.1" 372000001]
["372.12" 372000012]
["123.4" 123000004]
["49" 49000000] ; oldest legacy-version supported
["103" 103000000]
["103p1" 103001000] ; pN used as sub-sub-version
["380" #f] ; old style, but these versions never existed
["400" #f]
;; new version scheme
["4.0" 400000000]
["4" #f] ; must have one decimal digit
["4.1" 401000000]
["4.0.1" 400001000]
["4.0.2" 400002000]
["4.1.2.3" 401002003]
["4.0.0.99" 400000099]
["4.12.123.999" 412123999]
["4.99.99.99" 499099099]
["4.99.99.099" #f] ; leading zeroes forbidden
["4.99.099.99" #f]
["4.09.99.99" #f]
["04.9.99.0" #f]
["4.9.99.00" #f]
["00.0" #f]
["4.99.099.099" #f]
["4.99.0" #f] ; single zero forbidden at end
["4.99.99.0" #f]
["0.0" 0] ; smallest new-scheme version
["10.0" 1000000000]
["10.0.1" 1000001000]
["48.99.999.999" 4899999999] ; largest new-scheme version allowed
["4.100" #f] ; second component should be < 100
["4.999" #f]
["1.2.3.4.5" #f] ; only four parts
["1..2" #f] ; other random junk
[".1" #f]
["1." #f]
["foo" #f]
["x.y" #f]
["0" #f]
["00" #f]
))
(report-errs)