(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)