automated/ase-interval-tests.el automated/ase-metric-tests.el \
automated/ase-neighbourhood-tests.el \
automated/ase-permutation-tests.el \
- automated/ase-reclass-tests.el automated/base64-tests.el \
+ automated/ase-reclass-tests.el automated/base64-tests.el \
automated/bloom-tests.el automated/byte-compiler-tests.el \
- automated/case-tests.el automated/ccl-tests.el \
+ automated/case-tests.el automated/ccl-tests.el \
automated/cl-loop-tests.el automated/c-tests.el \
automated/database-tests.el automated/ent-tests.el \
automated/extent-tests.el automated/hash-table-tests.el \
### dont use staged build
##all: stage1 stage2
-
(Assert (= (ase-interval-lebesgue-measure tiny) 3))
(Assert
(almost= (ase-interval-lebesgue-measure (ase-interval 0.1 1.2)) 1.1 1e-4))
- (Assert
+ (Assert
(almost= (ase-interval-lebesgue-measure (ase-interval -0.1 0.2)) 0.3 1e-4))
(Assert
(almost= (ase-interval-lebesgue-measure (ase-interval -1.2 -1.1)) 0.1 1e-4))
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; Keywords: tests
;;
;; This file is part of SXEmacs.
-;;
+;;
;; SXEmacs is free software: you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by the
;; Free Software Foundation, either version 3 of the License, or (at your
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Synched up with: Not in FSF.
;;
(b3 (make-bloom 512))
(b4 (make-bloom 512 26)))
(eval `(Assert (eq (bloom-order ,b1)
- (bloom-order ,b2))))
+ (bloom-order ,b2))))
(eval `(Assert (eq (bloom-order ,b3) 512)))
(eval `(Assert (eq (bloom-order ,b4) 512)))
(eval `(Assert (eq (bloom-degree ,b1)
- (bloom-degree ,b2))))
+ (bloom-degree ,b2))))
(eval `(Assert (eq (bloom-degree ,b4) 26)))
(eval `(Assert (eq (bloom-size ,b1) 0)))
(eval `(Assert (eq (bloom-size ,b2) 0)))
;;; moved to man/lispref/lists.texi -hroptatyr
;; ;; when we add 8-times-degree-times more elements than the order
;; ;; of the bloom we expect it to turn into a universe
-;;
+;;
;; (dotimes (i (* 8 (bloom-degree b4) (bloom-order b4)))
;; (bloom-add b4 i))
-;;
+;;
;; (eval `(Assert (bloom-owns-p ,b4 'a-symbol-i-never-added)))
;; (eval `(Assert (bloom-owns-p ,b4 "a-string-i-never-added")))
;; (eval `(Assert (bloom-owns-p ,b4 [a vector i never added])))
(b3 (make-bloom-universe 512))
(b4 (make-bloom-universe 512 26)))
(eval `(Assert (eq (bloom-order ,b1)
- (bloom-order ,b2))))
+ (bloom-order ,b2))))
(eval `(Assert (eq (bloom-order ,b3) 512)))
(eval `(Assert (eq (bloom-order ,b4) 512)))
(eval `(Assert (eq (bloom-degree ,b1)
- (bloom-degree ,b2))))
+ (bloom-degree ,b2))))
(eval `(Assert (eq (bloom-degree ,b4) 26)))
(eval `(Assert (eq (bloom-size ,b1)
- (bloom-size ,b2))))
+ (bloom-size ,b2))))
(eval `(Assert (eq (bloom-size ,b3)
- (bloom-size ,b4))))
+ (bloom-size ,b4))))
(eval `(Assert (bloom-owns-p ,b1 21)))
(eval `(Assert (bloom-owns-p ,b1 'a-symbol)))
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(Assert (eq 1 (search-backward string nil t 5)))
(goto-char (point-max))
(Assert (not (search-backward string nil t 6))))))
-
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Section 0. Useful functions to construct test suites.
ccl-test-last-register-state
string)))
(if (not not-check-coding-system)
- (Assert (string=
+ (Assert (string=
str2
(decode-coding-string
string 'ccl-test-coding-system))))
'(1 (read r0)
(loop
(write-read-repeat r0))))
- (make-coding-system
+ (make-coding-system
'ccl-test-coding-system
'ccl
"CCL TEST temprary coding-system."
(string= (ccl-test-on-stream `(1 ((read r0)
(loop
(r0 += 3)
- (write-read-repeat r0))))
+ (write-read-repeat r0))))
str)
str2)))
"...")))
(Assert
(string=
- (ccl-test-on-stream
+ (ccl-test-on-stream
`(1 ((loop
(read-multibyte-character r0 r1)
(write-multibyte-character r0 r1)
(10000 . -1) (10001 . -1) (10002 . -1) (10003 . -1)
(10004 . -1) (19999 . -1) (20000 . 5) (20001 . 5)
(20002 . 5) (30000 . 6) (20004 . 5) (20005 . 5) (20006 . 5)))
-
+
(Assert-Equal
(mapcar
(lambda (val)
[72 lambda]
[20000 20000 20001 20002 nil 20004 20005 20006]
[1006 2006 2007 2008 2009 2010]
- ([20003 30000 30010 ccl-test-arith-1 30030 30040
+ ([20003 30000 30010 ccl-test-arith-1 30030 30040
ccl-test-arith-1 30060]
[1001010 50 51 52 53 54 55]))
[t t 0 1000000]
;; multi-for
(Assert
(equal
- (cl:loop for x from 1 to 10
- for y = nil then x
+ (cl:loop for x from 1 to 10
+ for y = nil then x
collect (list x y))
'((1 nil) (2 2) (3 3) (4 4) (5 5) (6 6) (7 7) (8 8) (9 9) (10 10))))
(Assert
(equal
- (cl:loop for x from 1 to 10
- and y = nil then x
+ (cl:loop for x from 1 to 10
+ and y = nil then x
collect (list x y))
'((1 nil) (2 1) (3 2) (4 3) (5 4) (6 5) (7 6) (8 7) (9 8) (10 9))))
(Assert
(= (let* ((series '(1.25 4.5 5.5)))
- (cl:loop for v in series
+ (cl:loop for v in series
sum (* 2.0 v)))
22.5))
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Synched up with: Not in FSF.
;;
(Assert (bigzp (coerce-number 0 'bigz)))
(Assert (bigzp (coerce-number 1 'bigz)))
(Assert (and (bigzp (factorial 100))
- (bigzp (coerce-number (factorial 100) 'bigz))))
+ (bigzp (coerce-number (factorial 100) 'bigz))))
(Assert (bigzp (coerce-number 1.0 'bigz)))
(Assert (intp (coerce-number (factorial 100) 'int)))
(Assert (zerop (coerce-number (factorial 100) 'int)))
(Assert (let ((more-than-mpf (1+ most-positive-fixnum)))
- (equal (coerce-number more-than-mpf 'float)
- (1+ (coerce-number most-positive-fixnum 'float))))))
+ (equal (coerce-number more-than-mpf 'float)
+ (1+ (coerce-number most-positive-fixnum 'float))))))
(when (featurep 'bigq)
(Assert (bigqp (coerce-number 0 'bigq)))
(Assert (bigqp (coerce-number 1 'bigq)))
(Assert (and (bigqp 3/2)
- (bigqp (coerce-number 3/2 'bigq))))
+ (bigqp (coerce-number 3/2 'bigq))))
(Assert (bigqp (coerce-number 1.5 'bigq)))
(Assert (intp (coerce-number 3/2 'int)))
(Assert (bigzp (coerce-number 3/2 'bigz)))
(Assert (bigzp (denominator 3/2)))))
(when (and (featurep 'bigg)
- (featurep 'bigc))
+ (featurep 'bigc))
(Assert (biggp (coerce-number 1.0+2.0i 'bigg)))
(Assert (bigcp (coerce-number 1+2i 'bigc))))
;;-----------------------------------------------------
(when (featurep 'bigz)
(let ((num1 2)
- (num2 2.0))
+ (num2 2.0))
;; this test should reveal re-canonicalisation
(eval `(Assert (intp (+ ,num1 (coerce-number ,num1 'bigz)))))
(eval `(Assert (intp (* ,num1 (coerce-number ,num1 'bigz)))))
;;-----------------------------------------------------
(when (featurep 'bigg)
(let ((read-real-as 'bigfr)
- (default-real-precision 128))
+ (default-real-precision 128))
;; testing bigg selector
(Assert-Not-Equal (real-part (read "2+3i")) 2)
(Assert-Equal (make-bigg 1.0 2.0) (read "1+2i"))
(Assert-Equal (make-bigg 1 2) (read "1+2i"))
(Assert (and (= (real-part (make-bigg 1.0 2.0))
- (real-part (read "1+2i")))
- (= (imaginary-part (make-bigg 1.0 2.0))
- (imaginary-part (read "1+2i")))))
+ (real-part (read "1+2i")))
+ (= (imaginary-part (make-bigg 1.0 2.0))
+ (imaginary-part (read "1+2i")))))
(Assert (and (= (real-part (make-bigg 1 2))
- (real-part (read "1+2i")))
- (= (imaginary-part (make-bigg 1 2))
- (imaginary-part (read "1+2i")))))))
+ (real-part (read "1+2i")))
+ (= (imaginary-part (make-bigg 1 2))
+ (imaginary-part (read "1+2i")))))))
(when (featurep 'bigc)
(let ((read-real-as 'bigfr)
- (default-real-precision 128))
+ (default-real-precision 128))
;; testing bigc selector
(Assert-Equal (real-part (read "2.3+3.2i"))
- (read "2.3"))
+ (read "2.3"))
(Assert-Equal (imaginary-part (read "2.3+3.2i"))
- (read "3.2"))
+ (read "3.2"))
;; use numerical equality
(Assert (= (real-part (read "2.3+3.2i"))
- (read "2.3")))
+ (read "2.3")))
(Assert (= (imaginary-part (read "2.3+3.2i"))
- (read "3.2")))
+ (read "3.2")))
;; testing bigc constructor
(Assert-Not-Equal (real-part (make-bigc 1 2)) 1)
(Assert-Equal (make-bigc 1.0 2.0) (read "1.0+2.0i"))
(Assert-Equal (make-bigc 1 2) (read "1.0+2.0i"))
(Assert (and (= (real-part (make-bigc 1.0 2.0))
- (real-part (read "1.0+2.0i")))
- (= (imaginary-part (make-bigc 1.0 2.0))
- (imaginary-part (read "1.0+2.0i")))))
+ (real-part (read "1.0+2.0i")))
+ (= (imaginary-part (make-bigc 1.0 2.0))
+ (imaginary-part (read "1.0+2.0i")))))
(Assert (and (= (real-part (make-bigc 1 2))
- (real-part (read "1.0+2.0i")))
- (= (imaginary-part (make-bigc 1 2))
- (imaginary-part (read "1.0+2.0i")))))))
+ (real-part (read "1.0+2.0i")))
+ (= (imaginary-part (make-bigc 1 2))
+ (imaginary-part (read "1.0+2.0i")))))))
;; floats
(let ((forms
'(1.0 1.00000 0.5 0.005 5.000005 4.0625 8.03125
- 9876.54321 10000.00001 12004.40021
- 1.5e+10 1.125e+11 1.0703125e+12
- 1.1e+15 1.2e+16 1.4e+20 1.45e+24
- 1.52e+28 1.55e+30 1.52105432e+31 1.5445633221e+32
- 1.7777777777777e+33 1.7777777777777776e+33
- 1.8999999999999e+33 1.999989999999999e+33
- 1.99999999e+35 1.9999999999e+36 1.999999999999e+37
- 1.99999999999999e+38 1.999999999999999e+39
- 1.9999999999999999e+40 2.000000000000000000e+40
- 2.000000000000001e+42 2.000000000000009e+44
- 2.002000200002000002000000e+48
- 2.000000200000200002000200e+50
- 200000020000020000200020.0e+50
- 12345555555555555555.999999999e+60
- 12344444444444444444.999999999e+60
- 1234545454545454545454545454545.000
- 123454545454545454545454545454545454545454545.000
- 4444444444444.55555555555e+100
- 5555555555555.55555555555e+102
- 5555555555555.44444444444e+104
- 5555555555555.99999999998e+106
- 50505050505050505050505.0e+200
- 1e+300 1e+301 1e+302 -1e+300 -1e+301 -1e+302
- 1e+304 -1e+304 1e+305 -1e+305 1e+306 -1e+306
- 1e+307 2e+307 8e+307 -8e+307
- 1e+308 -1e+308 8e+308 -8e+308
- 1e+309 -1e+309 -8e+309 8e+309
- ;; we should be outta range of double floats
- 1.00e+310 2.50e+310 2.55e+310
- 2.125e+312 2.0004500045e+313 1.2e+314 1.2e+320
- 1.22229e+320 100e+320 101e+321 102e+322
- ;; we're still alive?
- most-positive-float most-negative-float
- ;; the following two may not work correctly if the number
- ;; distribution has many subnormal numbers
- ;;(1+ most-positive-float) (1- most-negative-float)
- ;;(1- most-positive-float) (1+ most-negative-float)
- 1.0e+340 1.0e+350 1.0e+380 1.0e+400
- 1.2e+300 1.2e+310 1.2e+320 1.2e+400
- 1.2e+2000 1.2e+3000 1.2e+4000 1.2e+5000))
+ 9876.54321 10000.00001 12004.40021
+ 1.5e+10 1.125e+11 1.0703125e+12
+ 1.1e+15 1.2e+16 1.4e+20 1.45e+24
+ 1.52e+28 1.55e+30 1.52105432e+31 1.5445633221e+32
+ 1.7777777777777e+33 1.7777777777777776e+33
+ 1.8999999999999e+33 1.999989999999999e+33
+ 1.99999999e+35 1.9999999999e+36 1.999999999999e+37
+ 1.99999999999999e+38 1.999999999999999e+39
+ 1.9999999999999999e+40 2.000000000000000000e+40
+ 2.000000000000001e+42 2.000000000000009e+44
+ 2.002000200002000002000000e+48
+ 2.000000200000200002000200e+50
+ 200000020000020000200020.0e+50
+ 12345555555555555555.999999999e+60
+ 12344444444444444444.999999999e+60
+ 1234545454545454545454545454545.000
+ 123454545454545454545454545454545454545454545.000
+ 4444444444444.55555555555e+100
+ 5555555555555.55555555555e+102
+ 5555555555555.44444444444e+104
+ 5555555555555.99999999998e+106
+ 50505050505050505050505.0e+200
+ 1e+300 1e+301 1e+302 -1e+300 -1e+301 -1e+302
+ 1e+304 -1e+304 1e+305 -1e+305 1e+306 -1e+306
+ 1e+307 2e+307 8e+307 -8e+307
+ 1e+308 -1e+308 8e+308 -8e+308
+ 1e+309 -1e+309 -8e+309 8e+309
+ ;; we should be outta range of double floats
+ 1.00e+310 2.50e+310 2.55e+310
+ 2.125e+312 2.0004500045e+313 1.2e+314 1.2e+320
+ 1.22229e+320 100e+320 101e+321 102e+322
+ ;; we're still alive?
+ most-positive-float most-negative-float
+ ;; the following two may not work correctly if the number
+ ;; distribution has many subnormal numbers
+ ;;(1+ most-positive-float) (1- most-negative-float)
+ ;;(1- most-positive-float) (1+ most-negative-float)
+ 1.0e+340 1.0e+350 1.0e+380 1.0e+400
+ 1.2e+300 1.2e+310 1.2e+320 1.2e+400
+ 1.2e+2000 1.2e+3000 1.2e+4000 1.2e+5000))
(failures
- ;; known errors (due to precision issues, not SXE's fault)
- '(1e-300 1e-301 1e-302 1e-303 1e-304 1e-305 1e-306
- 1e-307 1e-308 1e-309
- 2.5e-310 2.55e-311 2.55e-312
- 1.2e-320 1.201e-320 1.25e-320
- 1.22229e-320 100e-306 100e-307 100e-308 100e-309
- 100e-310 100e-311 100e-312 100e-313 100e-314 100e-315
- 100e-316 100e-317 100e-318 100e-319 100e-320 100e-321
- 100e-322 100e-323 100e-324 100e-325 100e-326 100e-327
- 100e-328 100e-329 100e-330 1.2e-330 1.25e-330
- 0.5e-306 0.5e-307 0.5e-308 0.5e-309 0.5e-310 0.5e-311
- 0.5e-312 0.5e-313 0.5e-314 0.5e-315 0.5e-316 0.5e-317
- 0.5e-318 0.5e-319 0.5e-320 0.5e-321 0.5e-322 0.5e-323)))
+ ;; known errors (due to precision issues, not SXE's fault)
+ '(1e-300 1e-301 1e-302 1e-303 1e-304 1e-305 1e-306
+ 1e-307 1e-308 1e-309
+ 2.5e-310 2.55e-311 2.55e-312
+ 1.2e-320 1.201e-320 1.25e-320
+ 1.22229e-320 100e-306 100e-307 100e-308 100e-309
+ 100e-310 100e-311 100e-312 100e-313 100e-314 100e-315
+ 100e-316 100e-317 100e-318 100e-319 100e-320 100e-321
+ 100e-322 100e-323 100e-324 100e-325 100e-326 100e-327
+ 100e-328 100e-329 100e-330 1.2e-330 1.25e-330
+ 0.5e-306 0.5e-307 0.5e-308 0.5e-309 0.5e-310 0.5e-311
+ 0.5e-312 0.5e-313 0.5e-314 0.5e-315 0.5e-316 0.5e-317
+ 0.5e-318 0.5e-319 0.5e-320 0.5e-321 0.5e-322 0.5e-323)))
(mapc-internal
#'(lambda (str)
(unless (or (infinityp (eval str)) (zerop (eval str)))
- (eval `(Assert (= (read (format "%f" ,str)) ,str)))
- (eval `(Assert (eql (read (format "%f" ,str)) ,str)))))
+ (eval `(Assert (= (read (format "%f" ,str)) ,str)))
+ (eval `(Assert (eql (read (format "%f" ,str)) ,str)))))
forms)
(mapc-internal
#'(lambda (str)
(unless (or (infinityp (eval str)) (zerop (eval str)))
- (eval `(Assert (not (= (read (format "%f" ,str)) ,str))))
- (eval `(Assert (not (eql (read (format "%f" ,str)) ,str))))))
+ (eval `(Assert (not (= (read (format "%f" ,str)) ,str))))
+ (eval `(Assert (not (eql (read (format "%f" ,str)) ,str))))))
failures))
;; now testing bigz formatting
(when (featurep 'bigz)
(let ((forms
- '((("%Z" 2) . "2")
- (("%2Z" 2) . " 2")
- (("%2Z" 200) . "200")
- (("%+Z" 2) . "+2")
- (("%+4Z" 2) . " +2")
- (("% Z" 2) . " 2")
- (("%Z" -2) . "-2")
- (("% Z" -2) . "-2")
- (("%+Z" -2) . "-2")
- (("%-4Z" 2) . "2 ")
- (("%.2Z" 2) . "02")
- (("%4.2Z" 2) . " 02")
- (("%04.2Z" 2) . " 02")
- (("%-4.2Z" 2) . "02 ")
- (("%0-4.2Z" 2) . "02 ")
- (("%Z" (factorial 20)) .
- "2432902008176640000")
- (("%40Z" (factorial 20)) .
- " 2432902008176640000")
- (("%-40Z" (factorial 20)) .
- "2432902008176640000 ")
- (("%.40Z" (factorial 20)) .
- "0000000000000000000002432902008176640000")
- (("%040Z" (factorial 20)) .
- "0000000000000000000002432902008176640000")
- (("%.8Z" (factorial 20)) .
- "2432902008176640000")
- (("%08Z" (factorial 20)) .
- "2432902008176640000")
- (("%24.8Z" (factorial 20)) .
- " 2432902008176640000")
- (("%36.28Z" (factorial 20)) .
- " 0000000002432902008176640000")
- (("%036.28d" (factorial 20)) .
- " 0000000002432902008176640000")
- (("%0-36.28d" (factorial 20)) .
- "0000000002432902008176640000 ")
-
- ;; now the same with the %d specifier
- (("%d" 2) . "2")
- (("%2d" 2) . " 2")
- (("%2d" 200) . "200")
- (("%+d" 2) . "+2")
- (("%+4d" 2) . " +2")
- (("% d" 2) . " 2")
- (("%d" -2) . "-2")
- (("% d" -2) . "-2")
- (("%+d" -2) . "-2")
- (("%-4d" 2) . "2 ")
- (("%.2d" 2) . "02")
- (("%4.2d" 2) . " 02")
- (("%04.2d" 2) . " 02")
- (("%-4.2d" 2) . "02 ")
- (("%0-4.2d" 2) . "02 ")
- (("%d" (factorial 20)) . "2432902008176640000")
- (("%40d" (factorial 20)) .
- " 2432902008176640000")
- (("%-40d" (factorial 20)) .
- "2432902008176640000 ")
- (("%.40d" (factorial 20)) .
- "0000000000000000000002432902008176640000")
- (("%040d" (factorial 20)) .
- "0000000000000000000002432902008176640000")
- (("%.8d" (factorial 20)) . "2432902008176640000")
- (("%24.8d" (factorial 20)) . " 2432902008176640000")
- (("%36.28d" (factorial 20)) .
- " 0000000002432902008176640000")
- (("%036.28d" (factorial 20)) .
- " 0000000002432902008176640000")
- (("%0-36.28d" (factorial 20)) .
- "0000000002432902008176640000 ")
-
- ;; testing base converters on big ints
- ;; moved to format-tests
+ '((("%Z" 2) . "2")
+ (("%2Z" 2) . " 2")
+ (("%2Z" 200) . "200")
+ (("%+Z" 2) . "+2")
+ (("%+4Z" 2) . " +2")
+ (("% Z" 2) . " 2")
+ (("%Z" -2) . "-2")
+ (("% Z" -2) . "-2")
+ (("%+Z" -2) . "-2")
+ (("%-4Z" 2) . "2 ")
+ (("%.2Z" 2) . "02")
+ (("%4.2Z" 2) . " 02")
+ (("%04.2Z" 2) . " 02")
+ (("%-4.2Z" 2) . "02 ")
+ (("%0-4.2Z" 2) . "02 ")
+ (("%Z" (factorial 20)) .
+ "2432902008176640000")
+ (("%40Z" (factorial 20)) .
+ " 2432902008176640000")
+ (("%-40Z" (factorial 20)) .
+ "2432902008176640000 ")
+ (("%.40Z" (factorial 20)) .
+ "0000000000000000000002432902008176640000")
+ (("%040Z" (factorial 20)) .
+ "0000000000000000000002432902008176640000")
+ (("%.8Z" (factorial 20)) .
+ "2432902008176640000")
+ (("%08Z" (factorial 20)) .
+ "2432902008176640000")
+ (("%24.8Z" (factorial 20)) .
+ " 2432902008176640000")
+ (("%36.28Z" (factorial 20)) .
+ " 0000000002432902008176640000")
+ (("%036.28d" (factorial 20)) .
+ " 0000000002432902008176640000")
+ (("%0-36.28d" (factorial 20)) .
+ "0000000002432902008176640000 ")
+
+ ;; now the same with the %d specifier
+ (("%d" 2) . "2")
+ (("%2d" 2) . " 2")
+ (("%2d" 200) . "200")
+ (("%+d" 2) . "+2")
+ (("%+4d" 2) . " +2")
+ (("% d" 2) . " 2")
+ (("%d" -2) . "-2")
+ (("% d" -2) . "-2")
+ (("%+d" -2) . "-2")
+ (("%-4d" 2) . "2 ")
+ (("%.2d" 2) . "02")
+ (("%4.2d" 2) . " 02")
+ (("%04.2d" 2) . " 02")
+ (("%-4.2d" 2) . "02 ")
+ (("%0-4.2d" 2) . "02 ")
+ (("%d" (factorial 20)) . "2432902008176640000")
+ (("%40d" (factorial 20)) .
+ " 2432902008176640000")
+ (("%-40d" (factorial 20)) .
+ "2432902008176640000 ")
+ (("%.40d" (factorial 20)) .
+ "0000000000000000000002432902008176640000")
+ (("%040d" (factorial 20)) .
+ "0000000000000000000002432902008176640000")
+ (("%.8d" (factorial 20)) . "2432902008176640000")
+ (("%24.8d" (factorial 20)) . " 2432902008176640000")
+ (("%36.28d" (factorial 20)) .
+ " 0000000002432902008176640000")
+ (("%036.28d" (factorial 20)) .
+ " 0000000002432902008176640000")
+ (("%0-36.28d" (factorial 20)) .
+ "0000000002432902008176640000 ")
+
+ ;; testing base converters on big ints
+ ;; moved to format-tests
)))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms)))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms)))
;; now testing bigq formatting
(when (featurep 'bigq)
(let ((forms
- '((("%Q" 2) . "2")
- (("%2Q" 2) . " 2")
- (("%2Q" 200) . "200")
- (("%+Q" 2) . "+2")
- (("% Q" 2) . " 2")
- (("% +Q" 2) . "+2")
- (("%+ Q" 2) . "+2")
- (("%Q" -2) . "-2")
- (("% Q" -2) . "-2")
- (("%+Q" -2) . "-2")
- (("% +Q" -2) . "-2")
- (("%+ Q" -2) . "-2")
- (("%-4Q" 2) . "2 ")
- (("%.2Q" 2) . "2")
- (("%4.2Q" 2) . " 2")
- (("%-4.2Q" 2) . "2 ")
-
- ;; testing with proper fractions
- (("%Q" 2/3) . "2/3")
- (("%5Q" 2/3) . " 2/3")
- (("%5.5Q" 2/3) . " 2/3")
- (("%+Q" 2/3) . "+2/3")
- (("% Q" 2/3) . " 2/3")
- (("% +Q" 2/3) . "+2/3")
- (("%+ Q" 2/3) . "+2/3")
- (("%Q" (float 1.5)) . "3/2")
- (("%Q" (float 0.66666)) . "3002369727582815/4503599627370496")
- (("%-10Q" 2/3) . "2/3 ")
-
- ;; testing coercion to Z
- (("%d" 4/3) . "1")
- (("%Z" 2/3) . "0"))))
+ '((("%Q" 2) . "2")
+ (("%2Q" 2) . " 2")
+ (("%2Q" 200) . "200")
+ (("%+Q" 2) . "+2")
+ (("% Q" 2) . " 2")
+ (("% +Q" 2) . "+2")
+ (("%+ Q" 2) . "+2")
+ (("%Q" -2) . "-2")
+ (("% Q" -2) . "-2")
+ (("%+Q" -2) . "-2")
+ (("% +Q" -2) . "-2")
+ (("%+ Q" -2) . "-2")
+ (("%-4Q" 2) . "2 ")
+ (("%.2Q" 2) . "2")
+ (("%4.2Q" 2) . " 2")
+ (("%-4.2Q" 2) . "2 ")
+
+ ;; testing with proper fractions
+ (("%Q" 2/3) . "2/3")
+ (("%5Q" 2/3) . " 2/3")
+ (("%5.5Q" 2/3) . " 2/3")
+ (("%+Q" 2/3) . "+2/3")
+ (("% Q" 2/3) . " 2/3")
+ (("% +Q" 2/3) . "+2/3")
+ (("%+ Q" 2/3) . "+2/3")
+ (("%Q" (float 1.5)) . "3/2")
+ (("%Q" (float 0.66666)) . "3002369727582815/4503599627370496")
+ (("%-10Q" 2/3) . "2/3 ")
+
+ ;; testing coercion to Z
+ (("%d" 4/3) . "1")
+ (("%Z" 2/3) . "0"))))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms)))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms)))
(when (featurep 'bigfr)
(let ((forms
- '((("%f" (exp 1)) . "2.718282")
- (("%2.2f" (exp 1)) . "2.72")
- ;; this test uses a wrong output string deliberately
- ;; it's wrong because the precision of IEEE-754 doubles is
- ;; not enough to have 20 correct digits in the fractional part
- ;; however, since we _can_ have long doubles now, this test
- ;; is no longer feasible since lisp should know a shit about
- ;; the internal representation of fpfloats. -hroptatyr
- ;;(("%2.20f" (exp 1)) . "2.71828182845904509080")
-
- ;; now testing with %F
- (("%F" (exp 1)) . "2.718281828459045235360287471352662497759")
- (("%2.2F" (exp 1)) . "2.71")
- (("%+2.2F" (exp 1)) . "+2.71")
- (("%10.0F" (exp 1)) . " 2")
- (("%10.1F" (exp 1)) . " 2.7")
- (("%12.12F" (exp 1)) . "2.718281828459")
- (("%30.12F" (exp 1)) . " 2.718281828459")
- (("%5.5F" (exp 13)) . "442413.39200")
- (("%F" (/ (exp 1))) .
- "0.3678794411714423215955237701614608674462")
- (("%2.2F" (/ (exp 1))) . "0.36")
- (("%3.3F" (/ (exp 1))) . "0.367")
- (("%.5F" (bigfr 1)) . "1.00000")
-
- (("%.4F" (bigfr 23213231 25)) . "23213231.0000")
- ;; stupid assumption
- ;;(("%.4F" (bigfr 23213231 8)) . "23200000.0000")
- (("%Z" (bigfr 23213231 25)) . "23213231")
- (("%Z" (bigfr 23213231 8)) . "23199744")
-
- (("%+.4f" 2) . "+2.0000")
- (("%+.4F" 2) . "+2.0000")
- (("% .4F" 2) . " 2.0000")
- (("%+10.4F" 2) . " +2.0000")))
- (default-real-precision 128))
+ '((("%f" (exp 1)) . "2.718282")
+ (("%2.2f" (exp 1)) . "2.72")
+ ;; this test uses a wrong output string deliberately
+ ;; it's wrong because the precision of IEEE-754 doubles is
+ ;; not enough to have 20 correct digits in the fractional part
+ ;; however, since we _can_ have long doubles now, this test
+ ;; is no longer feasible since lisp should know a shit about
+ ;; the internal representation of fpfloats. -hroptatyr
+ ;;(("%2.20f" (exp 1)) . "2.71828182845904509080")
+
+ ;; now testing with %F
+ (("%F" (exp 1)) . "2.718281828459045235360287471352662497759")
+ (("%2.2F" (exp 1)) . "2.71")
+ (("%+2.2F" (exp 1)) . "+2.71")
+ (("%10.0F" (exp 1)) . " 2")
+ (("%10.1F" (exp 1)) . " 2.7")
+ (("%12.12F" (exp 1)) . "2.718281828459")
+ (("%30.12F" (exp 1)) . " 2.718281828459")
+ (("%5.5F" (exp 13)) . "442413.39200")
+ (("%F" (/ (exp 1))) .
+ "0.3678794411714423215955237701614608674462")
+ (("%2.2F" (/ (exp 1))) . "0.36")
+ (("%3.3F" (/ (exp 1))) . "0.367")
+ (("%.5F" (bigfr 1)) . "1.00000")
+
+ (("%.4F" (bigfr 23213231 25)) . "23213231.0000")
+ ;; stupid assumption
+ ;;(("%.4F" (bigfr 23213231 8)) . "23200000.0000")
+ (("%Z" (bigfr 23213231 25)) . "23213231")
+ (("%Z" (bigfr 23213231 8)) . "23199744")
+
+ (("%+.4f" 2) . "+2.0000")
+ (("%+.4F" 2) . "+2.0000")
+ (("% .4F" 2) . " 2.0000")
+ (("%+10.4F" 2) . " +2.0000")))
+ (default-real-precision 128))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms)))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms)))
(when (featurep 'bigg)
(let ((forms
- '((("%B" 2+i) . "2+1i")
- (("%+B" 2+i) . "+2+1i")
- (("% B" 2+i) . " 2+1i")
- (("%B" 2+i) .
- (format "%Z%+Zi" (real-part 2+i) (imaginary-part 2+i)))
- (("%B" 1) . "1+0i")
- (("%+10.4B" 1.2) . " +0001 +0000i")
- (("%-10.4B" 0+2i) . "0000 +0002 i"))))
+ '((("%B" 2+i) . "2+1i")
+ (("%+B" 2+i) . "+2+1i")
+ (("% B" 2+i) . " 2+1i")
+ (("%B" 2+i) .
+ (format "%Z%+Zi" (real-part 2+i) (imaginary-part 2+i)))
+ (("%B" 1) . "1+0i")
+ (("%+10.4B" 1.2) . " +0001 +0000i")
+ (("%-10.4B" 0+2i) . "0000 +0002 i"))))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms))
;; Gaussian numbers shall not be coerced to comparables
(Check-Error domain-error (format "%d" 1+i))
(when (featurep 'bigc)
(let ((forms
- '((("%.2C" 2+i) . "2.00+1.00i")
- (("%+.2C" 2+i) . "+2.00+1.00i")
- (("% .2C" 2+i) . " 2.00+1.00i")
- (("%.2C" 2+i) .
- (format "%.2F%+.2Fi" (real-part 2+i) (imaginary-part 2+i)))
- (("%.2C" 1) . "1.00+0.00i")
- (("%+10.4C" 1.5) . " +1.5000 +0.0000i")
- (("%-10.4C" 0+2i) . "0.0000 +2.0000 i"))))
+ '((("%.2C" 2+i) . "2.00+1.00i")
+ (("%+.2C" 2+i) . "+2.00+1.00i")
+ (("% .2C" 2+i) . " 2.00+1.00i")
+ (("%.2C" 2+i) .
+ (format "%.2F%+.2Fi" (real-part 2+i) (imaginary-part 2+i)))
+ (("%.2C" 1) . "1.00+0.00i")
+ (("%+10.4C" 1.5) . " +1.5000 +0.0000i")
+ (("%-10.4C" 0+2i) . "0.0000 +2.0000 i"))))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms))
;; complex numbers shall not be coerced to comparables
(Check-Error domain-error (format "%d" (sqrt -2)))
(when (featurep 'bigz)
;;; addition
(let ((sums '((1 2 3)
- (12332112344321 10000000000000 22332112344321)
- (12332112344321 1 12332112344322)
- (1 12332112344321 12332112344322)
- (10101010101010 1010101010101 11111111111111)
+ (12332112344321 10000000000000 22332112344321)
+ (12332112344321 1 12332112344322)
+ (1 12332112344321 12332112344322)
+ (10101010101010 1010101010101 11111111111111)
(-10101010101010 10101010101010 0)))
- (prods '((2 3 6)
- (1002004002001 402010204 402815833253238418204)
+ (prods '((2 3 6)
+ (1002004002001 402010204 402815833253238418204)
(-1002004002001 402010204 -402815833253238418204)))
(pows-!clslash
'((2 2 4)
(32 32 1461501637330902918203684832716283019655932542976)
(32 -32 1/1461501637330902918203684832716283019655932542976)))))
(mapc #'(lambda (sum)
- (eval `(Assert (= (+ ,(car sum) ,(cadr sum)) ,(caddr sum))))
- (eval `(Assert (= (- ,(caddr sum) ,(cadr sum)) ,(car sum))))
+ (eval `(Assert (= (+ ,(car sum) ,(cadr sum)) ,(caddr sum))))
+ (eval `(Assert (= (- ,(caddr sum) ,(cadr sum)) ,(car sum))))
(unless (bigzp (caddr sum))
(eval `(Assert (= (bigz (+ (bigz ,(car sum))
(bigz ,(cadr sum))))
;; | a + b | <= |a| + |b|
(eval `(Assert (<= (abs (+ ,(car sum) ,(cadr sum)))
(+ (abs ,(car sum)) (abs ,(cadr sum))))))))
- sums)
+ sums)
(mapc #'(lambda (prod)
- (eval `(Assert (= (* ,(car prod) ,(cadr prod)) ,(caddr prod))))
- (eval `(Assert (= (/ ,(caddr prod) ,(cadr prod)) ,(car prod))))
+ (eval `(Assert (= (* ,(car prod) ,(cadr prod)) ,(caddr prod))))
+ (eval `(Assert (= (/ ,(caddr prod) ,(cadr prod)) ,(car prod))))
(unless (bigzp (caddr prod))
(eval `(Assert (= (bigz (* (bigz ,(car prod))
(bigz ,(cadr prod))))
;; | a b | = |a| |b|
(eval `(Assert (= (abs (* ,(car prod) ,(cadr prod)))
(* (abs ,(car prod)) (abs ,(cadr prod))))))))
- prods)
+ prods)
(let ((common-lisp-slash nil))
(mapc #'(lambda (pow)
(eval `(Assert (= (^ ,(car pow) ,(cadr pow)) ,(caddr pow))))
(Assert (= 16 (% (coerce -1 'bigz) 17)))
(dotimes (j 30)
(let ((x (random))
- (y (- (random))))
+ (y (- (random))))
(eval `(Assert (= ,x (+ (% ,x 17) (* (/ ,x 17) 17)))))
(eval `(Assert (= (- ,x) (+ (% (- ,x) 17) (* (/ (- ,x) 17) 17)))))
(let ((z (+ (% y 17) (* (/ y 17) 17))))
- (if (bigzp y)
- (eval `(Assert (= ,y (- ,z 17))))
- (eval `(Assert (= ,y z)))))
+ (if (bigzp y)
+ (eval `(Assert (= ,y (- ,z 17))))
+ (eval `(Assert (= ,y z)))))
))
;;; remove-factor
(rf-1 `(factorial ,(1- i))))
;; check if (factorial i) == 1*2*...*i
(eval `(Assert (= ,rf (* ,i ,rf-1))))
- (if (featurep 'mpfr)
- (eval `(Assert (> (log ,rf) (- (* ,i (log ,i)) ,i))))
- (eval `(Assert (or (> (log ,rf) (- (* ,i (log ,i)) ,i))
- (eq +infinity (log ,rf))))))))
+ (if (featurep 'mpfr)
+ (eval `(Assert (> (log ,rf) (- (* ,i (log ,i)) ,i))))
+ (eval `(Assert (or (> (log ,rf) (- (* ,i (log ,i)) ,i))
+ (eq +infinity (log ,rf))))))))
'(60 100 120 150 200 300 500 1000))
(mapc #'(lambda (i)
(eval `(Check-Error wrong-type-argument (factorial ,i))))
(when (featurep 'bigq)
;;; addition
(let ((sums '((1/2 2/3 7/6)
- (1233211/2344321 10000/125897 25528682181/42163282991)
- (12332112344321/2 1 12332112344323/2)
- (1/3 12332112344321 36996337032964/3)
- (10101/10101 101589/101589 2/1)
+ (1233211/2344321 10000/125897 25528682181/42163282991)
+ (12332112344321/2 1 12332112344323/2)
+ (1/3 12332112344321 36996337032964/3)
+ (10101/10101 101589/101589 2/1)
(-100/99 -50/51 -3350/1683)))
- (prods '((2/3 3/4 1/2)
- (1002004/2001 5/2 2505010/2001)
+ (prods '((2/3 3/4 1/2)
+ (1002004/2001 5/2 2505010/2001)
(-1002004/2001 5/2 -2505010/2001)))
(pows '((2/3 2 4/9)
(-4/10 4 256/10000)
(7/3 -16 43046721/33232930569601))))
(mapc #'(lambda (sum)
- (eval `(Assert (= (+ ,(car sum) ,(cadr sum)) ,(caddr sum))))
- (eval `(Assert (= (- ,(caddr sum) ,(cadr sum)) ,(car sum))))
+ (eval `(Assert (= (+ ,(car sum) ,(cadr sum)) ,(caddr sum))))
+ (eval `(Assert (= (- ,(caddr sum) ,(cadr sum)) ,(car sum))))
(unless (bigqp (caddr sum))
(eval `(Assert (= (bigq (+ (bigq ,(car sum))
(bigq ,(cadr sum))))
;; | a + b | <= |a| + |b|
(eval `(Assert (<= (abs (+ ,(car sum) ,(cadr sum)))
(+ (abs ,(car sum)) (abs ,(cadr sum))))))))
- sums)
+ sums)
(mapc #'(lambda (prod)
- (eval `(Assert (= (* ,(car prod) ,(cadr prod)) ,(caddr prod))))
- (eval `(Assert (= (/ ,(caddr prod) ,(cadr prod)) ,(car prod))))
+ (eval `(Assert (= (* ,(car prod) ,(cadr prod)) ,(caddr prod))))
+ (eval `(Assert (= (/ ,(caddr prod) ,(cadr prod)) ,(car prod))))
(unless (bigqp (caddr prod))
(eval `(Assert (= (bigq (* (bigq ,(car prod))
(bigq ,(cadr prod))))
;; | a b | = |a| |b|
(eval `(Assert (= (abs (* ,(car prod) ,(cadr prod)))
(* (abs ,(car prod)) (abs ,(cadr prod))))))))
- prods)
+ prods)
(mapc #'(lambda (pow)
- (eval `(Assert (= (^ ,(car pow) ,(cadr pow)) ,(caddr pow))))
+ (eval `(Assert (= (^ ,(car pow) ,(cadr pow)) ,(caddr pow))))
(eval `(Assert (= (bigq (^ (bigq ,(car pow))
,(cadr pow)))
(bigq ,(caddr pow))))))
- pows)))
+ pows)))
;; ceil/floor stuff
(let ((one-arg-floor-list `((0 0)
- (1 1)
- (-1 -1)
- (7.4 7)
- (-7.4 -8))))
+ (1 1)
+ (-1 -1)
+ (7.4 7)
+ (-7.4 -8))))
(when (featurep 'bigz)
(setq one-arg-floor-list
- (append one-arg-floor-list
- `((,(factorial 20) ,(factorial 20))
- (,(- (factorial 20)) ,(- (factorial 20)))))))
+ (append one-arg-floor-list
+ `((,(factorial 20) ,(factorial 20))
+ (,(- (factorial 20)) ,(- (factorial 20)))))))
(when (featurep 'bigq)
(setq one-arg-floor-list
- (append one-arg-floor-list
- `((1/2 0)
- (-1/2 -1)
- (40/3 13)
- (-40/3 -14)))))
+ (append one-arg-floor-list
+ `((1/2 0)
+ (-1/2 -1)
+ (40/3 13)
+ (-40/3 -14)))))
(when (featurep 'bigf)
(setq one-arg-floor-list
- (append one-arg-floor-list
- `((,(bigf 7.4) 7)
- (,(bigf -7.4) -8)))))
+ (append one-arg-floor-list
+ `((,(bigf 7.4) 7)
+ (,(bigf -7.4) -8)))))
(when (featurep 'bigfr)
(setq one-arg-floor-list
- (append one-arg-floor-list
- `((,(bigfr 7.4) 7)
- (,(bigfr -7.4) -8)
- (,(sqrt 2) 1)
- (,(log 2) 0)
- (,(log 0.1) -3)))))
+ (append one-arg-floor-list
+ `((,(bigfr 7.4) 7)
+ (,(bigfr -7.4) -8)
+ (,(sqrt 2) 1)
+ (,(log 2) 0)
+ (,(log 0.1) -3)))))
(mapc #'(lambda (arg-list)
- (eval `(Assert (= (floor ,(car arg-list))
- ,(cadr arg-list)))))
- one-arg-floor-list))
+ (eval `(Assert (= (floor ,(car arg-list))
+ ,(cadr arg-list)))))
+ one-arg-floor-list))
(let ((two-arg-floor-list `((0 1 0)
- (1 2 0)
- (-1 2 -1)
- (7.4 2 3)
- (-7.4 2 -4))))
+ (1 2 0)
+ (-1 2 -1)
+ (7.4 2 3)
+ (-7.4 2 -4))))
(when (featurep 'bigz)
(setq two-arg-floor-list
- (append two-arg-floor-list
- `((,(factorial 20) 100001 24328776793998)
- (,(- (factorial 20)) 100001 -24328776793999)))))
+ (append two-arg-floor-list
+ `((,(factorial 20) 100001 24328776793998)
+ (,(- (factorial 20)) 100001 -24328776793999)))))
(when (featurep 'bigq)
(setq two-arg-floor-list
- (append two-arg-floor-list
- `((1/2 2 0)
- (1/2 1/2 1)
- (2 -1/2 -4)
- (3/2 -1/3 -5)
- (40/3 1/5 66)
- (40/3 -1/5 -67)))))
+ (append two-arg-floor-list
+ `((1/2 2 0)
+ (1/2 1/2 1)
+ (2 -1/2 -4)
+ (3/2 -1/3 -5)
+ (40/3 1/5 66)
+ (40/3 -1/5 -67)))))
(when (featurep 'bigf)
(setq two-arg-floor-list
- (append two-arg-floor-list
- `((,(bigf 1) 2 0)
- (2 ,(bigf 0.5) 4)
- (,(bigf 3880.5) 2 1940)
- (,(bigf -3880.5) 2 -1941)))))
+ (append two-arg-floor-list
+ `((,(bigf 1) 2 0)
+ (2 ,(bigf 0.5) 4)
+ (,(bigf 3880.5) 2 1940)
+ (,(bigf -3880.5) 2 -1941)))))
(when (featurep 'bigfr)
(setq two-arg-floor-list
- (append two-arg-floor-list
- `((,(bigfr 1) 2 0)
- (2 ,(bigfr 0.5) 4)
- (,(sqrt 12) 2 1)
- (1 (log 1.2) 5)
- (,(exp 37) 37 316733577643313)))))
+ (append two-arg-floor-list
+ `((,(bigfr 1) 2 0)
+ (2 ,(bigfr 0.5) 4)
+ (,(sqrt 12) 2 1)
+ (1 (log 1.2) 5)
+ (,(exp 37) 37 316733577643313)))))
(mapc #'(lambda (arg-list)
- (eval `(Assert (= (floor ,(car arg-list) ,(cadr arg-list))
- ,(caddr arg-list)))))
- two-arg-floor-list))
+ (eval `(Assert (= (floor ,(car arg-list) ,(cadr arg-list))
+ ,(caddr arg-list)))))
+ two-arg-floor-list))
;;-----------------------------------------------------
-;; Testing relations
+;; Testing relations
;;-----------------------------------------------------
(when (featurep 'ent)
(let ((ones)
- (twos))
+ (twos))
(and (featurep 'bigz)
- (add-to-list 'ones (coerce 1 'bigz))
- (add-to-list 'twos (coerce 2 'bigz)))
+ (add-to-list 'ones (coerce 1 'bigz))
+ (add-to-list 'twos (coerce 2 'bigz)))
(and (featurep 'bigq)
- (add-to-list 'ones 101/100)
- (add-to-list 'twos 202/100))
+ (add-to-list 'ones 101/100)
+ (add-to-list 'twos 202/100))
(and (featurep 'bigf)
- (add-to-list 'ones (coerce 1.01 'bigf))
- (add-to-list 'twos (coerce 2.02 'bigf)))
+ (add-to-list 'ones (coerce 1.01 'bigf))
+ (add-to-list 'twos (coerce 2.02 'bigf)))
(and (featurep 'bigfr)
- (add-to-list 'ones (coerce 1.01 'bigfr))
- (add-to-list 'twos (coerce 2.02 'bigfr)))
+ (add-to-list 'ones (coerce 1.01 'bigfr))
+ (add-to-list 'twos (coerce 2.02 'bigfr)))
(dolist (one ones)
(dolist (two twos)
- (eval `(Assert (< ,one ,two)))
- (eval `(Assert (<= ,one ,two)))
- (eval `(Assert (<= ,two ,two)))
- (eval `(Assert (> ,two ,one)))
- (eval `(Assert (>= ,two ,one)))
- (eval `(Assert (>= ,two ,two)))
- (eval `(Assert (/= ,one ,two)))
- (eval `(Assert (not (/= ,two ,two))))
- (eval `(Assert (not (< ,one ,one))))
- (eval `(Assert (not (> ,one ,one))))
- (eval `(Assert (<= ,one ,one ,two ,two)))
- (eval `(Assert (not (< ,one ,one ,two ,two))))
- (eval `(Assert (>= ,two ,two ,one ,one)))
- (eval `(Assert (not (> ,two ,two ,one ,one))))
- (eval `(Assert (= ,one ,one ,one)))
- (eval `(Assert (not (= ,one ,one ,one ,two))))
- (eval `(Assert (not (/= ,one ,two ,one))))
- ))
+ (eval `(Assert (< ,one ,two)))
+ (eval `(Assert (<= ,one ,two)))
+ (eval `(Assert (<= ,two ,two)))
+ (eval `(Assert (> ,two ,one)))
+ (eval `(Assert (>= ,two ,one)))
+ (eval `(Assert (>= ,two ,two)))
+ (eval `(Assert (/= ,one ,two)))
+ (eval `(Assert (not (/= ,two ,two))))
+ (eval `(Assert (not (< ,one ,one))))
+ (eval `(Assert (not (> ,one ,one))))
+ (eval `(Assert (<= ,one ,one ,two ,two)))
+ (eval `(Assert (not (< ,one ,one ,two ,two))))
+ (eval `(Assert (>= ,two ,two ,one ,one)))
+ (eval `(Assert (not (> ,two ,two ,one ,one))))
+ (eval `(Assert (= ,one ,one ,one)))
+ (eval `(Assert (not (= ,one ,one ,one ,two))))
+ (eval `(Assert (not (/= ,one ,two ,one))))
+ ))
(when (featurep 'bigc)
;; now check complexes, these are not comparable
(dolist (one ones)
- (eval `(Check-Error relation-error (< ,one 1+i)))
- (eval `(Check-Error relation-error (<= ,one 1+i)))
- (eval `(Check-Error relation-error (<= 1+i 1+i)))
- (eval `(Check-Error relation-error (> ,one 1+i)))
- (eval `(Check-Error relation-error (>= ,one 1+i)))
- (eval `(Check-Error relation-error (>= 1+i 1+i)))
- (eval `(Check-Error relation-error (not (/= ,one 1+i))))
- (eval `(Check-Error relation-error (= ,one 1+i)))
- ))))
+ (eval `(Check-Error relation-error (< ,one 1+i)))
+ (eval `(Check-Error relation-error (<= ,one 1+i)))
+ (eval `(Check-Error relation-error (<= 1+i 1+i)))
+ (eval `(Check-Error relation-error (> ,one 1+i)))
+ (eval `(Check-Error relation-error (>= ,one 1+i)))
+ (eval `(Check-Error relation-error (>= 1+i 1+i)))
+ (eval `(Check-Error relation-error (not (/= ,one 1+i))))
+ (eval `(Check-Error relation-error (= ,one 1+i)))
+ ))))
;;-----------------------------------------------------
;; Testing infinities
(funcall ASSERT-EQUAL+=-nc '(+ +infinity complex-infinity) 'not-a-number)
(funcall ASSERT-EQUAL+=-nc '(+ -infinity complex-infinity) 'not-a-number)
(funcall ASSERT-EQUAL+=
- '(+ complex-infinity complex-infinity) complex-infinity)
+ '(+ complex-infinity complex-infinity) complex-infinity)
(funcall ASSERT-EQUAL+=-nc '(+ 0 not-a-number) 'not-a-number)
(funcall ASSERT-EQUAL+=-nc '(+ 1 not-a-number) 'not-a-number)
(funcall ASSERT-EQUAL+=-nc '(^ +infinity -infinity) 'not-a-number)
(funcall ASSERT-EQUAL+=-nc '(^ -infinity -infinity) 'not-a-number)
(funcall ASSERT-EQUAL+= '(^ complex-infinity -infinity) 'complex-infinity)
-
+
(funcall ASSERT-EQUAL+= '(^ 0 complex-infinity) 'complex-infinity)
(funcall ASSERT-EQUAL+= '(^ 1 complex-infinity) 'complex-infinity)
(funcall ASSERT-EQUAL+= '(^ -1 complex-infinity) 'complex-infinity)
;; testing lifts
(let ((lift-types
(remove-if-not
- #'(lambda (type)
- (condition-case nil
- (coerce-number 0 type)
- (error nil)))
- '(int bigz integer bigq rational bigf bigfr float real
- bigc quatern))))
+ #'(lambda (type)
+ (condition-case nil
+ (coerce-number 0 type)
+ (error nil)))
+ '(int bigz integer bigq rational bigf bigfr float real
+ bigc quatern))))
(mapc-internal
#'(lambda (type)
(eval `(Assert (zerop (coerce-number 0 ',type))))
;; lifts are idempotent
(eval `(Assert-Equal
- (coerce-number 0 ',type)
- (coerce-number (coerce-number 0 ',type) ',type)))
+ (coerce-number 0 ',type)
+ (coerce-number (coerce-number 0 ',type) ',type)))
(eval `(Assert-Equal
- (coerce-number 1 ',type)
- (coerce-number (coerce-number 1 ',type) ',type)))
+ (coerce-number 1 ',type)
+ (coerce-number (coerce-number 1 ',type) ',type)))
(eval `(Assert (= (coerce-number 0 ',type)
- (coerce-number (coerce-number 0 ',type) ',type))))
+ (coerce-number (coerce-number 0 ',type) ',type))))
(eval `(Assert (= (coerce-number 1 ',type)
- (coerce-number (coerce-number 1 ',type) ',type))))
+ (coerce-number (coerce-number 1 ',type) ',type))))
;; lifts are homomorphic wrt negation (equal'ity needs not hold)
(eval `(Assert (= (coerce-number -1 ',type)
- (- (coerce-number 1 ',type)))))
+ (- (coerce-number 1 ',type)))))
;; infinity lifts
(eval `(Assert (indefinitep (coerce-number +infinity ',type))))
(eval `(Assert (= +infinity (coerce-number +infinity ',type))))
(eval `(Assert (= -infinity (coerce-number -infinity ',type))))
(if (comparablep (coerce-number 0 type))
- (eval `(Check-Error domain-error
- (coerce-number complex-infinity ',type)))
- (eval `(Assert (infinityp
- (coerce-number complex-infinity ',type))))
- (eval `(Assert (= complex-infinity
- (coerce-number complex-infinity ',type)))))
+ (eval `(Check-Error domain-error
+ (coerce-number complex-infinity ',type)))
+ (eval `(Assert (infinityp
+ (coerce-number complex-infinity ',type))))
+ (eval `(Assert (= complex-infinity
+ (coerce-number complex-infinity ',type)))))
(eval `(Check-Error domain-error
- (coerce-number not-a-number ',type))))
+ (coerce-number not-a-number ',type))))
lift-types))
;; testing string conversion
cosh sinh tanh sech csch coth
acosh asinh atanh
erf erfc log-gamma))
- (more-funs '(abs sqrt cbrt log log10 log2
+ (more-funs '(abs sqrt cbrt log log10 log2
ceiling truncate round
ffloor fceiling ftruncate fround
next-prime
(eval `(Check-Error wrong-type-argument (,fun ,val))))
vals))
'(;;logb
- logand logior logxor lognot)))
+ logand logior logxor lognot)))
(when (featurep 'bigz)
(bigcs (when (featurep 'bigc)
(list 2.3+1.22i (make-bigc (exp 1) (exp 1)) (bigc 0)))))
(mapc #'(lambda (cat)
- (mapc #'(lambda (num)
+ (mapc #'(lambda (num)
;; zeroes
- (eval `(Assert (zerop (zero ,num))))
+ (eval `(Assert (zerop (zero ,num))))
(when (comparablep num)
(eval `(Assert (= (+ (zero ,num) ,num) ,num)))
(eval `(Assert (= (* (zero ,num) ,num) (zero ,num)))))
(eval `(Assert
(equal (* (zero ,num) ,num) (zero ,num)))))
;; ones
- (eval `(Assert (onep (one ,num))))
- (eval `(Assert (zerop (1- (one ,num)))))
- (eval `(Assert (onep (1+ (zero ,num)))))
+ (eval `(Assert (onep (one ,num))))
+ (eval `(Assert (zerop (1- (one ,num)))))
+ (eval `(Assert (onep (1+ (zero ,num)))))
(when (comparablep num)
(eval `(Assert (= (* (one ,num) ,num) ,num)))
(eval `(Assert (= (zero ,num) (1- (one ,num))))))
(unless (comparablep num)
(eval `(Assert-Equal (* (one ,num) ,num) ,num))
(eval `(Assert-Equal (zero ,num) (1- (one ,num))))))
- (symbol-value cat)))
- '(ints bigzs bigqs floats bigfs bigfrs biggs bigcs)))
+ (symbol-value cat)))
+ '(ints bigzs bigqs floats bigfs bigfrs biggs bigcs)))
;;-----------------------------------------------------
(dotimes (i 1000 some)
(setq some
(or some (bigzp (random (factorial 20)))))))))
-
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(set-extent-properties e props)
(put e 'detachable nil)
(Assert (not (get e 'detachable)))
-
+
(Assert (not (extent-detached-p e)))
(delete-region 4 5)
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Synched up with: Not in FSF.
;;
;; floats
(let ((forms
'(1.0 1.00000 0.5 0.005 5.000005 4.0625 8.03125
- 9876.54321 10000.00001 12004.40021
- 1.5e+10 1.125e+11 1.0703125e+12
- 1.1e+15 1.2e+16 1.4e+20 1.45e+24
- 1.52e+28 1.55e+30 1.52105432e+31 1.5445633221e+32
- 1.7777777777777e+33 1.7777777777777776e+33
- 1.8999999999999e+33 1.999989999999999e+33
- 1.99999999e+35 1.9999999999e+36 1.999999999999e+37
- 1.99999999999999e+38 1.999999999999999e+39
- 1.9999999999999999e+40 2.000000000000000000e+40
- 2.000000000000001e+42 2.000000000000009e+44
- 2.002000200002000002000000e+48
- 2.000000200000200002000200e+50
- 200000020000020000200020.0e+50
- 12345555555555555555.999999999e+60
- 12344444444444444444.999999999e+60
- 1234545454545454545454545454545.000
- 123454545454545454545454545454545454545454545.000
- 4444444444444.55555555555e+100
- 5555555555555.55555555555e+102
- 5555555555555.44444444444e+104
- 5555555555555.99999999998e+106
- 50505050505050505050505.0e+200
- 1e+300 1e+301 1e+302 -1e+300 -1e+301 -1e+302
- 1e+304 -1e+304 1e+305 -1e+305 1e+306 -1e+306
- 1e+307 2e+307 8e+307 -8e+307
- 1e+308 -1e+308 8e+308 -8e+308
- 1e+309 -1e+309 -8e+309 8e+309
- ;; we should be outta range of double floats
- 1.00e+310 2.50e+310 2.55e+310
- 2.125e+312 2.0004500045e+313 1.2e+314 1.2e+320
- 1.22229e+320 100e+320 101e+321 102e+322
- ;; we're still alive?
- most-positive-float most-negative-float
- ;; the following two may not work correctly if the number
- ;; distribution has many subnormal numbers
- ;;(1+ most-positive-float) (1- most-negative-float)
- ;;(1- most-positive-float) (1+ most-negative-float)
- 1.0e+340 1.0e+350 1.0e+380 1.0e+400
- 1.2e+300 1.2e+310 1.2e+320 1.2e+400
- 1.2e+2000 1.2e+3000 1.2e+4000 1.2e+5000))
+ 9876.54321 10000.00001 12004.40021
+ 1.5e+10 1.125e+11 1.0703125e+12
+ 1.1e+15 1.2e+16 1.4e+20 1.45e+24
+ 1.52e+28 1.55e+30 1.52105432e+31 1.5445633221e+32
+ 1.7777777777777e+33 1.7777777777777776e+33
+ 1.8999999999999e+33 1.999989999999999e+33
+ 1.99999999e+35 1.9999999999e+36 1.999999999999e+37
+ 1.99999999999999e+38 1.999999999999999e+39
+ 1.9999999999999999e+40 2.000000000000000000e+40
+ 2.000000000000001e+42 2.000000000000009e+44
+ 2.002000200002000002000000e+48
+ 2.000000200000200002000200e+50
+ 200000020000020000200020.0e+50
+ 12345555555555555555.999999999e+60
+ 12344444444444444444.999999999e+60
+ 1234545454545454545454545454545.000
+ 123454545454545454545454545454545454545454545.000
+ 4444444444444.55555555555e+100
+ 5555555555555.55555555555e+102
+ 5555555555555.44444444444e+104
+ 5555555555555.99999999998e+106
+ 50505050505050505050505.0e+200
+ 1e+300 1e+301 1e+302 -1e+300 -1e+301 -1e+302
+ 1e+304 -1e+304 1e+305 -1e+305 1e+306 -1e+306
+ 1e+307 2e+307 8e+307 -8e+307
+ 1e+308 -1e+308 8e+308 -8e+308
+ 1e+309 -1e+309 -8e+309 8e+309
+ ;; we should be outta range of double floats
+ 1.00e+310 2.50e+310 2.55e+310
+ 2.125e+312 2.0004500045e+313 1.2e+314 1.2e+320
+ 1.22229e+320 100e+320 101e+321 102e+322
+ ;; we're still alive?
+ most-positive-float most-negative-float
+ ;; the following two may not work correctly if the number
+ ;; distribution has many subnormal numbers
+ ;;(1+ most-positive-float) (1- most-negative-float)
+ ;;(1- most-positive-float) (1+ most-negative-float)
+ 1.0e+340 1.0e+350 1.0e+380 1.0e+400
+ 1.2e+300 1.2e+310 1.2e+320 1.2e+400
+ 1.2e+2000 1.2e+3000 1.2e+4000 1.2e+5000))
(failures
- ;; known errors (due to precision issues, not SXE's fault)
- '(1e-300 1e-301 1e-302 1e-303 1e-304 1e-305 1e-306
- 1e-307 1e-308 1e-309
- 2.5e-310 2.55e-311 2.55e-312
- 1.2e-320 1.201e-320 1.25e-320
- 1.22229e-320 100e-306 100e-307 100e-308 100e-309
- 100e-310 100e-311 100e-312 100e-313 100e-314 100e-315
- 100e-316 100e-317 100e-318 100e-319 100e-320 100e-321
- 100e-322 100e-323 100e-324 100e-325 100e-326 100e-327
- 100e-328 100e-329 100e-330 1.2e-330 1.25e-330
- 0.5e-306 0.5e-307 0.5e-308 0.5e-309 0.5e-310 0.5e-311
- 0.5e-312 0.5e-313 0.5e-314 0.5e-315 0.5e-316 0.5e-317
- 0.5e-318 0.5e-319 0.5e-320 0.5e-321 0.5e-322 0.5e-323)))
+ ;; known errors (due to precision issues, not SXE's fault)
+ '(1e-300 1e-301 1e-302 1e-303 1e-304 1e-305 1e-306
+ 1e-307 1e-308 1e-309
+ 2.5e-310 2.55e-311 2.55e-312
+ 1.2e-320 1.201e-320 1.25e-320
+ 1.22229e-320 100e-306 100e-307 100e-308 100e-309
+ 100e-310 100e-311 100e-312 100e-313 100e-314 100e-315
+ 100e-316 100e-317 100e-318 100e-319 100e-320 100e-321
+ 100e-322 100e-323 100e-324 100e-325 100e-326 100e-327
+ 100e-328 100e-329 100e-330 1.2e-330 1.25e-330
+ 0.5e-306 0.5e-307 0.5e-308 0.5e-309 0.5e-310 0.5e-311
+ 0.5e-312 0.5e-313 0.5e-314 0.5e-315 0.5e-316 0.5e-317
+ 0.5e-318 0.5e-319 0.5e-320 0.5e-321 0.5e-322 0.5e-323)))
(mapc-internal
#'(lambda (str)
(unless (or (infinityp (eval str)) (zerop (eval str)))
- (eval `(Assert (= (read (format "%f" ,str)) ,str)))
- (eval `(Assert (eql (read (format "%f" ,str)) ,str)))))
+ (eval `(Assert (= (read (format "%f" ,str)) ,str)))
+ (eval `(Assert (eql (read (format "%f" ,str)) ,str)))))
forms)
(mapc-internal
#'(lambda (str)
(unless (or (infinityp (eval str)) (zerop (eval str)))
- (eval `(Assert (not (= (read (format "%f" ,str)) ,str))))
- (eval `(Assert (not (eql (read (format "%f" ,str)) ,str))))))
+ (eval `(Assert (not (= (read (format "%f" ,str)) ,str))))
+ (eval `(Assert (not (eql (read (format "%f" ,str)) ,str))))))
failures))
;; now testing bigz formatting
(when (featurep 'bigz)
(let ((forms
- '((("%Z" 2) . "2")
- (("%2Z" 2) . " 2")
- (("%2Z" 200) . "200")
- (("%+Z" 2) . "+2")
- (("%+4Z" 2) . " +2")
- (("% Z" 2) . " 2")
- (("%Z" -2) . "-2")
- (("% Z" -2) . "-2")
- (("%+Z" -2) . "-2")
- (("%-4Z" 2) . "2 ")
- (("%.2Z" 2) . "02")
- (("%4.2Z" 2) . " 02")
- (("%04.2Z" 2) . " 02")
- (("%-4.2Z" 2) . "02 ")
- (("%0-4.2Z" 2) . "02 ")
- (("%Z" (factorial 20)) .
- "2432902008176640000")
- (("%40Z" (factorial 20)) .
- " 2432902008176640000")
- (("%-40Z" (factorial 20)) .
- "2432902008176640000 ")
- (("%.40Z" (factorial 20)) .
- "0000000000000000000002432902008176640000")
- (("%040Z" (factorial 20)) .
- "0000000000000000000002432902008176640000")
- (("%.8Z" (factorial 20)) .
- "2432902008176640000")
- (("%08Z" (factorial 20)) .
- "2432902008176640000")
- (("%24.8Z" (factorial 20)) .
- " 2432902008176640000")
- (("%36.28Z" (factorial 20)) .
- " 0000000002432902008176640000")
- (("%036.28d" (factorial 20)) .
- " 0000000002432902008176640000")
- (("%0-36.28d" (factorial 20)) .
- "0000000002432902008176640000 ")
-
- ;; now the same with the %d specifier
- (("%d" 2) . "2")
- (("%2d" 2) . " 2")
- (("%2d" 200) . "200")
- (("%+d" 2) . "+2")
- (("%+4d" 2) . " +2")
- (("% d" 2) . " 2")
- (("%d" -2) . "-2")
- (("% d" -2) . "-2")
- (("%+d" -2) . "-2")
- (("%-4d" 2) . "2 ")
- (("%.2d" 2) . "02")
- (("%4.2d" 2) . " 02")
- (("%04.2d" 2) . " 02")
- (("%-4.2d" 2) . "02 ")
- (("%0-4.2d" 2) . "02 ")
- (("%d" (factorial 20)) . "2432902008176640000")
- (("%40d" (factorial 20)) .
- " 2432902008176640000")
- (("%-40d" (factorial 20)) .
- "2432902008176640000 ")
- (("%.40d" (factorial 20)) .
- "0000000000000000000002432902008176640000")
- (("%040d" (factorial 20)) .
- "0000000000000000000002432902008176640000")
- (("%.8d" (factorial 20)) . "2432902008176640000")
- (("%24.8d" (factorial 20)) . " 2432902008176640000")
- (("%36.28d" (factorial 20)) .
- " 0000000002432902008176640000")
- (("%036.28d" (factorial 20)) .
- " 0000000002432902008176640000")
- (("%0-36.28d" (factorial 20)) .
- "0000000002432902008176640000 ")
-
- ;; testing base converters on big ints
+ '((("%Z" 2) . "2")
+ (("%2Z" 2) . " 2")
+ (("%2Z" 200) . "200")
+ (("%+Z" 2) . "+2")
+ (("%+4Z" 2) . " +2")
+ (("% Z" 2) . " 2")
+ (("%Z" -2) . "-2")
+ (("% Z" -2) . "-2")
+ (("%+Z" -2) . "-2")
+ (("%-4Z" 2) . "2 ")
+ (("%.2Z" 2) . "02")
+ (("%4.2Z" 2) . " 02")
+ (("%04.2Z" 2) . " 02")
+ (("%-4.2Z" 2) . "02 ")
+ (("%0-4.2Z" 2) . "02 ")
+ (("%Z" (factorial 20)) .
+ "2432902008176640000")
+ (("%40Z" (factorial 20)) .
+ " 2432902008176640000")
+ (("%-40Z" (factorial 20)) .
+ "2432902008176640000 ")
+ (("%.40Z" (factorial 20)) .
+ "0000000000000000000002432902008176640000")
+ (("%040Z" (factorial 20)) .
+ "0000000000000000000002432902008176640000")
+ (("%.8Z" (factorial 20)) .
+ "2432902008176640000")
+ (("%08Z" (factorial 20)) .
+ "2432902008176640000")
+ (("%24.8Z" (factorial 20)) .
+ " 2432902008176640000")
+ (("%36.28Z" (factorial 20)) .
+ " 0000000002432902008176640000")
+ (("%036.28d" (factorial 20)) .
+ " 0000000002432902008176640000")
+ (("%0-36.28d" (factorial 20)) .
+ "0000000002432902008176640000 ")
+
+ ;; now the same with the %d specifier
+ (("%d" 2) . "2")
+ (("%2d" 2) . " 2")
+ (("%2d" 200) . "200")
+ (("%+d" 2) . "+2")
+ (("%+4d" 2) . " +2")
+ (("% d" 2) . " 2")
+ (("%d" -2) . "-2")
+ (("% d" -2) . "-2")
+ (("%+d" -2) . "-2")
+ (("%-4d" 2) . "2 ")
+ (("%.2d" 2) . "02")
+ (("%4.2d" 2) . " 02")
+ (("%04.2d" 2) . " 02")
+ (("%-4.2d" 2) . "02 ")
+ (("%0-4.2d" 2) . "02 ")
+ (("%d" (factorial 20)) . "2432902008176640000")
+ (("%40d" (factorial 20)) .
+ " 2432902008176640000")
+ (("%-40d" (factorial 20)) .
+ "2432902008176640000 ")
+ (("%.40d" (factorial 20)) .
+ "0000000000000000000002432902008176640000")
+ (("%040d" (factorial 20)) .
+ "0000000000000000000002432902008176640000")
+ (("%.8d" (factorial 20)) . "2432902008176640000")
+ (("%24.8d" (factorial 20)) . " 2432902008176640000")
+ (("%36.28d" (factorial 20)) .
+ " 0000000002432902008176640000")
+ (("%036.28d" (factorial 20)) .
+ " 0000000002432902008176640000")
+ (("%0-36.28d" (factorial 20)) .
+ "0000000002432902008176640000 ")
+
+ ;; testing base converters on big ints
;; oct
- (("%o" (factorial 20)) . "207033167620255000000")
- (("%+o" (factorial 20)) . "+207033167620255000000")
- (("% o" (factorial 20)) . " 207033167620255000000")
- (("% +o" (factorial 20)) . "+207033167620255000000")
- (("%+ o" (factorial 20)) . "+207033167620255000000")
- (("%#o" (factorial 20)) . "0o207033167620255000000")
- (("%#+o" (factorial 20)) . "+0o207033167620255000000")
- (("%# o" (factorial 20)) . " 0o207033167620255000000")
- (("%# +o" (factorial 20)) . "+0o207033167620255000000")
- (("%#+ o" (factorial 20)) . "+0o207033167620255000000")
- (("%o" (- (factorial 20))) . "-207033167620255000000")
- (("%+o" (- (factorial 20))) . "-207033167620255000000")
- (("% o" (- (factorial 20))) . "-207033167620255000000")
- (("% +o" (- (factorial 20))) . "-207033167620255000000")
- (("%+ o" (- (factorial 20))) . "-207033167620255000000")
- (("%#o" (- (factorial 20))) . "-0o207033167620255000000")
- (("%#+o" (- (factorial 20))) . "-0o207033167620255000000")
- (("%# o" (- (factorial 20))) . "-0o207033167620255000000")
- (("%# +o" (- (factorial 20))) . "-0o207033167620255000000")
- (("%#+ o" (- (factorial 20))) . "-0o207033167620255000000")
+ (("%o" (factorial 20)) . "207033167620255000000")
+ (("%+o" (factorial 20)) . "+207033167620255000000")
+ (("% o" (factorial 20)) . " 207033167620255000000")
+ (("% +o" (factorial 20)) . "+207033167620255000000")
+ (("%+ o" (factorial 20)) . "+207033167620255000000")
+ (("%#o" (factorial 20)) . "0o207033167620255000000")
+ (("%#+o" (factorial 20)) . "+0o207033167620255000000")
+ (("%# o" (factorial 20)) . " 0o207033167620255000000")
+ (("%# +o" (factorial 20)) . "+0o207033167620255000000")
+ (("%#+ o" (factorial 20)) . "+0o207033167620255000000")
+ (("%o" (- (factorial 20))) . "-207033167620255000000")
+ (("%+o" (- (factorial 20))) . "-207033167620255000000")
+ (("% o" (- (factorial 20))) . "-207033167620255000000")
+ (("% +o" (- (factorial 20))) . "-207033167620255000000")
+ (("%+ o" (- (factorial 20))) . "-207033167620255000000")
+ (("%#o" (- (factorial 20))) . "-0o207033167620255000000")
+ (("%#+o" (- (factorial 20))) . "-0o207033167620255000000")
+ (("%# o" (- (factorial 20))) . "-0o207033167620255000000")
+ (("%# +o" (- (factorial 20))) . "-0o207033167620255000000")
+ (("%#+ o" (- (factorial 20))) . "-0o207033167620255000000")
;; hex
- (("%x" (factorial 20)) . "21c3677c82b40000")
- (("%+x" (factorial 20)) . "+21c3677c82b40000")
- (("% x" (factorial 20)) . " 21c3677c82b40000")
- (("% +x" (factorial 20)) . "+21c3677c82b40000")
- (("%+ x" (factorial 20)) . "+21c3677c82b40000")
- (("%#x" (factorial 20)) . "0x21c3677c82b40000")
- (("%#+x" (factorial 20)) . "+0x21c3677c82b40000")
- (("%# x" (factorial 20)) . " 0x21c3677c82b40000")
- (("%# +x" (factorial 20)) . "+0x21c3677c82b40000")
- (("%#+ x" (factorial 20)) . "+0x21c3677c82b40000")
- (("%x" (- (factorial 20))) . "-21c3677c82b40000")
- (("%+x" (- (factorial 20))) . "-21c3677c82b40000")
- (("% x" (- (factorial 20))) . "-21c3677c82b40000")
- (("% +x" (- (factorial 20))) . "-21c3677c82b40000")
- (("%+ x" (- (factorial 20))) . "-21c3677c82b40000")
- (("%#x" (- (factorial 20))) . "-0x21c3677c82b40000")
- (("%#+x" (- (factorial 20))) . "-0x21c3677c82b40000")
- (("%# x" (- (factorial 20))) . "-0x21c3677c82b40000")
- (("%# +x" (- (factorial 20))) . "-0x21c3677c82b40000")
- (("%#+ x" (- (factorial 20))) . "-0x21c3677c82b40000")
- ;; test overflow
- (("%Z" (factorial 120)) . "6689502913449127057588118054090372586752746333138029810295671352301633557244962989366874165271984981308157637893214090552534408589408121859898481114389650005964960521256960000000000000000000000000000")
- (("%Z" (factorial 4000)) . "18288019515140650133147431755739190442173777107304392197064526954208959797973177364850370286870484107336443041569285571754672461861543557333942615617956996716745284831597317498818760937482804980419576512948720610558928129788097800620593429537705326740624453884285091743951756746144447362378722469436194575929579900114212973360658998073977714697261205048663725936337490404066097966637170254021348800944280342285355946649681316260163459743803577175903394733170076841764779082166891184529324230033414145497801832598218518406552257097392530024582738982919104406782168708871495603501905867399966298798534877747923179195791416504408054878974770308650707120878837624986576073340449414854578367383301715706358194127400849855604080473305196833482408079420964275187538889115296655522397723924887154624810659788321005620558369604778657904771918388054319251513981954296741688447246185021250402225010116433016818588036690180177691461779713104301640395708274734701186772756966064611023656528765138735704190876200697145804692125236821066805337175220605745377557452592208653939853278523841448314026548802309860391087939783218946129582647928430739985554883806198749831633640196211202756086016039171607744078776876219661603702759454887945247605749205543464095883664514960293873244842409803801480566600124415293789831496309554117113888561569494314926134470477513516416560102984058751906208865570183683850791317395702861350821464653600469443279077733978568711404244774089509216727922510660941411716412467443445414001188915966547283773988670739792818897314762082568914041952211779194055311405259158538932388745292324386826830135904886472292289993848482289254307628467614523292519222687689180219788377184005246290896703260524910362136627321135976515358528150143796798116836263053229733971612275184896139539613129329008449214723196703789119820971205922195513915546814704778682373487718946560822811623038853887054357316290622378472322045316639418491798517077275839637525427601452961835674484434498885698840692468550825765131610925966585339561854456154229048295742274725126218799745448031391826295221114381890600683208441558088271228618006589059444108806652992787854634497487158675770983422610936590600627170500972481399444145398522756870626097250230229195799277299921844954715690883242553569256657132515663544931830393317518828986443942138971609142621397646808351809694603734872977984148002699965137870448199866167162949256435040416146886823942144459105175033488395869910405207521329016842673168563837531518918339627724066152933627236730561155418227888673513937454508103826102827706121560330906016404162420051373313654570111102003319577878502216919170112074608722852376799943191590480651623958062982829452035227119036502426583752512199824089725611711059153935434418985109241404135069047109527514730648502064630431371185922523036941621026392783813435540195800531988645430344745298845640017082732623248838473771603478336326662579219137601422632057648758807935233915527562817942378675243919886800056209434731407685691942327092464101136254795499159351103542747723434544436366313104996373661654989465498180892716462805042227038222104784062626027480151567377841821316292095295686368619300417863327530764301323081902435971165925163513225511176258919471673437553320934916910573999020966087207663133871516530391787535755420348174519954013015999193335205032571176460105005716115305748669364682675265014310223271762807620242805617435594927890676408953057384890719681225840400396698155624793888816156585043604782961704971397764959404751358445856914581957186533573207690355894150776647727994156425641953755517727965486096675384222232344185537279888780570854092084221993660761154788359777439798490851148031275123759286793224660188593768897291749180357297185650430735063126035278321749629995702200115722386600046772883018963166273463715186812543356173550341233310175600817771447170656517505385258772069067139665478506263898380526394388218036388768999161538645432932116471146392562992204259450889291928261780531925618148311151259088519869787637913607866079920830781433275298468534248595471485354420794089854693167644320115900404444471266030942746376074187982809857292874382829734306879420308783010740784767155894363033186129183748698373599293267795620690003900348542140553208244771165593739117369452474295075445169488356550100854423929030967163401348223503674045821834526710830392520955478859202303175309815706259592416130388770535449570146586161954289529234209342432075461261173246383180702862172009624828852517861214008242944903162464816939278645210656431141653019224783906038062818006434258491952705341708781231767324026544165240012431457995565227331912056216396141277926932316783631899833106810492890045890947294731794016389385348294079360921757589715698098491612254898203787546124091057862387229987442131738499764391062422228395736099751277880661280909246369674792326056952220508861243875642482808175793303703933394191224832165950388337931626643339913192088808753619030386928808349931733881036690498513779587801764477865791351420222949860738228995728065763459283625096944678593378349990211317403358327367677358882377095918185840441346045760435580063918587956888086127034558064154832456098224664532422114583653763989534559801683261113731162039500068729224661509382267286483841867542303955164213391663536072749966590737898408144092699675796793165775891429992491955485860639629542416955757565163223827874193321274119938618709482020627749094917473754346320653165690129809741806883246764053966717253521140010801409998318494470531219051920354752556183478378238398583402765337923843167749738355049636714529840534145950376598809459294819192486096200503652538835417613002983933634477053826438814791235363934440952835213240806543802505241445900981152753843778634021300832293332432473400040109754281828950625464331409151961292319287863535740382445771128522343533054993071872524564127962306298218521662304206610010638488461150361786151832595182055013210238035059473479841417644445066550217093994746959565730463201996845756999575031950401331385688683576883429289274419202816101239071817771853612534620088858074904095239406471009098851796038360101243053736361346640211872570375441319261567131238168652234864182359667285536913841122976956009892970909409178865928472056691904571596961458646895132972589012090613887584436018692038947475932753085268106507554394567201654757930957224629573401948677157237825005540282635839895509019254240256916422227590032685003087320017232658420681209681389364174854034319152111706246564733896551636271748411627920466475472421243033805492052542237647091252577811952376244836844025673570936216945539206875730684120187779664758451508678786539887154966732995692212544207529457534936853900663520665102592278581210192104846016594846265525000394264201946315492667174670489454576610993722063668720936949698308641684437046485292906040368218708947194882991333823400676584552108673913669306118549159369734833071319506680872661886898225398171896329288732499509337836463164384614967690283284184136334006184670970038275153458133098776493171693249836721707632973537518273692928527497068121779606865163943692606596848941143683627629169873171114739189794632775706536177409526869936538136348369630762610163490694986911903178859927739423796596582439105912599204583810744740479342404550513976713360591833475711496976836332005885151231030818986389033126325119226309584818058301429763149472903925739659774337307109687940297813700796873400566095281249251559137923743113469044584820584542770746490047535898370961450995287930441328833542933636539386097851378739174078158132593877463567524868470795313740375647059352650583871001646082364842709333314532933141725314262510333047099681128329792983694287727106008519184538377065089964546579000542260452715147077137452076302879112802094308224402060706282308208678850263037733351444756065285721900833083634023860920356321356382318484421995141074387149942542550133039926139155010190614633196727199469768170121209097613598302048321148497175007150184555423280152476407230065108963493864309805262458731715886593175689747530567359088332598961192319881186961400055356294945140450806114214490420494488195417136403967132286869444062615622815233336396279517485469862880809956041938378161336156979526713793454354319018535526139196959277008828634440008764782171726908279132449346924807112458895951881542382952497102061566169481361027449429416228859029591798532192088531772405831332410104172391828682208239266557146168642210154401086974397003647170356217905465594944933170065175291981240572835024374361017977695084363373226470846255498368067535698751768103817520605779489720985090002595078926475029239124403277040719184010486962844211160986922952144938430963756963408787147933184107904312838985994963982784496688190643908936394858404598837762653245968848299901455260080572627872653099337092686312650606546084656202210845053932679131706841390889951865628810708670194485207654079244417321332232196041180225814997707988397637369268804955010409293139079608620689856756139863786355461818276369292665568749282154818479663283704713663666842236273009790537968973379093662517795316051746410279831975339791651704861188979834156418998505732384020730350075052669695594594753081616632885311572351609352631187129393729557398993321794518158269658073683417584260274184235030846683698193879109933863561435059993549597333514217973995915742796206889856584584493875193805504685107321011420502217815128118404137521250590361329385146997427292035829509205811367395885622247504950811752188165627552137681095618860955664505372763469788466067973748736658759105548049054658237200096293754479296344115915560231138432518248450383276234795400180535655551222536669390799317067896797756236783441752907948891802488298281245615590113512482344591092230909649423933991714557108941323849548468680509335203770970493785006636718394242326057416155509029270066096293813080877339787718442773014833232754755736783313789547145535129557193581885962158684756484475219230828423777756012721234731368785218564362953263092286535139160440838713013861328416662947756104857391740722209360021068158824717926850831589591367302143596625426553706038593255843919505223140871543995210720444637571268651195165483531243799087083070940544241515809139594158704843980567202482856647644447362604252961907705738740354460336586792214638225365973993001974668174157206242597452556046629209551599663117912609702944345176608757619561247872050409609062772362769045711709729061066411540898769707847042980034982033351136308779676287974627667703893888026848748953201438481632037717854462054861859986684636917120883602793194058658599425778515519713798214407689849211487929150179918547200558584524139792439377469676039518101451697712860634235352474290575260172151562129240720796835619967878383018961055921622371480562682714603085506932806187937976625431071742833007749235636990700120567425836156233607547500827789537909071263596294926763891075439575973972560478399510790078797663071024149826759934524980569432847819403219226207098701759952415628476519584752248050578584198211799092030838909208236225141975964892778944163008811179723219354847713753084628828883321692575327835658786892010648865205021985527642612795652759365359359048052205587306960853879351302215329380382709288672566169552660197788055450054177652374955319992805345989662399494012874012278677451052584166987084866267245492968785684175508510910492913793478551456991152291522750377308973310200505007906906671435839262115546753934391579860133029544403932422271218975046896384482252108820546415274174791693426071019927278518520520164621127271231748277979659289204850823018535192067323372368224831050642902153626845618478009622824733150764188329304815843651352730897836727021023023627320228373645802602496000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
- (("%b" (factorial 4000)) . "1100101100001011001001011100101011011110010001011001110111110101011001010010110110101010111000000111101100010000100001101111110011100001111110100000010100011101111011001100001010001000111111111110110001111011000000010110101110111001000000010100111110010000010110110011011101011000111000111000111000111111001100110100011110101101011000110000100011000001000001100000000110100110000100111101011011111011101101010100100010010010101000011101100001101101100000101111110100011101101111100100101101000111000001001101011110111110110101111001111000001011010000110001001101101100000001100101011000010100110101011111011110110111111000000010100011111111111001010001010001000101001001111011001100001000110011010011101000101110110000000001111000010111101000010001000110000111111111101100110001100110100100110101111011110011001011011000111010010010111111001000010110010001001010111000110101111110101110010101100100101101000111010011100100001011101000100111001110000110001111101101110101111001101100100010101000100001110010011000101001100011001011001000111101110001010001000000000011100100111001001100111110001110000110110000110111111101000110100111111000111001001111011111011111010101100011110000010110010101110110010101111011101000000010110001100001001000101010000101110010011011010010000111100001010100111011011010011110001011110001010111000110110010100110011000001101111100001011110010011000110011010001011000100111001000101011000110101100000000101100110000011010100111011011101110101100100111110100001101100100001000101100100100101111001001101101110010100111001111101111010001110001101010111010011000000110001111011100110000001000010111110100011011111010000100100100110111101001011100100101100111101010011100010111001110000101110111001010000001010110010011001111010110100010111100000111010010110000001111000110000100011111110010000101100010100110010101100110111001101000000110101101001100111101111111111111100010110001100001000001100110000011101000110101100000010001010000010001001000001011111000101011001000100000000000001000111000010010100100010110011110010110101011001110001110001101011001001101101110101110000101110011100101001011001000011011001010010010100101110111111000100110111000101101100000011101011111010010110100110100100001110100000001100010101000110011100101000000000111101011000000011100100101010011111110010000101000100011101011001011100000101001111001011011110110110101010101011100101010000011010011010100100111111001000101111111111101000000011001110000011110101010010100111111101111101011101100100111011010110011001001100111101011111000011010111111010011110100010011011101000100110011001111101100010011010001010001101111110011110111011111111100011100111010001010001010010000101100110001011111011001110010010111000110010010100000100000000011100110001111001011101111001110101010000100001100010001010100010000100000101111001001100011001100001110010010000110001101011101110100110101101000110011000000110010101100010100001010110011101100000101100110010100011100001101001111001001101000110010001110010000001100010110111011011011100010100100111001101000010101000000000110101100101111010011010100110001011000101000101100111100001011101110101001100001110011111100000111000100010101100010100000011001110100001011111011101100000110001110011001010011101110001111011110001100011110100010100101111101001000101000101100011110111100101001101010011001110101100001100100001110111010101011111011110111000000000001111101010010011001000100010010110100111001100101110001100010011101110001111111001101000101000001011111011000110111111100111110110101001011011101111010111010100111110100101001011101010110010010011100101011010101011111001000110110001110101001100010100010011110011100100101010011011110110011010111000111011100110011000001001100100101010010100001111110010001000111001110010100100110101011111001001100001001000011000010011110101000110000000110010010101100000000010010111110000000101101000110100000111001010011110001101100101010010011010010100110001111000011100110110101101001001000101001001010110110110010100011110001111100011010000111001101010001001010010110110101101000000101100101111000000110100000001001100100100101101111001111011001000000110101010101100010000000001000000001001111111000010111010010000101100001101100110010010101101000111110010100101011110011101101010100010100000111100100100111100100111001010011000010010011100101001110010110100001001010010010010100001111010010110000110111110001110001000000011011010100111000011101101000011100111000011000100100001110110100111001111010100000000111010100010101101101010110010000110101111000100110000101101000101010001110101010001101000011000111010111001111100101000010100000110101101000101010111110101001110100001101110100111100010011100011010100011111000010000000111100110010001111000110100011110001100010000110110011111010100001001010000001010110010110111010011000110011000101001001110011110011110001101010011000000001101111010011110111110100010000010111011111111111000111101001110011111010010111110001010101110110010001001100011001010110000100011010100101110101011111110010101000111010001100011100100101111011111101011101100001101010010011111001001001111100101011101110000110110011010010101000000011111101000111000011010110101111110010111101010000001010111110000010011000011011100010010000110000100010001111011100110101111101100010001111011110100110111111110010110000001110111110010010000001101011010101010010010100100000110010011101000111010110110001110001101011010000001101000110000000101010011111110111111001110101011000101000110110000111111000010100011001001001110101001000011111000011100000001001111001000110100101100111010110110011110011101010111100100001111100000110110111111111000101011110111010001000011101100101111001001100100111000111010111100000110100001010101010000000111111100100011011111011000110101101110001001010100111000001011011001001011100101010111001101001101000100111000001011110111000010110111100101111010111100011110000001110100111100000010011001111011010000100000110001100101010100000101001111001100110101110111110001111011100100100000110000000101101011010011000011011100011101110000110000111101011100010010011000111110111101000101010101000011011101010111011010100000110000001101110000100001001010110100101011010111010101010010000110100001111101011111010010011011010011001100101110110001100101100101011101110001100001110100000010000111101011011110100100111010001011101000101011011000000011000011101011111011000011001100100100001010110010110110001110010101101001011001111110100001101011111000100100000100100111101101100001000001101111101000011011101100000011001010101000011001011100111010000110110011011011001111101000011001000001001101110111101111101100011110100011110110011111110111010110011111110100110001000110110101100011110011111001010111000111010100011110110001111011111011101000100001101000010101110011101100001101011000100100111110111101110111111010011000110101011000011100001011100100100110010101001101110101111000000101000111001110101110110110000000011001100111010011100110010000000111011100111010011110100100010101010001100000110001100101110001110011111101110000001111101100111101110000111100100001011000000101100110001001001101111111101001001111101011000001011011010011011101011010001111010010100010110011001110011101001010010011111001110000110100000110100101010010110101100011001101001011010110110001011110010011110100110100111111000111100100101101111000101100111100111100100111110010111110000111001001000000001110010011100000101000110110000111001100000111000111001100011010110100101101110011000110100110101000110101001111100101000100010001110001011001011011001110010010101101110111100101000110101101111101010001011110100100111000000100011010000110100010111100100100111111111010000111100011010001110000100010010001010101000111111101001001011011110101000110010010101111101000000100101100101101010100000111101010111011010011100111101001010011001110011000001110000011111101000001011010110101010101001111001011011110111011110100001111110111000100110101000100111001111001100011100100110101011010001110111100000111000100011101000010010000000111001010000111010110111010110011001110101011000010000001101110011001011101011100010011000001101110101000110110110000101011011011100101111110111110110010101111101101010100001101010001100001110011010010110101111100010111011001000010111101100001000010111010100100010001001110100001010110010100011110110011000111101111110100101001101011001011010100111001000110010110001010011111111000011101001011011111010011110001000000001101000001000010010100111011100000011001110001011011110001010010001100010001100001010100011111101010110111010101101100110001001001001001010100000101001110100000010100011101000111001111001100010101111000011111101100111110101010100000111100011001000101111110110110001011110000101110100011110001110000010000000101001000100010001000010110010011001011110011100111101101100010101111011101000101111010100111000100001000011010010111101100110001101000000110010001000011010000100101010100111100011010010110101100001111011001011000101000010101001011011111011110110010111000000110110111100011000100101010001100110111111001011101011111110111011001000111010000001001011110111111101010001001011001101010000010101101101110000010011110000110111010100001101000100000110010000110011000000010100100001011010010111100100111001000110001010111111011111011001101101100101101011101111001100001010111011110010110100011011111100100111010100001111011011010011111110111010000111110111001000110001100101000001111100101001111101001110101010000100010011111000101010111000101011000100000000001000000010010010010010000101001110011110101000011000000010111001111011000111111101010001111000001010101001101111000101100001100011101000011011000111100000101011011100000001011011101000010011110000101011111110100010101001011001110001101010101001001111001111110110010111111101111001001100110011101011110001101000011010110111100101100110010111001000101011000101101001100111001111101100000110011001000001001111001000100010010110111111010111110001110011011000001101100010010111000100000100100010111100111101001001111101011011110001110111101000001000001100100101000111100010001101011110010100000011010010011100100100111010010100001111111111000001101101010011101111101101011010001000110111110010011010101101011001101100001111100110101000110111100000101101000011011111110110001101110011011011100111001101001001100110110001001101001100001011111011000110010110000111110011001101001011000010111101110001010111100111101011011001001000000000001011011001101011000010100011111010110110110101000011011111010100110001110110011101010010101101010100011000000101011011000101111000011011001001110001001001101110111101011101101111010111001111110011111101100001001011110101110111011111110100001101000000110101101100011110000101010000011100010110100101010101001100000110110001100110011000001101001101001010011100010001100111011010010001110001100001001110101001000111100100001100001101000110010111011101101000001001000011110100011010111110010010001010011000110000101011110101010101001010111011100000101101001001001101101000001011000010000000111110110100000001100000101101110110001100011011100101001001000000110001100001000101011111011100011100110100111110111100101000001010100101011000111011000110100101100111110100111001101010100100101110111101000111001001111101001110000110111100101100011110101011011010001001110000110101011010001101011010011111000101100010101111111110010010000011111001111001011101111010101110111100100100011001110010111001111011011111001000010000110111100000001011110111001010010010001000011001110110010110111000000100000100000011001101010011101100101110010011100100000100110111100110011001001111010111111011001100100000011110010101111000101100100100110110000011111001100011001011100011010010001100011111100101101011110101011001111110001011111011110111110100101110001111110110101001111000000111011110110010101111110000010011010000001110100011010010010100111010100101000111110110001011100111011011000001100011101111101100010000100010011111110010111000101000011011100110100100110010000100110001010110010100010001001001001110111001010110111001101101110110011001100000101101111111110001110011110111100011111110000110100011110010010011100110001100000100110100110101010111111100111010010010110001100101011000100110001100110000010000001110001110100010010001011000010111010100011011111001110111001010011111010000101100001110000111001111100011101111011001100110101001000000110101011001101001001001110111001101011101100010101100110000100111000100001100011111110001101110011101001011101011011110101110000000010010111011111001011100111100101111010001111101000010000110001101100110001001000001100001000001010110101111110010011001111110010011100100001100000111101110001010110010110111101101010011111000000111000101001011111110010111100010101101110011100110000101100100010100001100110001111010111000010100101101110001010000001010110111110011110001100011010000001000100010101001000101101010101111000100011001000000111100000011101110111001101111100101101011100011100000111001110110101010000010000000001111111110111111000011010000011101001000010000100100111011001010100000000001101011110001011111010111101011001111100000110000000111101100010100000010110000000101010000000101100101110111011011100010000111000000010111001001101011110011100111001101111110001101011000111100000011100000000101001001001011100111000010110001010110110011010100000000100100110001101001010011111111001100011010101101010011011010100111000110100100100011100101101111100100101001110001000110010101000110110000101000001001000001011000100010111110100101110000101110100100101001001101001001011111000110101111110011001001000011100111011011100101110011000000000010110101100011001000111010111010000000101110010001101000001101001101011111110110110010011110101010010111001000010001010111100111011010001000011100000100000101111111011000010101100110000001110000011110101111111100000010111000011110000111011101001001001110100110011101000100100111100111001100000100101111110101011010101100110001000100101000001100010101011011010011111100011110001010111011000110100010101100001010101010110111101111010001011000100110111101110101001101100011000011101100100111100101000011011111111110010111111101110000100101001110011111100000001101110010110111100010000110010111001111000111001000001000000001110001101000000110111101111100111110100100111000101101001101011100011101001001011011101011010011101000101001000001111110000001111000001010001011101011110001100011100011011001110101011100010011011101000110011110011101001000101011011110010100101010011000011010011101100100011101011010111001110010001000110111010101110111110100101001111000000011110011100110001011000111111011011001011010110000110010100110001111101010000010101000100100111101111010010111011111111010101000110011011110011010000101110000010110001001100001011111000001011000111000000110100111100000011000001000111001000101010010101001111100011101100011111011011101101011001010101100110011010101101111100101110000010100011100010101010101001010010011101110111100100001010100011011000111000000010011001110101101111010111110010001001001000000011000010110001101111100001111000000001011111100000100110001011010111010101000101100110001111010011001000001111000000011110000010010001110000001110001100001011000011111000111101111000100111100010011010110110001101110111101001100001101100010100000010011100000110000111011001100100100001000011101000011011111011110010100100100010000001110110101111001100100000010011100010010010001101010110111111111001011100001100111110111011010000001001010100111111001010011010101011001010011011110111001110011111100111010000010001001000100101000010000110000011010000100001100101110111000011100011100111111010011100100010001100011001100011111111110000110100110000010001011111001111011100111010100000111100101001010100100111100000100100000101001111111110110100011110000100101100100011110000100100001001001011111011111000111001001101011110000111000000110000100110100001101000100011010110001010011010110111111001111110001011000011111100000011011010000011110101011101100000001100010010011111001101100011101000010010101111110111100000011000111000110011110101101011100110111101011111010000111011100101010110010000110001001011101011111011111011010000000001011101011000100110111000111111001110100111110110001100100011000011001001011111000100101101101001100010100010001110010110010011110111000010110011110110110011110110111000101101101100000101110111110000001110011010110011010111001101010001101111011011001110101010000000110010101010010010110010100110100001011001000110110110110111011111001101010011011110011001111011001101000111101101110101111100011010011101010110101000110010001000111100111000111110100100100011110010111111110110110101000111000001011110010110001100011011011101010100011001100101101010100111000000001100111110011010101101000101101110111011000101011111100001010111110100000101001001110011010010100110000100010000100011100110000010001110010010010101100001011110101010000010001011011001100000101100100010110101000101010110011101001011001110011000010101101010000001101110111110010000111001001110110000010001111110110101000010001000111100110101110011111011100000110000010000001000001000001010000110110010101000101110000101110000011101010100110111101101100110101000010000100110100011010101010001110110010100111011011011111110101001110101000111100101110110010110111100110101000101111010001000110111000111100010110000011001110010100001010011000110101101100000110101010111100010011011010000110010001010000100111100111111011110001110100101011011001100001011010011101010001100101100101001110110111110011010111010010001100011000111001100010010001111000110101111111111100100100011101110101011001010010000001111111000101011111001010011111111011101001101100100011011000100001100101010000000010110001010111000111101101110001110010001111001111110000110100111100001001100111011110000111001000111010111011001111111011010110011011010100111010001101111000111111110000111101101110101101011111111011011100011010100010001100100110000011100000100100000110000110000001011001011101110010000100110110101001001001111011101101010111111011110011001100101010011110001000111111000100110001111100111001000100001100010111011111101000110001001111111110111111111110010111001001010101000100110000010001000010000111101110011010111101111000010010111111100101010000111011010100011101001001000101100111111000100011001001110000110100111111101100111100001110000010011010011100000111001001101001100100010100011111101110001011010100100111100010100111111011001111000101000011010111011000010001000101110001110101011101100011010010001010101001001110110010000000011000010010000000000010000111010001101001010100010110010110100001101101101101011111111011011001001111101100100010011011101111111110001010101100111010001100000100111010100110001110001101100101110110001001001111001111010001011101100010001111111001000110010010100001100001000100111000011111111110110001111100000101110000111010000100111000100101000000110010000001111010101001010101000001111011010010011001110110111010010101110101100110010100011000100011100011001111110101001011111100100010000000110000101001101101011111100111100101011111111100000011111111010000001101100011011110101101100001110001110010110000100111010010100011110101001100001101011110110011000001100101100111110101111011001000001110111100010000101011100101110001111110010100110001000110011101010110111001000011010100010011111011110011000110111111101001100000101101111100100100000010001110011010100101010111011001111000101101000000100011110001100011000000011000110110110011001001100101000001011010110110111101001010100100010010110100111101101001001000110011100101110100100110011000110110110100101001001001101100110110011100100011110010011010001100001100101111000111111111010111011110110100111001101010100110101100001000110011010000111000000001110101111001111100100010010010100111011000101000000010100111110110000110001101100011011111111111100110000001001101100001110010101000100100100011111010101001001101000011010101100100101000110111110111101101100010000101110100001111110000010110111011111010000010001011011000011111010001001000100010001110111100111000001101111111111101101011011001001111101101111101100000010101010100101011110011101111101000100111000111000010111101100000111100000100110011011011111110100001100001011110100110000001101111001111010010001100001110001000010000100001110111011101111111101111111101110110110011101010100010000000010111011110010111010110110010110010101000000010000011000010000101001100000000010110000010000010110010010100100100111000011001100010110101000101100101110011000011010100001100010011100011111100101100010101010101001100101101110101101110110100001100110001111010000011011010100011100100011001111001010010111000110101001100110101000001010101000110011000010001100010100011101111101010011011011010010011101010000101001000010010100011110001000010111111000010101101110110111011101111001000100011101000100001100001110101000011101101001100001100011000000010000000001110000111000000010111100101010100110010010101000000011010011001111110100111100101010101111100101110000101011011011111100100101100001010110001110100001111010100000110011000111110101001100000111101011101111101010010010001111010001111101001110000001111101111010011011011111101101011101110101010111011011001110100010010111101111101001000011001001110000111110100100000000001110000001010011000110010100011000100100100101111111000100111110010000111010110110001000111111110001110011111011100010011011110011110011111110111001111101101101010101011101110111000111101010000101011000010000000111110001000001100100101110000011010010111100001101010100101100100010010100101000101001010101000001000011100100001001111101110111010111000011101011011100000100011010110110111100101001111110011100111010101111100000110010010101010111001111010110010001001010010110101010001110011001111001011001100110010010001110110100111001100110011000110101010000000110110000101111010011001111110010101000111010010011001110110110010010010000101101101100111000110001101100011011100101010010101010011011110101010100111111001010111010111101001111101001111001111110011011001111001110101000001011111010111000111101011001011101101000011000111110111110001000111011010001000110010011110001101110110101010100010110011111001010110001010010000110000110000110011111101011100101011100111101010000111011101111101011000001100001001010111110110001101111111100101101001011111010101011010111100101001011100111101100010100110000101000011000000011100010110110101000111101111001110000010010101111011001101011110100011011111110010100000111111011001101010111011101011000001001010011010001011100100111001110000000100100110001011000101100110111001010111111011101000010101011111001001111101101111011011101101011000000100110010000010111111101101101101000011000111100011000100011000011000000011111100000110101011101111001010010110010011001111011110000000001111100011110000110011100001000101011101110111110000110011100011101111100000011101100111111011000000101100011101110111101111011011101010111011001110110110011010110101111110101010100010111100110010010000000110010100101011111110101001011111011010110010001000001010011111011010110111101101101111011000100011011000100010110001011110110010011001111000110001110011010001010111000011011010111011110000011100011110110010100101001101111101110101110010111101001110110101110110011001000000110110000000001000011111010101110101111111011101101101100010000000100111000100000110110011010000010101101001111010100000101100000100100011010111101100011110111011011000010100100110100110101001010011110110011101010110000000101001010000110110111000110100100000000011000110101100000000001110010110000001010100100001110101100100111101100100110111100110100111111111000011010010011010000001111100010110100001011100010000010100110011101111000011011100001011010010010110001011000001110100001110100101101011010000101011110111001111001101001001001111100101000110011101001111110101111100110101110100101111101000111110010011001100110001001110100011100000001010000110110010011101110111001001001011101100110000111110000010110010001000100111111001100010100000011110011011110111000000000101111011110111010101110010011011011100001100001001101100011000010110011000101100001110001111100000010111100001110101100110100001100000011100110101001110110100100011110111111001001100100111010111010110110000001111010110001111101111100100010110001011001111000001101011011111101111000010010010111011100110111100100110010110111000001010100000001101010110001010001001010011010000111110010111100000110010000110110000100011101110000101111110001101001001000010011111100001011101011001010100001000110000101001100001010101100101001011000111010101000001111000111100000100001111100011000000111000101010100111111110101010011010101011000111101101010011001010101010000111011110010111001101001101010100100110001100010001111110100110001100010100110101111100011101001100001101111111110110010010110100001101001111001100101010100011010100111111101100101100000010100110111011000001001000000001110100001110111011011010000100101011011100100011100111001101101101011110001011011000111001000001000101111111100111100000111011000100111100101111010011110000110100110011101010000110110101101000011011011010110011110101110110000011110101110001110001001111101111100010110100001010101000101000101001101110011001101111000100000000010100110100110011001010001100110100011100100101010001010001010101001101010101001001100010001011000111011101001110110101111111010101000001011101011011011101101011001000101011110110010001100011111111101100101111110111011001010001001000001100111010111111110001110110110100010000010011001101001111000010001010011000011011000101101000011111101100111101010110000100101101001111000000111100010110110001001001001011111111100000010110100100110010010010101101110111101000001010111100010100011011101001100000001100110001110111101011011101011110001110101011110001011100100101011010100000101010000100100110101011001011100111110011011011100100000111011101111111001010100100111111001001000101100001001011000011110000010100110000110010111011110111010111011100100011101000100111101110000010000110011111110101010111100000101001101111100010110101000100111110000010011000100000000101010001111010100011101101000111101100001110010101100100011101011011100110011001000011110111010100101011100110100101000110001100100110001101001000101011001110011010011111110001001010101100101100000010111110001010001010100110001000101111110011101010100001011100010010011001101000101011011111101111010110010111100010011110001100001110110000000111101011000001100010100010110011010100011110000110110100001010000110111010011000100100011101000000000101110101111010110000010010111101100011101000110111010111010000101001100110011011010111111001011010011110000101001101001111000000011111001001110010010111101001010010001001000011100100101010010010001101111111011001000011010101100010111001001010001000001010010011101101111011110111010101110001100001000101001100110001010000011011001100001110101010100001100000110011100111101000000101100010101001010101010100010000000101110111001000100010110001110101010000001111100101101001011011101100110000000010001100111010111000000100110110000001010011001011100011101000001000010011110100111100010100001000000010011000010000001101010010100111110011011101110011010001111110001000001011110110001111101001011111100001101101100011111011111010110011000000101010100000111101001001010111010000100000100001100010111011110011110000110011010001100001110100101110100000010000011001110110111100001001100000000010011010011010001100110100110110001100101001000000101010011111010100011010101001101100001110110011000010011010011100100011000100011000000000100000000100110001010101111011100110010100111101111011010010000101001011110011110110000010111010011111011110001000001110100110001011110111101111110000001001110101100110010101011111101000011011000110011011010010011000011101010100011101001000111100001000011100011000101100001001001011101111011100010001101100010110001101110111111100001111011010011001111101111011010000101110101011110011110011101000101000100100001101101000100000001011110010000001111111011010011111111111011100101110000001100000011011011101101100010011110100011100101111011111101010101010000011011100011101111011000010011000001111011010101011111001010001110000100101110110000111001011000010100001010000110110111001010110010000100101101110010110010101011000010100010101111010110111001011011101100001010010000111100101111100111011110000101010000101101000011111110010011011100101101100000011011100110111000010110100000000010111011111111110100010000110010111110010011010111000001010111110101001100100001100000100001100101001010010110101000000011111110011011111111100111100011010101111110100100010010000101110100010010101010101011000101001100110101001011011001011110001000101101000111101111110010110101001001001000000001000001110101000111101100111010101110000001001111101110100001000011001011100111010011001001010011100110001111101100111100000001001000100101011011101011100100110111101011100111101001100010001111011101010100101101101100111101101010100011011111010101000111110011011111010001100000000010000100001000010010011100100111100101001110111101100110100011010101110010001011010111001001011000001100010000011000001100010000100000101110000000100100101000000100010011000110100001111011011111111000010011000110100100000100001000001110011101101100100101110101101110101111110101101111111101010011011110001011111010100001010110010101101100111001110010000111011101011100010101100110000100101000110111101101001011001001101001001011010110101011001000011111011000011001110101010000111111101100110001100101100111011111111110001111011001101111111111100111001100101011011011100000101111010001011101011100101000101110011100110100111001000000000110100101001010111010000101000010000110001111110011101110100100111101010101010101011000000001110000100010101001000011100101011111000101111100100100110100100011111111010110010101111111101000100010100110101001001110111011111000111000000101000111011011000111000000001101111100011001010000010111100001111100101100010110000110100110011000101101010101111101110001000001101010100000010000100010001100111100111010001010110101111011110001001101111101010101011101100101001011000110110110101010000001011000011001101100001010000101010110101111000011111000011101101000001111101100100001001110001111101101010000110100010100010110101101000010111010111100010111010011110000000000010000100000100001010111011000010000110101000001101010001111110110101110010101000001011000100000110010000100110001110100001011100111010111101110101101000101000000011000011101011010100100000000011100000001010110000000000000011101011110111110101001010011000110010011101011101000100000111110010001001110110100101011101001010111101100011110001011010100000101000101001100111000110111111110100101111111100000111100100100101000100010000011001000101010010110101011011110110000001010110010100101101001011010011111100101110000111101001100101001000110000000100101101110011000001000010011100010001011110110001011111010011001000101110110100000011110100111000110110101101000010011000011111010101011100011101001010010000010011001011011000110011001000100001010000000111111011100101101111011011110100100010010100001101011110010010110111100011110010011100111010011010111010000100010111101010010011000110111101100101010000000110011110100110010111111111110101001001110110100110010111010110110010010001110000110010011000011001111011111100111001110001110001110110111011100110110111001000110011000100100010100000101111010110110001001111000110000100010111101100100011110111000101001110111101000101101001110111111100001000111000010110110001100010101110001010011001100101001001110011111100010001000101111111100101101000100100101010111001110100111111000000101111011111011101100001111000111111110001101111101011011100101111011011100010110011111111110010100100000000000110110101110010100011111111101111001010110011111110111000101010011111001111011100001001011011011010111100110000110111000010101110100111101110010101000011101101010110101101110100111011001101010010110111101101101110110101101100001101001111011000000100000100010100001001001011011010101100000111101111100111000000111001111011011000010101110101010010011010101010011111111101010011101101001111101000010001111100001101110010001001010100000101000110111110001000011010011001101111100011011000110110000100101101111011000111100111110010001000100101101010001011010001011111011001101001001000000010100010011000000111000011110000110010001101110101100111001111101010000001000110001000101100110111100100011010010101011111001000110111011010000011011111101101101100101100111010001110010000110111111000101010011111110011001011001101001110011101001010111010010011000010100111101110000101101011000000111101111010101011000011000011101111100001110111000001100011000111111111111101111111101110010000001010001000010111000101011001111000011101110100010110010100101000011100001100100111010010111001101000000110000101110101001100101000110000110010001000110100101010011110001111110100111111101000101000001010000000011001111011110011011100000101011011001101010000011101111100111000000011011011010010100111001110111101011110011100001000111010100000000100011110011001010000000110110011011111001010100011000001011010100010111011001010000000010000001111011000001000011010001111011011010101011111001110111100010100100000001101111111011111000010110110101001101010001010111110000101011101110101101101001111010011011001111111001101101111111100101111011101011111000011101001110000010011111001001100001010100101101100000011111100100000010011000001010101010001110111101110001001010100110101010110001110111111011111001100011000011000110010100111111011111101011111011101111001000010111100011111001110100110100110000101000111101111110101101111111001100001001010110111100100100101000100001000010100110111101101111001001011111100110010000010001000101001001011101110010010100111100101101110010010000011001110110001101001010001010110011000111001100001011011110110101110000001001000111100111001001101001010001000011100001100010001000110101010101101100001101001110001110100100000001000100101100100001000001001111100101001001101111011110001100100111001111110001100000100110111110001010110110001000011110110111000100110110000011010111111011101111101100010110100111000011000100010101011011001000001111010110000000101111101110001010111010100110001011001110111111011100010011100111011100111110011010100001101001100100001101110110001100110111000000101100000111010111010100010000011000101011100000111111111101100000111111011110000010100110000110111111111011010110110010000111001001111000100000001110001100000001000001100000001100100111101001011001000111010010111101000110000000111111100011011110100001101001000111010101101001000000101111111000001011101010111100010110101011010101010001010001001111111000010011011111000101111110011000001010111001011001101110011100111110010010110101010111010111001010101111000111101001110011000001000101101111000110011110011011101110011000011101010101001100110001101001010101011101010100101100100110010110111100110010101101111110000101010011101110000100110010101111111000110110001110010011100110101010111010010100101011100011000011100101011001101100001100111110101000111010100000101100101010001011110101100011100111000011100001101011101101101110111011111100111100011110101101110010111001000000111100000111101011111110100001100111011110100011111100010111001101100000100100010000000001100111111001001010001010010100111111001101111011011100001110100110010110101001001110101001000100101101011000110001110010011010011101010100110111111111110001100111100010000011001010001000101100001001001011111000011101101101001111100101100000001101110101101010010110001111011101101101101101100000101100001000000111110111010100100000001100110110110001011100111000001000011001001000100000010011010011110001011010100010110110011100011001111100100001001011101010010001000100000101011100010011101110110100110110101000110110001011010110101100101010000001010111010000101011110110100000101111101111011101001011000010111010101011010011011000000100100010010001111110110110111100110000101111111001010110011001001000110000011010010000110000000110011100101110011101111100110011010101100101101111001010101011101011111000101110111110010110110010010110100101110100000011000011111001010010111101101110010100111011101001110001001000110101111001010101011110001010101111001111101001010111110010000001101100000100001001111101011101010001000000000001011000101011001010111111010011111011000010010100001000100010001011111011001010011000111000011011001011111011010111000111111100111001001100001100000100000101010101001000111010001001110100101100101011000001100100001011111111000011011111111111001010111101111001101010011111011110011000100001111101111011001110001001100000011011000011101111000100001010101001011011101010010100110111100001111101001000001000110001010000000101001010011010000111111101010100101011100001111011100010000011011101001000101011100010101000110100100101111111010110001011110010110010001010011110110011101100011111101100001001001101001101100001001101011000000000101110010011111011000100001011000001010100001000100101001010100000001010000010111011110011011000001010110001011011010111101110101010100110100100101101111100010101010110000000010110010111011001010001000011110110000100000011111111110000111001010100000000000010100110011001010000010000101111101001011011100111100001111101100101100100000010110010110011111110111010110101111101111100010111100100010111110100100001000001110011110000111111110110000100011010100001111000110001000100010010000001100100100011010101100001010010101100101111100101010001101100111011110011011010111011100000110010101100101111110100100000000100000100000111000010001111001100100000000000010101001000101000010100010100101111110000111111110100010010100011101100011100100011111001110111100100000110011011101000001011000100001111110100101100000111011110000101010010000110010110100010110000010011101101000001101101110010000110100100111011111110001000011101011000101111011000100011001100000001111110100111011000001111111101011000011100110011000111011010110010110110111010010000101100110111011100000101110011000000110101000110111110011100110100011110100001011101001001101110110010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
-
- ;; testing base converters on small ints
+ (("%x" (factorial 20)) . "21c3677c82b40000")
+ (("%+x" (factorial 20)) . "+21c3677c82b40000")
+ (("% x" (factorial 20)) . " 21c3677c82b40000")
+ (("% +x" (factorial 20)) . "+21c3677c82b40000")
+ (("%+ x" (factorial 20)) . "+21c3677c82b40000")
+ (("%#x" (factorial 20)) . "0x21c3677c82b40000")
+ (("%#+x" (factorial 20)) . "+0x21c3677c82b40000")
+ (("%# x" (factorial 20)) . " 0x21c3677c82b40000")
+ (("%# +x" (factorial 20)) . "+0x21c3677c82b40000")
+ (("%#+ x" (factorial 20)) . "+0x21c3677c82b40000")
+ (("%x" (- (factorial 20))) . "-21c3677c82b40000")
+ (("%+x" (- (factorial 20))) . "-21c3677c82b40000")
+ (("% x" (- (factorial 20))) . "-21c3677c82b40000")
+ (("% +x" (- (factorial 20))) . "-21c3677c82b40000")
+ (("%+ x" (- (factorial 20))) . "-21c3677c82b40000")
+ (("%#x" (- (factorial 20))) . "-0x21c3677c82b40000")
+ (("%#+x" (- (factorial 20))) . "-0x21c3677c82b40000")
+ (("%# x" (- (factorial 20))) . "-0x21c3677c82b40000")
+ (("%# +x" (- (factorial 20))) . "-0x21c3677c82b40000")
+ (("%#+ x" (- (factorial 20))) . "-0x21c3677c82b40000")
+ ;; test overflow
+ (("%Z" (factorial 120)) . "6689502913449127057588118054090372586752746333138029810295671352301633557244962989366874165271984981308157637893214090552534408589408121859898481114389650005964960521256960000000000000000000000000000")
+ (("%Z" (factorial 4000)) . "18288019515140650133147431755739190442173777107304392197064526954208959797973177364850370286870484107336443041569285571754672461861543557333942615617956996716745284831597317498818760937482804980419576512948720610558928129788097800620593429537705326740624453884285091743951756746144447362378722469436194575929579900114212973360658998073977714697261205048663725936337490404066097966637170254021348800944280342285355946649681316260163459743803577175903394733170076841764779082166891184529324230033414145497801832598218518406552257097392530024582738982919104406782168708871495603501905867399966298798534877747923179195791416504408054878974770308650707120878837624986576073340449414854578367383301715706358194127400849855604080473305196833482408079420964275187538889115296655522397723924887154624810659788321005620558369604778657904771918388054319251513981954296741688447246185021250402225010116433016818588036690180177691461779713104301640395708274734701186772756966064611023656528765138735704190876200697145804692125236821066805337175220605745377557452592208653939853278523841448314026548802309860391087939783218946129582647928430739985554883806198749831633640196211202756086016039171607744078776876219661603702759454887945247605749205543464095883664514960293873244842409803801480566600124415293789831496309554117113888561569494314926134470477513516416560102984058751906208865570183683850791317395702861350821464653600469443279077733978568711404244774089509216727922510660941411716412467443445414001188915966547283773988670739792818897314762082568914041952211779194055311405259158538932388745292324386826830135904886472292289993848482289254307628467614523292519222687689180219788377184005246290896703260524910362136627321135976515358528150143796798116836263053229733971612275184896139539613129329008449214723196703789119820971205922195513915546814704778682373487718946560822811623038853887054357316290622378472322045316639418491798517077275839637525427601452961835674484434498885698840692468550825765131610925966585339561854456154229048295742274725126218799745448031391826295221114381890600683208441558088271228618006589059444108806652992787854634497487158675770983422610936590600627170500972481399444145398522756870626097250230229195799277299921844954715690883242553569256657132515663544931830393317518828986443942138971609142621397646808351809694603734872977984148002699965137870448199866167162949256435040416146886823942144459105175033488395869910405207521329016842673168563837531518918339627724066152933627236730561155418227888673513937454508103826102827706121560330906016404162420051373313654570111102003319577878502216919170112074608722852376799943191590480651623958062982829452035227119036502426583752512199824089725611711059153935434418985109241404135069047109527514730648502064630431371185922523036941621026392783813435540195800531988645430344745298845640017082732623248838473771603478336326662579219137601422632057648758807935233915527562817942378675243919886800056209434731407685691942327092464101136254795499159351103542747723434544436366313104996373661654989465498180892716462805042227038222104784062626027480151567377841821316292095295686368619300417863327530764301323081902435971165925163513225511176258919471673437553320934916910573999020966087207663133871516530391787535755420348174519954013015999193335205032571176460105005716115305748669364682675265014310223271762807620242805617435594927890676408953057384890719681225840400396698155624793888816156585043604782961704971397764959404751358445856914581957186533573207690355894150776647727994156425641953755517727965486096675384222232344185537279888780570854092084221993660761154788359777439798490851148031275123759286793224660188593768897291749180357297185650430735063126035278321749629995702200115722386600046772883018963166273463715186812543356173550341233310175600817771447170656517505385258772069067139665478506263898380526394388218036388768999161538645432932116471146392562992204259450889291928261780531925618148311151259088519869787637913607866079920830781433275298468534248595471485354420794089854693167644320115900404444471266030942746376074187982809857292874382829734306879420308783010740784767155894363033186129183748698373599293267795620690003900348542140553208244771165593739117369452474295075445169488356550100854423929030967163401348223503674045821834526710830392520955478859202303175309815706259592416130388770535449570146586161954289529234209342432075461261173246383180702862172009624828852517861214008242944903162464816939278645210656431141653019224783906038062818006434258491952705341708781231767324026544165240012431457995565227331912056216396141277926932316783631899833106810492890045890947294731794016389385348294079360921757589715698098491612254898203787546124091057862387229987442131738499764391062422228395736099751277880661280909246369674792326056952220508861243875642482808175793303703933394191224832165950388337931626643339913192088808753619030386928808349931733881036690498513779587801764477865791351420222949860738228995728065763459283625096944678593378349990211317403358327367677358882377095918185840441346045760435580063918587956888086127034558064154832456098224664532422114583653763989534559801683261113731162039500068729224661509382267286483841867542303955164213391663536072749966590737898408144092699675796793165775891429992491955485860639629542416955757565163223827874193321274119938618709482020627749094917473754346320653165690129809741806883246764053966717253521140010801409998318494470531219051920354752556183478378238398583402765337923843167749738355049636714529840534145950376598809459294819192486096200503652538835417613002983933634477053826438814791235363934440952835213240806543802505241445900981152753843778634021300832293332432473400040109754281828950625464331409151961292319287863535740382445771128522343533054993071872524564127962306298218521662304206610010638488461150361786151832595182055013210238035059473479841417644445066550217093994746959565730463201996845756999575031950401331385688683576883429289274419202816101239071817771853612534620088858074904095239406471009098851796038360101243053736361346640211872570375441319261567131238168652234864182359667285536913841122976956009892970909409178865928472056691904571596961458646895132972589012090613887584436018692038947475932753085268106507554394567201654757930957224629573401948677157237825005540282635839895509019254240256916422227590032685003087320017232658420681209681389364174854034319152111706246564733896551636271748411627920466475472421243033805492052542237647091252577811952376244836844025673570936216945539206875730684120187779664758451508678786539887154966732995692212544207529457534936853900663520665102592278581210192104846016594846265525000394264201946315492667174670489454576610993722063668720936949698308641684437046485292906040368218708947194882991333823400676584552108673913669306118549159369734833071319506680872661886898225398171896329288732499509337836463164384614967690283284184136334006184670970038275153458133098776493171693249836721707632973537518273692928527497068121779606865163943692606596848941143683627629169873171114739189794632775706536177409526869936538136348369630762610163490694986911903178859927739423796596582439105912599204583810744740479342404550513976713360591833475711496976836332005885151231030818986389033126325119226309584818058301429763149472903925739659774337307109687940297813700796873400566095281249251559137923743113469044584820584542770746490047535898370961450995287930441328833542933636539386097851378739174078158132593877463567524868470795313740375647059352650583871001646082364842709333314532933141725314262510333047099681128329792983694287727106008519184538377065089964546579000542260452715147077137452076302879112802094308224402060706282308208678850263037733351444756065285721900833083634023860920356321356382318484421995141074387149942542550133039926139155010190614633196727199469768170121209097613598302048321148497175007150184555423280152476407230065108963493864309805262458731715886593175689747530567359088332598961192319881186961400055356294945140450806114214490420494488195417136403967132286869444062615622815233336396279517485469862880809956041938378161336156979526713793454354319018535526139196959277008828634440008764782171726908279132449346924807112458895951881542382952497102061566169481361027449429416228859029591798532192088531772405831332410104172391828682208239266557146168642210154401086974397003647170356217905465594944933170065175291981240572835024374361017977695084363373226470846255498368067535698751768103817520605779489720985090002595078926475029239124403277040719184010486962844211160986922952144938430963756963408787147933184107904312838985994963982784496688190643908936394858404598837762653245968848299901455260080572627872653099337092686312650606546084656202210845053932679131706841390889951865628810708670194485207654079244417321332232196041180225814997707988397637369268804955010409293139079608620689856756139863786355461818276369292665568749282154818479663283704713663666842236273009790537968973379093662517795316051746410279831975339791651704861188979834156418998505732384020730350075052669695594594753081616632885311572351609352631187129393729557398993321794518158269658073683417584260274184235030846683698193879109933863561435059993549597333514217973995915742796206889856584584493875193805504685107321011420502217815128118404137521250590361329385146997427292035829509205811367395885622247504950811752188165627552137681095618860955664505372763469788466067973748736658759105548049054658237200096293754479296344115915560231138432518248450383276234795400180535655551222536669390799317067896797756236783441752907948891802488298281245615590113512482344591092230909649423933991714557108941323849548468680509335203770970493785006636718394242326057416155509029270066096293813080877339787718442773014833232754755736783313789547145535129557193581885962158684756484475219230828423777756012721234731368785218564362953263092286535139160440838713013861328416662947756104857391740722209360021068158824717926850831589591367302143596625426553706038593255843919505223140871543995210720444637571268651195165483531243799087083070940544241515809139594158704843980567202482856647644447362604252961907705738740354460336586792214638225365973993001974668174157206242597452556046629209551599663117912609702944345176608757619561247872050409609062772362769045711709729061066411540898769707847042980034982033351136308779676287974627667703893888026848748953201438481632037717854462054861859986684636917120883602793194058658599425778515519713798214407689849211487929150179918547200558584524139792439377469676039518101451697712860634235352474290575260172151562129240720796835619967878383018961055921622371480562682714603085506932806187937976625431071742833007749235636990700120567425836156233607547500827789537909071263596294926763891075439575973972560478399510790078797663071024149826759934524980569432847819403219226207098701759952415628476519584752248050578584198211799092030838909208236225141975964892778944163008811179723219354847713753084628828883321692575327835658786892010648865205021985527642612795652759365359359048052205587306960853879351302215329380382709288672566169552660197788055450054177652374955319992805345989662399494012874012278677451052584166987084866267245492968785684175508510910492913793478551456991152291522750377308973310200505007906906671435839262115546753934391579860133029544403932422271218975046896384482252108820546415274174791693426071019927278518520520164621127271231748277979659289204850823018535192067323372368224831050642902153626845618478009622824733150764188329304815843651352730897836727021023023627320228373645802602496000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
+ (("%b" (factorial 4000)) . "1100101100001011001001011100101011011110010001011001110111110101011001010010110110101010111000000111101100010000100001101111110011100001111110100000010100011101111011001100001010001000111111111110110001111011000000010110101110111001000000010100111110010000010110110011011101011000111000111000111000111111001100110100011110101101011000110000100011000001000001100000000110100110000100111101011011111011101101010100100010010010101000011101100001101101100000101111110100011101101111100100101101000111000001001101011110111110110101111001111000001011010000110001001101101100000001100101011000010100110101011111011110110111111000000010100011111111111001010001010001000101001001111011001100001000110011010011101000101110110000000001111000010111101000010001000110000111111111101100110001100110100100110101111011110011001011011000111010010010111111001000010110010001001010111000110101111110101110010101100100101101000111010011100100001011101000100111001110000110001111101101110101111001101100100010101000100001110010011000101001100011001011001000111101110001010001000000000011100100111001001100111110001110000110110000110111111101000110100111111000111001001111011111011111010101100011110000010110010101110110010101111011101000000010110001100001001000101010000101110010011011010010000111100001010100111011011010011110001011110001010111000110110010100110011000001101111100001011110010011000110011010001011000100111001000101011000110101100000000101100110000011010100111011011101110101100100111110100001101100100001000101100100100101111001001101101110010100111001111101111010001110001101010111010011000000110001111011100110000001000010111110100011011111010000100100100110111101001011100100101100111101010011100010111001110000101110111001010000001010110010011001111010110100010111100000111010010110000001111000110000100011111110010000101100010100110010101100110111001101000000110101101001100111101111111111111100010110001100001000001100110000011101000110101100000010001010000010001001000001011111000101011001000100000000000001000111000010010100100010110011110010110101011001110001110001101011001001101101110101110000101110011100101001011001000011011001010010010100101110111111000100110111000101101100000011101011111010010110100110100100001110100000001100010101000110011100101000000000111101011000000011100100101010011111110010000101000100011101011001011100000101001111001011011110110110101010101011100101010000011010011010100100111111001000101111111111101000000011001110000011110101010010100111111101111101011101100100111011010110011001001100111101011111000011010111111010011110100010011011101000100110011001111101100010011010001010001101111110011110111011111111100011100111010001010001010010000101100110001011111011001110010010111000110010010100000100000000011100110001111001011101111001110101010000100001100010001010100010000100000101111001001100011001100001110010010000110001101011101110100110101101000110011000000110010101100010100001010110011101100000101100110010100011100001101001111001001101000110010001110010000001100010110111011011011100010100100111001101000010101000000000110101100101111010011010100110001011000101000101100111100001011101110101001100001110011111100000111000100010101100010100000011001110100001011111011101100000110001110011001010011101110001111011110001100011110100010100101111101001000101000101100011110111100101001101010011001110101100001100100001110111010101011111011110111000000000001111101010010011001000100010010110100111001100101110001100010011101110001111111001101000101000001011111011000110111111100111110110101001011011101111010111010100111110100101001011101010110010010011100101011010101011111001000110110001110101001100010100010011110011100100101010011011110110011010111000111011100110011000001001100100101010010100001111110010001000111001110010100100110101011111001001100001001000011000010011110101000110000000110010010101100000000010010111110000000101101000110100000111001010011110001101100101010010011010010100110001111000011100110110101101001001000101001001010110110110010100011110001111100011010000111001101010001001010010110110101101000000101100101111000000110100000001001100100100101101111001111011001000000110101010101100010000000001000000001001111111000010111010010000101100001101100110010010101101000111110010100101011110011101101010100010100000111100100100111100100111001010011000010010011100101001110010110100001001010010010010100001111010010110000110111110001110001000000011011010100111000011101101000011100111000011000100100001110110100111001111010100000000111010100010101101101010110010000110101111000100110000101101000101010001110101010001101000011000111010111001111100101000010100000110101101000101010111110101001110100001101110100111100010011100011010100011111000010000000111100110010001111000110100011110001100010000110110011111010100001001010000001010110010110111010011000110011000101001001110011110011110001101010011000000001101111010011110111110100010000010111011111111111000111101001110011111010010111110001010101110110010001001100011001010110000100011010100101110101011111110010101000111010001100011100100101111011111101011101100001101010010011111001001001111100101011101110000110110011010010101000000011111101000111000011010110101111110010111101010000001010111110000010011000011011100010010000110000100010001111011100110101111101100010001111011110100110111111110010110000001110111110010010000001101011010101010010010100100000110010011101000111010110110001110001101011010000001101000110000000101010011111110111111001110101011000101000110110000111111000010100011001001001110101001000011111000011100000001001111001000110100101100111010110110011110011101010111100100001111100000110110111111111000101011110111010001000011101100101111001001100100111000111010111100000110100001010101010000000111111100100011011111011000110101101110001001010100111000001011011001001011100101010111001101001101000100111000001011110111000010110111100101111010111100011110000001110100111100000010011001111011010000100000110001100101010100000101001111001100110101110111110001111011100100100000110000000101101011010011000011011100011101110000110000111101011100010010011000111110111101000101010101000011011101010111011010100000110000001101110000100001001010110100101011010111010101010010000110100001111101011111010010011011010011001100101110110001100101100101011101110001100001110100000010000111101011011110100100111010001011101000101011011000000011000011101011111011000011001100100100001010110010110110001110010101101001011001111110100001101011111000100100000100100111101101100001000001101111101000011011101100000011001010101000011001011100111010000110110011011011001111101000011001000001001101110111101111101100011110100011110110011111110111010110011111110100110001000110110101100011110011111001010111000111010100011110110001111011111011101000100001101000010101110011101100001101011000100100111110111101110111111010011000110101011000011100001011100100100110010101001101110101111000000101000111001110101110110110000000011001100111010011100110010000000111011100111010011110100100010101010001100000110001100101110001110011111101110000001111101100111101110000111100100001011000000101100110001001001101111111101001001111101011000001011011010011011101011010001111010010100010110011001110011101001010010011111001110000110100000110100101010010110101100011001101001011010110110001011110010011110100110100111111000111100100101101111000101100111100111100100111110010111110000111001001000000001110010011100000101000110110000111001100000111000111001100011010110100101101110011000110100110101000110101001111100101000100010001110001011001011011001110010010101101110111100101000110101101111101010001011110100100111000000100011010000110100010111100100100111111111010000111100011010001110000100010010001010101000111111101001001011011110101000110010010101111101000000100101100101101010100000111101010111011010011100111101001010011001110011000001110000011111101000001011010110101010101001111001011011110111011110100001111110111000100110101000100111001111001100011100100110101011010001110111100000111000100011101000010010000000111001010000111010110111010110011001110101011000010000001101110011001011101011100010011000001101110101000110110110000101011011011100101111110111110110010101111101101010100001101010001100001110011010010110101111100010111011001000010111101100001000010111010100100010001001110100001010110010100011110110011000111101111110100101001101011001011010100111001000110010110001010011111111000011101001011011111010011110001000000001101000001000010010100111011100000011001110001011011110001010010001100010001100001010100011111101010110111010101101100110001001001001001010100000101001110100000010100011101000111001111001100010101111000011111101100111110101010100000111100011001000101111110110110001011110000101110100011110001110000010000000101001000100010001000010110010011001011110011100111101101100010101111011101000101111010100111000100001000011010010111101100110001101000000110010001000011010000100101010100111100011010010110101100001111011001011000101000010101001011011111011110110010111000000110110111100011000100101010001100110111111001011101011111110111011001000111010000001001011110111111101010001001011001101010000010101101101110000010011110000110111010100001101000100000110010000110011000000010100100001011010010111100100111001000110001010111111011111011001101101100101101011101111001100001010111011110010110100011011111100100111010100001111011011010011111110111010000111110111001000110001100101000001111100101001111101001110101010000100010011111000101010111000101011000100000000001000000010010010010010000101001110011110101000011000000010111001111011000111111101010001111000001010101001101111000101100001100011101000011011000111100000101011011100000001011011101000010011110000101011111110100010101001011001110001101010101001001111001111110110010111111101111001001100110011101011110001101000011010110111100101100110010111001000101011000101101001100111001111101100000110011001000001001111001000100010010110111111010111110001110011011000001101100010010111000100000100100010111100111101001001111101011011110001110111101000001000001100100101000111100010001101011110010100000011010010011100100100111010010100001111111111000001101101010011101111101101011010001000110111110010011010101101011001101100001111100110101000110111100000101101000011011111110110001101110011011011100111001101001001100110110001001101001100001011111011000110010110000111110011001101001011000010111101110001010111100111101011011001001000000000001011011001101011000010100011111010110110110101000011011111010100110001110110011101010010101101010100011000000101011011000101111000011011001001110001001001101110111101011101101111010111001111110011111101100001001011110101110111011111110100001101000000110101101100011110000101010000011100010110100101010101001100000110110001100110011000001101001101001010011100010001100111011010010001110001100001001110101001000111100100001100001101000110010111011101101000001001000011110100011010111110010010001010011000110000101011110101010101001010111011100000101101001001001101101000001011000010000000111110110100000001100000101101110110001100011011100101001001000000110001100001000101011111011100011100110100111110111100101000001010100101011000111011000110100101100111110100111001101010100100101110111101000111001001111101001110000110111100101100011110101011011010001001110000110101011010001101011010011111000101100010101111111110010010000011111001111001011101111010101110111100100100011001110010111001111011011111001000010000110111100000001011110111001010010010001000011001110110010110111000000100000100000011001101010011101100101110010011100100000100110111100110011001001111010111111011001100100000011110010101111000101100100100110110000011111001100011001011100011010010001100011111100101101011110101011001111110001011111011110111110100101110001111110110101001111000000111011110110010101111110000010011010000001110100011010010010100111010100101000111110110001011100111011011000001100011101111101100010000100010011111110010111000101000011011100110100100110010000100110001010110010100010001001001001110111001010110111001101101110110011001100000101101111111110001110011110111100011111110000110100011110010010011100110001100000100110100110101010111111100111010010010110001100101011000100110001100110000010000001110001110100010010001011000010111010100011011111001110111001010011111010000101100001110000111001111100011101111011001100110101001000000110101011001101001001001110111001101011101100010101100110000100111000100001100011111110001101110011101001011101011011110101110000000010010111011111001011100111100101111010001111101000010000110001101100110001001000001100001000001010110101111110010011001111110010011100100001100000111101110001010110010110111101101010011111000000111000101001011111110010111100010101101110011100110000101100100010100001100110001111010111000010100101101110001010000001010110111110011110001100011010000001000100010101001000101101010101111000100011001000000111100000011101110111001101111100101101011100011100000111001110110101010000010000000001111111110111111000011010000011101001000010000100100111011001010100000000001101011110001011111010111101011001111100000110000000111101100010100000010110000000101010000000101100101110111011011100010000111000000010111001001101011110011100111001101111110001101011000111100000011100000000101001001001011100111000010110001010110110011010100000000100100110001101001010011111111001100011010101101010011011010100111000110100100100011100101101111100100101001110001000110010101000110110000101000001001000001011000100010111110100101110000101110100100101001001101001001011111000110101111110011001001000011100111011011100101110011000000000010110101100011001000111010111010000000101110010001101000001101001101011111110110110010011110101010010111001000010001010111100111011010001000011100000100000101111111011000010101100110000001110000011110101111111100000010111000011110000111011101001001001110100110011101000100100111100111001100000100101111110101011010101100110001000100101000001100010101011011010011111100011110001010111011000110100010101100001010101010110111101111010001011000100110111101110101001101100011000011101100100111100101000011011111111110010111111101110000100101001110011111100000001101110010110111100010000110010111001111000111001000001000000001110001101000000110111101111100111110100100111000101101001101011100011101001001011011101011010011101000101001000001111110000001111000001010001011101011110001100011100011011001110101011100010011011101000110011110011101001000101011011110010100101010011000011010011101100100011101011010111001110010001000110111010101110111110100101001111000000011110011100110001011000111111011011001011010110000110010100110001111101010000010101000100100111101111010010111011111111010101000110011011110011010000101110000010110001001100001011111000001011000111000000110100111100000011000001000111001000101010010101001111100011101100011111011011101101011001010101100110011010101101111100101110000010100011100010101010101001010010011101110111100100001010100011011000111000000010011001110101101111010111110010001001001000000011000010110001101111100001111000000001011111100000100110001011010111010101000101100110001111010011001000001111000000011110000010010001110000001110001100001011000011111000111101111000100111100010011010110110001101110111101001100001101100010100000010011100000110000111011001100100100001000011101000011011111011110010100100100010000001110110101111001100100000010011100010010010001101010110111111111001011100001100111110111011010000001001010100111111001010011010101011001010011011110111001110011111100111010000010001001000100101000010000110000011010000100001100101110111000011100011100111111010011100100010001100011001100011111111110000110100110000010001011111001111011100111010100000111100101001010100100111100000100100000101001111111110110100011110000100101100100011110000100100001001001011111011111000111001001101011110000111000000110000100110100001101000100011010110001010011010110111111001111110001011000011111100000011011010000011110101011101100000001100010010011111001101100011101000010010101111110111100000011000111000110011110101101011100110111101011111010000111011100101010110010000110001001011101011111011111011010000000001011101011000100110111000111111001110100111110110001100100011000011001001011111000100101101101001100010100010001110010110010011110111000010110011110110110011110110111000101101101100000101110111110000001110011010110011010111001101010001101111011011001110101010000000110010101010010010110010100110100001011001000110110110110111011111001101010011011110011001111011001101000111101101110101111100011010011101010110101000110010001000111100111000111110100100100011110010111111110110110101000111000001011110010110001100011011011101010100011001100101101010100111000000001100111110011010101101000101101110111011000101011111100001010111110100000101001001110011010010100110000100010000100011100110000010001110010010010101100001011110101010000010001011011001100000101100100010110101000101010110011101001011001110011000010101101010000001101110111110010000111001001110110000010001111110110101000010001000111100110101110011111011100000110000010000001000001000001010000110110010101000101110000101110000011101010100110111101101100110101000010000100110100011010101010001110110010100111011011011111110101001110101000111100101110110010110111100110101000101111010001000110111000111100010110000011001110010100001010011000110101101100000110101010111100010011011010000110010001010000100111100111111011110001110100101011011001100001011010011101010001100101100101001110110111110011010111010010001100011000111001100010010001111000110101111111111100100100011101110101011001010010000001111111000101011111001010011111111011101001101100100011011000100001100101010000000010110001010111000111101101110001110010001111001111110000110100111100001001100111011110000111001000111010111011001111111011010110011011010100111010001101111000111111110000111101101110101101011111111011011100011010100010001100100110000011100000100100000110000110000001011001011101110010000100110110101001001001111011101101010111111011110011001100101010011110001000111111000100110001111100111001000100001100010111011111101000110001001111111110111111111110010111001001010101000100110000010001000010000111101110011010111101111000010010111111100101010000111011010100011101001001000101100111111000100011001001110000110100111111101100111100001110000010011010011100000111001001101001100100010100011111101110001011010100100111100010100111111011001111000101000011010111011000010001000101110001110101011101100011010010001010101001001110110010000000011000010010000000000010000111010001101001010100010110010110100001101101101101011111111011011001001111101100100010011011101111111110001010101100111010001100000100111010100110001110001101100101110110001001001111001111010001011101100010001111111001000110010010100001100001000100111000011111111110110001111100000101110000111010000100111000100101000000110010000001111010101001010101000001111011010010011001110110111010010101110101100110010100011000100011100011001111110101001011111100100010000000110000101001101101011111100111100101011111111100000011111111010000001101100011011110101101100001110001110010110000100111010010100011110101001100001101011110110011000001100101100111110101111011001000001110111100010000101011100101110001111110010100110001000110011101010110111001000011010100010011111011110011000110111111101001100000101101111100100100000010001110011010100101010111011001111000101101000000100011110001100011000000011000110110110011001001100101000001011010110110111101001010100100010010110100111101101001001000110011100101110100100110011000110110110100101001001001101100110110011100100011110010011010001100001100101111000111111111010111011110110100111001101010100110101100001000110011010000111000000001110101111001111100100010010010100111011000101000000010100111110110000110001101100011011111111111100110000001001101100001110010101000100100100011111010101001001101000011010101100100101000110111110111101101100010000101110100001111110000010110111011111010000010001011011000011111010001001000100010001110111100111000001101111111111101101011011001001111101101111101100000010101010100101011110011101111101000100111000111000010111101100000111100000100110011011011111110100001100001011110100110000001101111001111010010001100001110001000010000100001110111011101111111101111111101110110110011101010100010000000010111011110010111010110110010110010101000000010000011000010000101001100000000010110000010000010110010010100100100111000011001100010110101000101100101110011000011010100001100010011100011111100101100010101010101001100101101110101101110110100001100110001111010000011011010100011100100011001111001010010111000110101001100110101000001010101000110011000010001100010100011101111101010011011011010010011101010000101001000010010100011110001000010111111000010101101110110111011101111001000100011101000100001100001110101000011101101001100001100011000000010000000001110000111000000010111100101010100110010010101000000011010011001111110100111100101010101111100101110000101011011011111100100101100001010110001110100001111010100000110011000111110101001100000111101011101111101010010010001111010001111101001110000001111101111010011011011111101101011101110101010111011011001110100010010111101111101001000011001001110000111110100100000000001110000001010011000110010100011000100100100101111111000100111110010000111010110110001000111111110001110011111011100010011011110011110011111110111001111101101101010101011101110111000111101010000101011000010000000111110001000001100100101110000011010010111100001101010100101100100010010100101000101001010101000001000011100100001001111101110111010111000011101011011100000100011010110110111100101001111110011100111010101111100000110010010101010111001111010110010001001010010110101010001110011001111001011001100110010010001110110100111001100110011000110101010000000110110000101111010011001111110010101000111010010011001110110110010010010000101101101100111000110001101100011011100101010010101010011011110101010100111111001010111010111101001111101001111001111110011011001111001110101000001011111010111000111101011001011101101000011000111110111110001000111011010001000110010011110001101110110101010100010110011111001010110001010010000110000110000110011111101011100101011100111101010000111011101111101011000001100001001010111110110001101111111100101101001011111010101011010111100101001011100111101100010100110000101000011000000011100010110110101000111101111001110000010010101111011001101011110100011011111110010100000111111011001101010111011101011000001001010011010001011100100111001110000000100100110001011000101100110111001010111111011101000010101011111001001111101101111011011101101011000000100110010000010111111101101101101000011000111100011000100011000011000000011111100000110101011101111001010010110010011001111011110000000001111100011110000110011100001000101011101110111110000110011100011101111100000011101100111111011000000101100011101110111101111011011101010111011001110110110011010110101111110101010100010111100110010010000000110010100101011111110101001011111011010110010001000001010011111011010110111101101101111011000100011011000100010110001011110110010011001111000110001110011010001010111000011011010111011110000011100011110110010100101001101111101110101110010111101001110110101110110011001000000110110000000001000011111010101110101111111011101101101100010000000100111000100000110110011010000010101101001111010100000101100000100100011010111101100011110111011011000010100100110100110101001010011110110011101010110000000101001010000110110111000110100100000000011000110101100000000001110010110000001010100100001110101100100111101100100110111100110100111111111000011010010011010000001111100010110100001011100010000010100110011101111000011011100001011010010010110001011000001110100001110100101101011010000101011110111001111001101001001001111100101000110011101001111110101111100110101110100101111101000111110010011001100110001001110100011100000001010000110110010011101110111001001001011101100110000111110000010110010001000100111111001100010100000011110011011110111000000000101111011110111010101110010011011011100001100001001101100011000010110011000101100001110001111100000010111100001110101100110100001100000011100110101001110110100100011110111111001001100100111010111010110110000001111010110001111101111100100010110001011001111000001101011011111101111000010010010111011100110111100100110010110111000001010100000001101010110001010001001010011010000111110010111100000110010000110110000100011101110000101111110001101001001000010011111100001011101011001010100001000110000101001100001010101100101001011000111010101000001111000111100000100001111100011000000111000101010100111111110101010011010101011000111101101010011001010101010000111011110010111001101001101010100100110001100010001111110100110001100010100110101111100011101001100001101111111110110010010110100001101001111001100101010100011010100111111101100101100000010100110111011000001001000000001110100001110111011011010000100101011011100100011100111001101101101011110001011011000111001000001000101111111100111100000111011000100111100101111010011110000110100110011101010000110110101101000011011011010110011110101110110000011110101110001110001001111101111100010110100001010101000101000101001101110011001101111000100000000010100110100110011001010001100110100011100100101010001010001010101001101010101001001100010001011000111011101001110110101111111010101000001011101011011011101101011001000101011110110010001100011111111101100101111110111011001010001001000001100111010111111110001110110110100010000010011001101001111000010001010011000011011000101101000011111101100111101010110000100101101001111000000111100010110110001001001001011111111100000010110100100110010010010101101110111101000001010111100010100011011101001100000001100110001110111101011011101011110001110101011110001011100100101011010100000101010000100100110101011001011100111110011011011100100000111011101111111001010100100111111001001000101100001001011000011110000010100110000110010111011110111010111011100100011101000100111101110000010000110011111110101010111100000101001101111100010110101000100111110000010011000100000000101010001111010100011101101000111101100001110010101100100011101011011100110011001000011110111010100101011100110100101000110001100100110001101001000101011001110011010011111110001001010101100101100000010111110001010001010100110001000101111110011101010100001011100010010011001101000101011011111101111010110010111100010011110001100001110110000000111101011000001100010100010110011010100011110000110110100001010000110111010011000100100011101000000000101110101111010110000010010111101100011101000110111010111010000101001100110011011010111111001011010011110000101001101001111000000011111001001110010010111101001010010001001000011100100101010010010001101111111011001000011010101100010111001001010001000001010010011101101111011110111010101110001100001000101001100110001010000011011001100001110101010100001100000110011100111101000000101100010101001010101010100010000000101110111001000100010110001110101010000001111100101101001011011101100110000000010001100111010111000000100110110000001010011001011100011101000001000010011110100111100010100001000000010011000010000001101010010100111110011011101110011010001111110001000001011110110001111101001011111100001101101100011111011111010110011000000101010100000111101001001010111010000100000100001100010111011110011110000110011010001100001110100101110100000010000011001110110111100001001100000000010011010011010001100110100110110001100101001000000101010011111010100011010101001101100001110110011000010011010011100100011000100011000000000100000000100110001010101111011100110010100111101111011010010000101001011110011110110000010111010011111011110001000001110100110001011110111101111110000001001110101100110010101011111101000011011000110011011010010011000011101010100011101001000111100001000011100011000101100001001001011101111011100010001101100010110001101110111111100001111011010011001111101111011010000101110101011110011110011101000101000100100001101101000100000001011110010000001111111011010011111111111011100101110000001100000011011011101101100010011110100011100101111011111101010101010000011011100011101111011000010011000001111011010101011111001010001110000100101110110000111001011000010100001010000110110111001010110010000100101101110010110010101011000010100010101111010110111001011011101100001010010000111100101111100111011110000101010000101101000011111110010011011100101101100000011011100110111000010110100000000010111011111111110100010000110010111110010011010111000001010111110101001100100001100000100001100101001010010110101000000011111110011011111111100111100011010101111110100100010010000101110100010010101010101011000101001100110101001011011001011110001000101101000111101111110010110101001001001000000001000001110101000111101100111010101110000001001111101110100001000011001011100111010011001001010011100110001111101100111100000001001000100101011011101011100100110111101011100111101001100010001111011101010100101101101100111101101010100011011111010101000111110011011111010001100000000010000100001000010010011100100111100101001110111101100110100011010101110010001011010111001001011000001100010000011000001100010000100000101110000000100100101000000100010011000110100001111011011111111000010011000110100100000100001000001110011101101100100101110101101110101111110101101111111101010011011110001011111010100001010110010101101100111001110010000111011101011100010101100110000100101000110111101101001011001001101001001011010110101011001000011111011000011001110101010000111111101100110001100101100111011111111110001111011001101111111111100111001100101011011011100000101111010001011101011100101000101110011100110100111001000000000110100101001010111010000101000010000110001111110011101110100100111101010101010101011000000001110000100010101001000011100101011111000101111100100100110100100011111111010110010101111111101000100010100110101001001110111011111000111000000101000111011011000111000000001101111100011001010000010111100001111100101100010110000110100110011000101101010101111101110001000001101010100000010000100010001100111100111010001010110101111011110001001101111101010101011101100101001011000110110110101010000001011000011001101100001010000101010110101111000011111000011101101000001111101100100001001110001111101101010000110100010100010110101101000010111010111100010111010011110000000000010000100000100001010111011000010000110101000001101010001111110110101110010101000001011000100000110010000100110001110100001011100111010111101110101101000101000000011000011101011010100100000000011100000001010110000000000000011101011110111110101001010011000110010011101011101000100000111110010001001110110100101011101001010111101100011110001011010100000101000101001100111000110111111110100101111111100000111100100100101000100010000011001000101010010110101011011110110000001010110010100101101001011010011111100101110000111101001100101001000110000000100101101110011000001000010011100010001011110110001011111010011001000101110110100000011110100111000110110101101000010011000011111010101011100011101001010010000010011001011011000110011001000100001010000000111111011100101101111011011110100100010010100001101011110010010110111100011110010011100111010011010111010000100010111101010010011000110111101100101010000000110011110100110010111111111110101001001110110100110010111010110110010010001110000110010011000011001111011111100111001110001110001110110111011100110110111001000110011000100100010100000101111010110110001001111000110000100010111101100100011110111000101001110111101000101101001110111111100001000111000010110110001100010101110001010011001100101001001110011111100010001000101111111100101101000100100101010111001110100111111000000101111011111011101100001111000111111110001101111101011011100101111011011100010110011111111110010100100000000000110110101110010100011111111101111001010110011111110111000101010011111001111011100001001011011011010111100110000110111000010101110100111101110010101000011101101010110101101110100111011001101010010110111101101101110110101101100001101001111011000000100000100010100001001001011011010101100000111101111100111000000111001111011011000010101110101010010011010101010011111111101010011101101001111101000010001111100001101110010001001010100000101000110111110001000011010011001101111100011011000110110000100101101111011000111100111110010001000100101101010001011010001011111011001101001001000000010100010011000000111000011110000110010001101110101100111001111101010000001000110001000101100110111100100011010010101011111001000110111011010000011011111101101101100101100111010001110010000110111111000101010011111110011001011001101001110011101001010111010010011000010100111101110000101101011000000111101111010101011000011000011101111100001110111000001100011000111111111111101111111101110010000001010001000010111000101011001111000011101110100010110010100101000011100001100100111010010111001101000000110000101110101001100101000110000110010001000110100101010011110001111110100111111101000101000001010000000011001111011110011011100000101011011001101010000011101111100111000000011011011010010100111001110111101011110011100001000111010100000000100011110011001010000000110110011011111001010100011000001011010100010111011001010000000010000001111011000001000011010001111011011010101011111001110111100010100100000001101111111011111000010110110101001101010001010111110000101011101110101101101001111010011011001111111001101101111111100101111011101011111000011101001110000010011111001001100001010100101101100000011111100100000010011000001010101010001110111101110001001010100110101010110001110111111011111001100011000011000110010100111111011111101011111011101111001000010111100011111001110100110100110000101000111101111110101101111111001100001001010110111100100100101000100001000010100110111101101111001001011111100110010000010001000101001001011101110010010100111100101101110010010000011001110110001101001010001010110011000111001100001011011110110101110000001001000111100111001001101001010001000011100001100010001000110101010101101100001101001110001110100100000001000100101100100001000001001111100101001001101111011110001100100111001111110001100000100110111110001010110110001000011110110111000100110110000011010111111011101111101100010110100111000011000100010101011011001000001111010110000000101111101110001010111010100110001011001110111111011100010011100111011100111110011010100001101001100100001101110110001100110111000000101100000111010111010100010000011000101011100000111111111101100000111111011110000010100110000110111111111011010110110010000111001001111000100000001110001100000001000001100000001100100111101001011001000111010010111101000110000000111111100011011110100001101001000111010101101001000000101111111000001011101010111100010110101011010101010001010001001111111000010011011111000101111110011000001010111001011001101110011100111110010010110101010111010111001010101111000111101001110011000001000101101111000110011110011011101110011000011101010101001100110001101001010101011101010100101100100110010110111100110010101101111110000101010011101110000100110010101111111000110110001110010011100110101010111010010100101011100011000011100101011001101100001100111110101000111010100000101100101010001011110101100011100111000011100001101011101101101110111011111100111100011110101101110010111001000000111100000111101011111110100001100111011110100011111100010111001101100000100100010000000001100111111001001010001010010100111111001101111011011100001110100110010110101001001110101001000100101101011000110001110010011010011101010100110111111111110001100111100010000011001010001000101100001001001011111000011101101101001111100101100000001101110101101010010110001111011101101101101101100000101100001000000111110111010100100000001100110110110001011100111000001000011001001000100000010011010011110001011010100010110110011100011001111100100001001011101010010001000100000101011100010011101110110100110110101000110110001011010110101100101010000001010111010000101011110110100000101111101111011101001011000010111010101011010011011000000100100010010001111110110110111100110000101111111001010110011001001000110000011010010000110000000110011100101110011101111100110011010101100101101111001010101011101011111000101110111110010110110010010110100101110100000011000011111001010010111101101110010100111011101001110001001000110101111001010101011110001010101111001111101001010111110010000001101100000100001001111101011101010001000000000001011000101011001010111111010011111011000010010100001000100010001011111011001010011000111000011011001011111011010111000111111100111001001100001100000100000101010101001000111010001001110100101100101011000001100100001011111111000011011111111111001010111101111001101010011111011110011000100001111101111011001110001001100000011011000011101111000100001010101001011011101010010100110111100001111101001000001000110001010000000101001010011010000111111101010100101011100001111011100010000011011101001000101011100010101000110100100101111111010110001011110010110010001010011110110011101100011111101100001001001101001101100001001101011000000000101110010011111011000100001011000001010100001000100101001010100000001010000010111011110011011000001010110001011011010111101110101010100110100100101101111100010101010110000000010110010111011001010001000011110110000100000011111111110000111001010100000000000010100110011001010000010000101111101001011011100111100001111101100101100100000010110010110011111110111010110101111101111100010111100100010111110100100001000001110011110000111111110110000100011010100001111000110001000100010010000001100100100011010101100001010010101100101111100101010001101100111011110011011010111011100000110010101100101111110100100000000100000100000111000010001111001100100000000000010101001000101000010100010100101111110000111111110100010010100011101100011100100011111001110111100100000110011011101000001011000100001111110100101100000111011110000101010010000110010110100010110000010011101101000001101101110010000110100100111011111110001000011101011000101111011000100011001100000001111110100111011000001111111101011000011100110011000111011010110010110110111010010000101100110111011100000101110011000000110101000110111110011100110100011110100001011101001001101110110010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
+
+ ;; testing base converters on small ints
;; octal
- (("%o" 126) . "176")
- (("%+o" 126) . "+176")
- (("% o" 126) . " 176")
- (("% +o" 126) . "+176")
- (("%+ o" 126) . "+176")
- (("%#o" 126) . "0o176")
- (("%#+o" 126) . "+0o176")
- (("%# o" 126) . " 0o176")
- (("%# +o" 126) . "+0o176")
- (("%#+ o" 126) . "+0o176")
- (("%6o" 126) . " 176")
- (("%+6o" 126) . " +176")
- (("% 6o" 126) . " 176")
- (("% +6o" 126) . " +176")
- (("%+ 6o" 126) . " +176")
- (("%-6o" 126) . "176 ")
- (("%+-6o" 126) . "+176 ")
- (("% -6o" 126) . " 176 ")
- (("% +-6o" 126) . "+176 ")
- (("%+ -6o" 126) . "+176 ")
- (("%#8o" 126) . " 0o176")
- (("%#+8o" 126) . " +0o176")
- (("%# 8o" 126) . " 0o176")
- (("%# +8o" 126) . " +0o176")
- (("%#+ 8o" 126) . " +0o176")
- (("%#-8o" 126) . "0o176 ")
- (("%#+-8o" 126) . "+0o176 ")
- (("%# -8o" 126) . " 0o176 ")
- (("%# +-8o" 126) . "+0o176 ")
- (("%#+ -8o" 126) . "+0o176 ")
- (("%o" -126) . "-176")
- (("%+o" -126) . "-176")
- (("% o" -126) . "-176")
- (("% +o" -126) . "-176")
- (("%+ o" -126) . "-176")
- (("%#o" -126) . "-0o176")
- (("%#+o" -126) . "-0o176")
- (("%# o" -126) . "-0o176")
- (("%# +o" -126) . "-0o176")
- (("%#+ o" -126) . "-0o176")
- (("%6o" -126) . " -176")
- (("%+6o" -126) . " -176")
- (("% 6o" -126) . " -176")
- (("% +6o" -126) . " -176")
- (("%+ 6o" -126) . " -176")
- (("%-6o" -126) . "-176 ")
- (("%+-6o" -126) . "-176 ")
- (("% -6o" -126) . "-176 ")
- (("% +-6o" -126) . "-176 ")
- (("%+ -6o" -126) . "-176 ")
- (("%#8o" -126) . " -0o176")
- (("%#+8o" -126) . " -0o176")
- (("%# 8o" -126) . " -0o176")
- (("%# +8o" -126) . " -0o176")
- (("%#+ 8o" -126) . " -0o176")
- (("%#-8o" -126) . "-0o176 ")
- (("%#+-8o" -126) . "-0o176 ")
- (("%# -8o" -126) . "-0o176 ")
- (("%# +-8o" -126) . "-0o176 ")
- (("%#+ -8o" -126) . "-0o176 ")
+ (("%o" 126) . "176")
+ (("%+o" 126) . "+176")
+ (("% o" 126) . " 176")
+ (("% +o" 126) . "+176")
+ (("%+ o" 126) . "+176")
+ (("%#o" 126) . "0o176")
+ (("%#+o" 126) . "+0o176")
+ (("%# o" 126) . " 0o176")
+ (("%# +o" 126) . "+0o176")
+ (("%#+ o" 126) . "+0o176")
+ (("%6o" 126) . " 176")
+ (("%+6o" 126) . " +176")
+ (("% 6o" 126) . " 176")
+ (("% +6o" 126) . " +176")
+ (("%+ 6o" 126) . " +176")
+ (("%-6o" 126) . "176 ")
+ (("%+-6o" 126) . "+176 ")
+ (("% -6o" 126) . " 176 ")
+ (("% +-6o" 126) . "+176 ")
+ (("%+ -6o" 126) . "+176 ")
+ (("%#8o" 126) . " 0o176")
+ (("%#+8o" 126) . " +0o176")
+ (("%# 8o" 126) . " 0o176")
+ (("%# +8o" 126) . " +0o176")
+ (("%#+ 8o" 126) . " +0o176")
+ (("%#-8o" 126) . "0o176 ")
+ (("%#+-8o" 126) . "+0o176 ")
+ (("%# -8o" 126) . " 0o176 ")
+ (("%# +-8o" 126) . "+0o176 ")
+ (("%#+ -8o" 126) . "+0o176 ")
+ (("%o" -126) . "-176")
+ (("%+o" -126) . "-176")
+ (("% o" -126) . "-176")
+ (("% +o" -126) . "-176")
+ (("%+ o" -126) . "-176")
+ (("%#o" -126) . "-0o176")
+ (("%#+o" -126) . "-0o176")
+ (("%# o" -126) . "-0o176")
+ (("%# +o" -126) . "-0o176")
+ (("%#+ o" -126) . "-0o176")
+ (("%6o" -126) . " -176")
+ (("%+6o" -126) . " -176")
+ (("% 6o" -126) . " -176")
+ (("% +6o" -126) . " -176")
+ (("%+ 6o" -126) . " -176")
+ (("%-6o" -126) . "-176 ")
+ (("%+-6o" -126) . "-176 ")
+ (("% -6o" -126) . "-176 ")
+ (("% +-6o" -126) . "-176 ")
+ (("%+ -6o" -126) . "-176 ")
+ (("%#8o" -126) . " -0o176")
+ (("%#+8o" -126) . " -0o176")
+ (("%# 8o" -126) . " -0o176")
+ (("%# +8o" -126) . " -0o176")
+ (("%#+ 8o" -126) . " -0o176")
+ (("%#-8o" -126) . "-0o176 ")
+ (("%#+-8o" -126) . "-0o176 ")
+ (("%# -8o" -126) . "-0o176 ")
+ (("%# +-8o" -126) . "-0o176 ")
+ (("%#+ -8o" -126) . "-0o176 ")
;; hexadecimal
- (("%x" 126) . "7e")
- (("%+x" 126) . "+7e")
- (("% x" 126) . " 7e")
- (("% +x" 126) . "+7e")
- (("%+ x" 126) . "+7e")
- (("%#x" 126) . "0x7e")
- (("%#+x" 126) . "+0x7e")
- (("%# x" 126) . " 0x7e")
- (("%# +x" 126) . "+0x7e")
- (("%#+ x" 126) . "+0x7e")
- (("%6x" 126) . " 7e")
- (("%+6x" 126) . " +7e")
- (("% 6x" 126) . " 7e")
- (("% +6x" 126) . " +7e")
- (("%+ 6x" 126) . " +7e")
- (("%-6x" 126) . "7e ")
- (("%+-6x" 126) . "+7e ")
- (("% -6x" 126) . " 7e ")
- (("% +-6x" 126) . "+7e ")
- (("%+ -6x" 126) . "+7e ")
- (("%#8x" 126) . " 0x7e")
- (("%#+8x" 126) . " +0x7e")
- (("%# 8x" 126) . " 0x7e")
- (("%# +8x" 126) . " +0x7e")
- (("%#+ 8x" 126) . " +0x7e")
- (("%#-8x" 126) . "0x7e ")
- (("%#+-8x" 126) . "+0x7e ")
- (("%# -8x" 126) . " 0x7e ")
- (("%# +-8x" 126) . "+0x7e ")
- (("%#+ -8x" 126) . "+0x7e ")
- (("%x" -126) . "-7e")
- (("%+x" -126) . "-7e")
- (("% x" -126) . "-7e")
- (("% +x" -126) . "-7e")
- (("%+ x" -126) . "-7e")
- (("%#x" -126) . "-0x7e")
- (("%#+x" -126) . "-0x7e")
- (("%# x" -126) . "-0x7e")
- (("%# +x" -126) . "-0x7e")
- (("%#+ x" -126) . "-0x7e")
- (("%6x" -126) . " -7e")
- (("%+6x" -126) . " -7e")
- (("% 6x" -126) . " -7e")
- (("% +6x" -126) . " -7e")
- (("%+ 6x" -126) . " -7e")
- (("%-6x" -126) . "-7e ")
- (("%+-6x" -126) . "-7e ")
- (("% -6x" -126) . "-7e ")
- (("% +-6x" -126) . "-7e ")
- (("%+ -6x" -126) . "-7e ")
- (("%#8x" -126) . " -0x7e")
- (("%#+8x" -126) . " -0x7e")
- (("%# 8x" -126) . " -0x7e")
- (("%# +8x" -126) . " -0x7e")
- (("%#+ 8x" -126) . " -0x7e")
- (("%#-8x" -126) . "-0x7e ")
- (("%#+-8x" -126) . "-0x7e ")
- (("%# -8x" -126) . "-0x7e ")
- (("%# +-8x" -126) . "-0x7e ")
- (("%#+ -8x" -126) . "-0x7e ")
+ (("%x" 126) . "7e")
+ (("%+x" 126) . "+7e")
+ (("% x" 126) . " 7e")
+ (("% +x" 126) . "+7e")
+ (("%+ x" 126) . "+7e")
+ (("%#x" 126) . "0x7e")
+ (("%#+x" 126) . "+0x7e")
+ (("%# x" 126) . " 0x7e")
+ (("%# +x" 126) . "+0x7e")
+ (("%#+ x" 126) . "+0x7e")
+ (("%6x" 126) . " 7e")
+ (("%+6x" 126) . " +7e")
+ (("% 6x" 126) . " 7e")
+ (("% +6x" 126) . " +7e")
+ (("%+ 6x" 126) . " +7e")
+ (("%-6x" 126) . "7e ")
+ (("%+-6x" 126) . "+7e ")
+ (("% -6x" 126) . " 7e ")
+ (("% +-6x" 126) . "+7e ")
+ (("%+ -6x" 126) . "+7e ")
+ (("%#8x" 126) . " 0x7e")
+ (("%#+8x" 126) . " +0x7e")
+ (("%# 8x" 126) . " 0x7e")
+ (("%# +8x" 126) . " +0x7e")
+ (("%#+ 8x" 126) . " +0x7e")
+ (("%#-8x" 126) . "0x7e ")
+ (("%#+-8x" 126) . "+0x7e ")
+ (("%# -8x" 126) . " 0x7e ")
+ (("%# +-8x" 126) . "+0x7e ")
+ (("%#+ -8x" 126) . "+0x7e ")
+ (("%x" -126) . "-7e")
+ (("%+x" -126) . "-7e")
+ (("% x" -126) . "-7e")
+ (("% +x" -126) . "-7e")
+ (("%+ x" -126) . "-7e")
+ (("%#x" -126) . "-0x7e")
+ (("%#+x" -126) . "-0x7e")
+ (("%# x" -126) . "-0x7e")
+ (("%# +x" -126) . "-0x7e")
+ (("%#+ x" -126) . "-0x7e")
+ (("%6x" -126) . " -7e")
+ (("%+6x" -126) . " -7e")
+ (("% 6x" -126) . " -7e")
+ (("% +6x" -126) . " -7e")
+ (("%+ 6x" -126) . " -7e")
+ (("%-6x" -126) . "-7e ")
+ (("%+-6x" -126) . "-7e ")
+ (("% -6x" -126) . "-7e ")
+ (("% +-6x" -126) . "-7e ")
+ (("%+ -6x" -126) . "-7e ")
+ (("%#8x" -126) . " -0x7e")
+ (("%#+8x" -126) . " -0x7e")
+ (("%# 8x" -126) . " -0x7e")
+ (("%# +8x" -126) . " -0x7e")
+ (("%#+ 8x" -126) . " -0x7e")
+ (("%#-8x" -126) . "-0x7e ")
+ (("%#+-8x" -126) . "-0x7e ")
+ (("%# -8x" -126) . "-0x7e ")
+ (("%# +-8x" -126) . "-0x7e ")
+ (("%#+ -8x" -126) . "-0x7e ")
)))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms)))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms)))
;; now testing bigq formatting
(when (featurep 'bigq)
(let ((forms
- '((("%Q" 2) . "2")
- (("%2Q" 2) . " 2")
- (("%2Q" 200) . "200")
- (("%+Q" 2) . "+2")
- (("% Q" 2) . " 2")
- (("% +Q" 2) . "+2")
- (("%+ Q" 2) . "+2")
- (("%Q" -2) . "-2")
- (("% Q" -2) . "-2")
- (("%+Q" -2) . "-2")
- (("% +Q" -2) . "-2")
- (("%+ Q" -2) . "-2")
- (("%-4Q" 2) . "2 ")
- (("%.2Q" 2) . "2")
- (("%4.2Q" 2) . " 2")
- (("%-4.2Q" 2) . "2 ")
-
- ;; testing with proper fractions
- (("%Q" 2/3) . "2/3")
- (("%5Q" 2/3) . " 2/3")
- (("%5.5Q" 2/3) . " 2/3")
- (("%+Q" 2/3) . "+2/3")
- (("% Q" 2/3) . " 2/3")
- (("% +Q" 2/3) . "+2/3")
- (("%+ Q" 2/3) . "+2/3")
- (("%Q" (float 1.5)) . "3/2")
- (("%Q" (float 0.66666)) . "3002369727582815/4503599627370496")
- (("%-10Q" 2/3) . "2/3 ")
-
- ;; testing coercion to Z
- (("%d" 4/3) . "1")
- (("%Z" 2/3) . "0"))))
+ '((("%Q" 2) . "2")
+ (("%2Q" 2) . " 2")
+ (("%2Q" 200) . "200")
+ (("%+Q" 2) . "+2")
+ (("% Q" 2) . " 2")
+ (("% +Q" 2) . "+2")
+ (("%+ Q" 2) . "+2")
+ (("%Q" -2) . "-2")
+ (("% Q" -2) . "-2")
+ (("%+Q" -2) . "-2")
+ (("% +Q" -2) . "-2")
+ (("%+ Q" -2) . "-2")
+ (("%-4Q" 2) . "2 ")
+ (("%.2Q" 2) . "2")
+ (("%4.2Q" 2) . " 2")
+ (("%-4.2Q" 2) . "2 ")
+
+ ;; testing with proper fractions
+ (("%Q" 2/3) . "2/3")
+ (("%5Q" 2/3) . " 2/3")
+ (("%5.5Q" 2/3) . " 2/3")
+ (("%+Q" 2/3) . "+2/3")
+ (("% Q" 2/3) . " 2/3")
+ (("% +Q" 2/3) . "+2/3")
+ (("%+ Q" 2/3) . "+2/3")
+ (("%Q" (float 1.5)) . "3/2")
+ (("%Q" (float 0.66666)) . "3002369727582815/4503599627370496")
+ (("%-10Q" 2/3) . "2/3 ")
+
+ ;; testing coercion to Z
+ (("%d" 4/3) . "1")
+ (("%Z" 2/3) . "0"))))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms)))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms)))
(when (featurep 'bigfr)
(let ((forms
- '((("%f" (exp 1)) . "2.718282")
- (("%2.2f" (exp 1)) . "2.72")
- ;; this test uses a wrong output string deliberately
- ;; it's wrong because the precision of IEEE-754 doubles is
- ;; not enough to have 20 correct digits in the fractional part
- ;; however, since we _can_ have long doubles now, this test
- ;; is no longer feasible since lisp should know a shit about
- ;; the internal representation of fpfloats. -hroptatyr
- ;;(("%2.20f" (exp 1)) . "2.71828182845904509080")
-
- ;; now testing with %F
- (("%F" (exp 1)) . "2.718281828459045235360287471352662497759")
- (("%2.2F" (exp 1)) . "2.71")
- (("%+2.2F" (exp 1)) . "+2.71")
- (("%10.0F" (exp 1)) . " 2")
- (("%10.1F" (exp 1)) . " 2.7")
- (("%12.12F" (exp 1)) . "2.718281828459")
- (("%30.12F" (exp 1)) . " 2.718281828459")
- (("%5.5F" (exp 13)) . "442413.39200")
- (("%F" (/ (exp 1))) .
- "0.3678794411714423215955237701614608674462")
- (("%2.2F" (/ (exp 1))) . "0.36")
- (("%3.3F" (/ (exp 1))) . "0.367")
- (("%.5F" (bigfr 1)) . "1.00000")
-
- (("%.4F" (bigfr 23213231 25)) . "23213231.0000")
- ;; stupid assumption
- ;;(("%.4F" (bigfr 23213231 8)) . "23200000.0000")
- (("%Z" (bigfr 23213231 25)) . "23213231")
- (("%Z" (bigfr 23213231 8)) . "23199744")
-
- (("%+.4f" 2) . "+2.0000")
- (("%+.4F" 2) . "+2.0000")
- (("% .4F" 2) . " 2.0000")
- (("%+10.4F" 2) . " +2.0000")))
- (default-real-precision 128))
+ '((("%f" (exp 1)) . "2.718282")
+ (("%2.2f" (exp 1)) . "2.72")
+ ;; this test uses a wrong output string deliberately
+ ;; it's wrong because the precision of IEEE-754 doubles is
+ ;; not enough to have 20 correct digits in the fractional part
+ ;; however, since we _can_ have long doubles now, this test
+ ;; is no longer feasible since lisp should know a shit about
+ ;; the internal representation of fpfloats. -hroptatyr
+ ;;(("%2.20f" (exp 1)) . "2.71828182845904509080")
+
+ ;; now testing with %F
+ (("%F" (exp 1)) . "2.718281828459045235360287471352662497759")
+ (("%2.2F" (exp 1)) . "2.71")
+ (("%+2.2F" (exp 1)) . "+2.71")
+ (("%10.0F" (exp 1)) . " 2")
+ (("%10.1F" (exp 1)) . " 2.7")
+ (("%12.12F" (exp 1)) . "2.718281828459")
+ (("%30.12F" (exp 1)) . " 2.718281828459")
+ (("%5.5F" (exp 13)) . "442413.39200")
+ (("%F" (/ (exp 1))) .
+ "0.3678794411714423215955237701614608674462")
+ (("%2.2F" (/ (exp 1))) . "0.36")
+ (("%3.3F" (/ (exp 1))) . "0.367")
+ (("%.5F" (bigfr 1)) . "1.00000")
+
+ (("%.4F" (bigfr 23213231 25)) . "23213231.0000")
+ ;; stupid assumption
+ ;;(("%.4F" (bigfr 23213231 8)) . "23200000.0000")
+ (("%Z" (bigfr 23213231 25)) . "23213231")
+ (("%Z" (bigfr 23213231 8)) . "23199744")
+
+ (("%+.4f" 2) . "+2.0000")
+ (("%+.4F" 2) . "+2.0000")
+ (("% .4F" 2) . " 2.0000")
+ (("%+10.4F" 2) . " +2.0000")))
+ (default-real-precision 128))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms)))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms)))
(when (featurep 'bigg)
(let ((forms
- '((("%B" 2+i) . "2+1i")
- (("%+B" 2+i) . "+2+1i")
- (("% B" 2+i) . " 2+1i")
- (("%B" 2+i) .
- (format "%Z%+Zi" (real-part 2+i) (imaginary-part 2+i)))
- (("%B" 1) . "1+0i")
- (("%+10.4B" 1.2) . " +0001 +0000i")
- (("%-10.4B" 0+2i) . "0000 +0002 i"))))
+ '((("%B" 2+i) . "2+1i")
+ (("%+B" 2+i) . "+2+1i")
+ (("% B" 2+i) . " 2+1i")
+ (("%B" 2+i) .
+ (format "%Z%+Zi" (real-part 2+i) (imaginary-part 2+i)))
+ (("%B" 1) . "1+0i")
+ (("%+10.4B" 1.2) . " +0001 +0000i")
+ (("%-10.4B" 0+2i) . "0000 +0002 i"))))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms))
;; Gaussian numbers shall not be coerced to comparables
(Check-Error domain-error (format "%d" 1+i))
(when (featurep 'bigc)
(let ((forms
- '((("%.2C" 2+i) . "2.00+1.00i")
- (("%+.2C" 2+i) . "+2.00+1.00i")
- (("% .2C" 2+i) . " 2.00+1.00i")
- (("%.2C" 2+i) .
- (format "%.2F%+.2Fi" (real-part 2+i) (imaginary-part 2+i)))
- (("%.2C" 1) . "1.00+0.00i")
- (("%+10.4C" 1.5) . " +1.5000 +0.0000i")
- (("%-10.4C" 0+2i) . "0.0000 +2.0000 i"))))
+ '((("%.2C" 2+i) . "2.00+1.00i")
+ (("%+.2C" 2+i) . "+2.00+1.00i")
+ (("% .2C" 2+i) . " 2.00+1.00i")
+ (("%.2C" 2+i) .
+ (format "%.2F%+.2Fi" (real-part 2+i) (imaginary-part 2+i)))
+ (("%.2C" 1) . "1.00+0.00i")
+ (("%+10.4C" 1.5) . " +1.5000 +0.0000i")
+ (("%-10.4C" 0+2i) . "0.0000 +2.0000 i"))))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms))
;; complex numbers shall not be coerced to comparables
(Check-Error domain-error (format "%d" (sqrt -2)))
;; the new %b thing
(let ((forms
'((("%b" 12) . "1100")
- (("%8b" 12) . " 1100")
- (("%08b" 12) . "00001100"))))
+ (("%8b" 12) . " 1100")
+ (("%08b" 12) . "00001100"))))
(mapc #'(lambda (f)
- (let ((format (cons 'format (car f)))
- (expected (cdr f)))
- (eval `(Assert (string= ,format ,expected)))))
- forms))
+ (let ((format (cons 'format (car f)))
+ (expected (cdr f)))
+ (eval `(Assert (string= ,format ,expected)))))
+ forms))
;; exterior precision
(Assert-Equal (format "%*d" 10 4) " 4")
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(value 4 6 25))
do
(let* ((ht (make-hash-table :weakness weakness))
- (my-obj (cons ht ht)))
+ (my-obj (cons ht ht)))
(garbage-collect)
(puthash my-obj 1 ht)
(puthash 2 my-obj ht)
(puthash 32 (cons ht ht) ht)
(puthash (cons ht ht) (cons ht ht) ht)
(let ((k-sum 0) (v-sum 0))
- (maphash #'(lambda (k v)
- (when (integerp k) (incf k-sum k))
- (when (integerp v) (incf v-sum v)))
- ht)
- (Assert (eq 38 k-sum))
- (Assert (eq 25 v-sum)))
+ (maphash #'(lambda (k v)
+ (when (integerp k) (incf k-sum k))
+ (when (integerp v) (incf v-sum v)))
+ ht)
+ (Assert (eq 38 k-sum))
+ (Assert (eq 25 v-sum)))
(Assert (eq 6 (hash-table-count ht)))
(garbage-collect)
(Assert (eq expected-count (hash-table-count ht)))
(let ((k-sum 0) (v-sum 0))
- (maphash #'(lambda (k v)
- (when (integerp k) (incf k-sum k))
- (when (integerp v) (incf v-sum v)))
- ht)
- (Assert (eq expected-k-sum k-sum))
- (Assert (eq expected-v-sum v-sum))))))
+ (maphash #'(lambda (k v)
+ (when (integerp k) (incf k-sum k))
+ (when (integerp v) (incf v-sum v)))
+ ht)
+ (Assert (eq expected-k-sum k-sum))
+ (Assert (eq expected-v-sum v-sum))))))
;;; Test the ability to puthash and remhash the current elt of a maphash
(let ((ht (make-hash-table :test 'eql)))
;; Keywords: tests
;;
;; This file is part of SXEmacs.
-;;
+;;
;; SXEmacs is free software: you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by the
;; Free Software Foundation, either version 3 of the License, or (at your
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Synched up with: Not in FSF.
;;
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; ---------------------------------
(dolist (strings '((#r"xyz" "xyz") ; no backslashes
(#r"\xyz" "\\xyz") ; backslash at start
- (#r"\\xyz" "\\\\xyz") ; backslashes at start
- (#r"\nxyz" "\\nxyz") ; escape seq. at start
- (#r"\"xyz" "\\\"xyz") ; quote at start
- (#r"xy\z" "xy\\z") ; backslash in middle
- (#r"xy\\z" "xy\\\\z") ; backslashes in middle
- (#r"xy\nz" "xy\\nz") ; escape seq. in middle
- (#r"xy\"z" "xy\\\"z") ; quote in middle
- ;;(#r"xyz\" "xyz\\") ; backslash at end: error
- (#r"xyz\\" "xyz\\\\") ; backslashes at end
- (#r"xyz\n" "xyz\\n") ; escape seq. at end
- (#r"xyz\"" "xyz\\\"") ; quote at end
- ))
+ (#r"\\xyz" "\\\\xyz") ; backslashes at start
+ (#r"\nxyz" "\\nxyz") ; escape seq. at start
+ (#r"\"xyz" "\\\"xyz") ; quote at start
+ (#r"xy\z" "xy\\z") ; backslash in middle
+ (#r"xy\\z" "xy\\\\z") ; backslashes in middle
+ (#r"xy\nz" "xy\\nz") ; escape seq. in middle
+ (#r"xy\"z" "xy\\\"z") ; quote in middle
+ ;;(#r"xyz\" "xyz\\") ; backslash at end: error
+ (#r"xyz\\" "xyz\\\\") ; backslashes at end
+ (#r"xyz\n" "xyz\\n") ; escape seq. at end
+ (#r"xyz\"" "xyz\\\"") ; quote at end
+ ))
(Assert (apply #'string= strings)))
;; Odd number of backslashes at the end
;; ------------------------------------
(dolist (string '("#r\"xyz\\\"" ; `#r"abc\"': escaped delimiter
- "#r\"xyz\\\\\\\"" ; `#r"abc\\\"': escaped delimiter
- ))
+ "#r\"xyz\\\\\\\"" ; `#r"abc\\\"': escaped delimiter
+ ))
(with-temp-buffer
(insert string)
(Check-Error end-of-file (eval-buffer))))
;; Alternate string/regex delimiters
;; ---------------------------------
(dolist (string '("#r/xyz/" ; Perl syntax
- "#r:ix/xyz/" ; Extended Perl syntax
- "#r|xyz|" ; TeX syntax
- "#r[xyz]" ; (uncommon) Perl syntax
- "#r<xyz>" ; Perl6 syntax?
- "#r(xyz)" ; arbitrary santax
- "#r{xyz}" ; arbitrary santax
- "#r,xyz," ; arbitrary santax
- "#r!xyz!" ; arbitrary santax
- ))
+ "#r:ix/xyz/" ; Extended Perl syntax
+ "#r|xyz|" ; TeX syntax
+ "#r[xyz]" ; (uncommon) Perl syntax
+ "#r<xyz>" ; Perl6 syntax?
+ "#r(xyz)" ; arbitrary santax
+ "#r{xyz}" ; arbitrary santax
+ "#r,xyz," ; arbitrary santax
+ "#r!xyz!" ; arbitrary santax
+ ))
(with-temp-buffer
(insert string)
(Check-Error-Message invalid-read-syntax "unrecognized raw string"
- (eval-buffer))))
+ (eval-buffer))))
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(when (featurep 'number-type)
(let ((nums))
(and (featurep 'bigz)
- (setq nums (cons (factorial 20) nums)))
+ (setq nums (cons (factorial 20) nums)))
(and (featurep 'bigq)
- (setq nums (cons (// (factorial 20) 71) nums)))
+ (setq nums (cons (// (factorial 20) 71) nums)))
(and (featurep 'bigfr)
- (setq nums (cons (exp 2) nums)))
+ (setq nums (cons (exp 2) nums)))
(and (featurep 'bigc)
- (setq nums (cons (sqrt -3) nums)))
+ (setq nums (cons (sqrt -3) nums)))
(loop for x in num do
(Assert (eq t (= x)))
(Assert (eq t (< x)))
;;; "%u" was undocumented, and support for it has been dropped
(Check-Error-Message error "Invalid converter character"
- (format "%u" most-positive-fixnum))
+ (format "%u" most-positive-fixnum))
(Check-Error-Message error "Invalid converter character"
- (format "%u" most-negative-fixnum))
+ (format "%u" most-negative-fixnum))
;; Check all-completions ignore element start with space.
(Assert (not (all-completions "" '((" hidden" . "object")))))
;; Keywords: tests
;;
;; This file is part of SXEmacs.
-;;
+;;
;; SXEmacs is free software: you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by the
;; Free Software Foundation, either version 3 of the License, or (at your
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Synched up with: Not in FSF.
;;
(defmacro Assert-set-equality (s1 s2)
(let* ((m1 (if (arrayp s1) 'across 'in))
- (m2 (if (arrayp s2) 'across 'in)))
+ (m2 (if (arrayp s2) 'across 'in)))
`(progn
(Assert-Equal (type-of ,s1) (type-of ,s2))
(Assert (= (length ,s1) (length ,s2)))
(Assert
- (loop
- for i ,m1 ,s1
- always (loop
- for j ,m2 ,s2
- thereis (equal i j)))))))
+ (loop
+ for i ,m1 ,s1
+ always (loop
+ for j ,m2 ,s2
+ thereis (equal i j)))))))
(defmacro Assert-tup-equality (s1 s2)
(let* ((m1 (if (arrayp s1) 'across 'in))
- (m2 (if (arrayp s2) 'across 'in)))
+ (m2 (if (arrayp s2) 'across 'in)))
`(progn
(Assert-Equal (type-of ,s1) (type-of ,s2))
(Assert
- (loop
- for i ,m1 ,s1
- for j ,m2 ,s2
- always (equal i j))))))
+ (loop
+ for i ,m1 ,s1
+ for j ,m2 ,s2
+ always (equal i j))))))
\f
;; test trivial cases
(Assert
(equal
(mapfam nil :mode 'pntw :result-type #'vector :glue #'vector :arity 2
- [1 2 3 4 5 6 7])
+ [1 2 3 4 5 6 7])
[[1 2] [3 4] [5 6]]))
(Assert
(equal
(mapfam nil :mode 'pntw :result-type #'vector :glue #'vector :arity 3
- [1 2 3 4 5 6 7])
+ [1 2 3 4 5 6 7])
[[1 2 3] [4 5 6]]))
;; larger glue than sequence
(Assert
(loop for j in (list rl rv rd) do
(eval
`(Assert
- (equal
- (mapfam #'+ ,i :arity 2 :result-type #',(car j))
- ,(cdr j))))))
+ (equal
+ (mapfam #'+ ,i :arity 2 :result-type #',(car j))
+ ,(cdr j))))))
;; seq length coprime to arity
(loop for i in (list l2 v2 d2) do
(loop for j in (list rl rv rd) do
(eval
`(Assert
- (equal
- (mapfam #'+ ,i :arity 2 :result-type #',(car j))
- ,(cdr j))))))
+ (equal
+ (mapfam #'+ ,i :arity 2 :result-type #',(car j))
+ ,(cdr j))))))
;; arity 3
(loop for i in (list l v d) do
(loop for j in (list rl2 rv2 rd2) do
(eval
`(Assert
- (equal
- (mapfam #'+ ,i :arity 3 :result-type #',(car j))
- ,(cdr j))))))
+ (equal
+ (mapfam #'+ ,i :arity 3 :result-type #',(car j))
+ ,(cdr j))))))
;; seq length coprime to arity
(loop for i in (list l2 v2 d2) do
(loop for j in (list rl2 rv2 rd2) do
(eval
`(Assert
- (equal
- (mapfam #'+ ,i :arity 3 :result-type #',(car j))
- ,(cdr j)))))))
+ (equal
+ (mapfam #'+ ,i :arity 3 :result-type #',(car j))
+ ,(cdr j)))))))
(Assert
(equal
;;
;; Now with #'mapfam...
;;
-;; First, with the exact same syntax as we did with #'mapconcat (because it is
+;; First, with the exact same syntax as we did with #'mapconcat (because it is
;; our plan to replace all of our #'map* functions with aliases to #'mapfam)
;;
;; (mapfam #'concat (split-string "unsplit this split string") " ")
;; wrong-type-argument error.
;;
;; Now lets try to wing it with more fancy syntax...
-;;
+;;
;; (mapfam nil :separator " " :result-type #'concat
;; (split-string "unsplit this split string"))
;; => "unsplitthissplitstring"
;; (mapfam #'concat :result-type #'concat
;; (split-string "unsplit this split string") " ")
-;; => Wrong type argument: sequencep, ?\
+;; => Wrong type argument: sequencep, ?\
;;
;; hrop: um, I can't see what that is supposed to do, but yes, the wrong-type
;; error is because of the second sequence (" ") which is kinda like [?\ ]
;; (Assert
;; (string=
;; (mapfam #'concat :result-type #'concat
-;; (split-string "unsplit this split string") '(" " " " " " ""))
+;; (split-string "unsplit this split string") '(" " " " " " ""))
;; "unsplit this split string"))
-;;
+;;
;; (when-fboundp #'divisiblep
;; (Assert-set-equality
;; (let ((divisors))
;; (mapfam :result-type 'void
-;; #'(lambda (p)
-;; (garbage-collect)
-;; (if (divisiblep 5041 p) (push p divisors))
-;; (garbage-collect))
-;; '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-;; 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
-;; 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
-;; 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 69 70
-;; 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
-;; 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
-;; 104 105 106 107 108 109 110 111 112 113 114 115 116
-;; 117 118 119 120 121 122 123 124 125 126 127 128 129
-;; 130 131 132 133 134 135 136 137 138 139 140 141 142
-;; 143 144 145 146 147 148 149 150 151 152 153 154 155
-;; 156 157 158 159 160 161 162 163 164 165 166 167 168
-;; 169 170 171 172 173 174 175 176 177 178 179 180 181
-;; 182 183 184 185 186 187 188 189 190 191 192 193 194
-;; 195 196 197 198 199 200 201 202 203 204 205 206 207
-;; 208 209 210 211 212 213 214 215 216 217 218 219 220
-;; 221 222 223 224 225 226 227 228 229 230 231 232 233
-;; 234 235 236 237 238 239 240 241 242 243 244 245 246
-;; 247 248 249 250 251 252 253 254 255 256 257 258 259
-;; 260 261 262 263 264 265 266 267 268 269 270 271 272
-;; 273 274 275 276 277 278 279 280 281 282 283 284 285
-;; ))
+;; #'(lambda (p)
+;; (garbage-collect)
+;; (if (divisiblep 5041 p) (push p divisors))
+;; (garbage-collect))
+;; '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+;; 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
+;; 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
+;; 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 69 70
+;; 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
+;; 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
+;; 104 105 106 107 108 109 110 111 112 113 114 115 116
+;; 117 118 119 120 121 122 123 124 125 126 127 128 129
+;; 130 131 132 133 134 135 136 137 138 139 140 141 142
+;; 143 144 145 146 147 148 149 150 151 152 153 154 155
+;; 156 157 158 159 160 161 162 163 164 165 166 167 168
+;; 169 170 171 172 173 174 175 176 177 178 179 180 181
+;; 182 183 184 185 186 187 188 189 190 191 192 193 194
+;; 195 196 197 198 199 200 201 202 203 204 205 206 207
+;; 208 209 210 211 212 213 214 215 216 217 218 219 220
+;; 221 222 223 224 225 226 227 228 229 230 231 232 233
+;; 234 235 236 237 238 239 240 241 242 243 244 245 246
+;; 247 248 249 250 251 252 253 254 255 256 257 258 259
+;; 260 261 262 263 264 265 266 267 268 269 270 271 272
+;; 273 274 275 276 277 278 279 280 281 282 283 284 285
+;; ))
;; divisors)
;; '(1 71))
-;;
+;;
;; (Assert-set-equality
;; (let ((divisors))
;; (mapfam #'(lambda (p)
-;; (garbage-collect)
-;; (if (divisiblep 5041 p) (push p divisors))
-;; (garbage-collect))
-;; '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-;; 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
-;; 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
-;; 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 69 70
-;; 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
-;; 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
-;; 104 105 106 107 108 109 110 111 112 113 114 115 116
-;; 117 118 119 120 121 122 123 124 125 126 127 128 129
-;; 130 131 132 133 134 135 136 137 138 139 140 141 142
-;; 143 144 145 146 147 148 149 150 151 152 153 154 155
-;; 156 157 158 159 160 161 162 163 164 165 166 167 168
-;; 169 170 171 172 173 174 175 176 177 178 179 180 181
-;; 182 183 184 185 186 187 188 189 190 191 192 193 194
-;; 195 196 197 198 199 200 201 202 203 204 205 206 207
-;; 208 209 210 211 212 213 214 215 216 217 218 219 220
-;; 221 222 223 224 225 226 227 228 229 230 231 232 233
-;; 234 235 236 237 238 239 240 241 242 243 244 245 246
-;; 247 248 249 250 251 252 253 254 255 256 257 258 259
-;; 260 261 262 263 264 265 266 267 268 269 270 271 272
-;; 273 274 275 276 277 278 279 280 281 282 283 284 285
-;; ))
+;; (garbage-collect)
+;; (if (divisiblep 5041 p) (push p divisors))
+;; (garbage-collect))
+;; '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+;; 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
+;; 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
+;; 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 69 70
+;; 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
+;; 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
+;; 104 105 106 107 108 109 110 111 112 113 114 115 116
+;; 117 118 119 120 121 122 123 124 125 126 127 128 129
+;; 130 131 132 133 134 135 136 137 138 139 140 141 142
+;; 143 144 145 146 147 148 149 150 151 152 153 154 155
+;; 156 157 158 159 160 161 162 163 164 165 166 167 168
+;; 169 170 171 172 173 174 175 176 177 178 179 180 181
+;; 182 183 184 185 186 187 188 189 190 191 192 193 194
+;; 195 196 197 198 199 200 201 202 203 204 205 206 207
+;; 208 209 210 211 212 213 214 215 216 217 218 219 220
+;; 221 222 223 224 225 226 227 228 229 230 231 232 233
+;; 234 235 236 237 238 239 240 241 242 243 244 245 246
+;; 247 248 249 250 251 252 253 254 255 256 257 258 259
+;; 260 261 262 263 264 265 266 267 268 269 270 271 272
+;; 273 274 275 276 277 278 279 280 281 282 283 284 285
+;; ))
;; divisors)
;; '(1 71)))
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(progn
(set-ucs-char code scaron)
(Assert (eq scaron (ucs-char code)))))
-
+
(Assert (eq nil (set-ucs-char #x1ffff scaron)))
(Check-Error wrong-type-argument (set-ucs-char -10000 scaron)))
-
+
)
;; Keywords: tests
;;
;; This file is part of SXEmacs.
-;;
+;;
;; SXEmacs is free software: you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by the
;; Free Software Foundation, either version 3 of the License, or (at your
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Synched up with: Not in FSF.
;;
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(with-temp-buffer
;; Using active regions
(let ((zmacs-regions t)
- (first-buffer (current-buffer)))
+ (first-buffer (current-buffer)))
(Silence-Message
(insert (buffer-name)))
(Assert (not (region-exists-p)))
;; Keywords: tests
;;
;; This file is part of SXEmacs.
-;;
+;;
;; SXEmacs is free software: you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by the
;; Free Software Foundation, either version 3 of the License, or (at your
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Synched up with: Not in FSF.
;;
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(let ((len (length (weak-list-list weak-list))))
(Assert (not (zerop len)))
(garbage-collect)
- (unless (featurep 'bdwgc)
- (Assert (eq (length (weak-list-list weak-list))
- (if (not reversep) 0 len)))))))
+ (unless (featurep 'bdwgc)
+ (Assert (eq (length (weak-list-list weak-list))
+ (if (not reversep) 0 len)))))))
(let ((weak-list (make-weak-list))
(gc-cons-threshold most-positive-fixnum))
;; Symbols created with `make-symbol' and `gensym' should be fresh
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
skipped-test-reasons)
(Print-Skip "comment and parse-partial-sexp tests" reason))
(c-mode)
-
+
(insert "// comment\n")
(forward-comment -2)
(Assert (eq (point) (point-min)))
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;;; Definitely do not use Silence-Message with Check-Message.
;;; In general it should probably only be used on code that prepares for a
;;; test, not on tests.
-;;;
+;;;
;;; You run the tests using M-x test-emacs-test-file,
;;; or $(EMACS) -batch -l .../test-harness.el -f batch-test-emacs file ...
;;; which is run for you by the `make check' target in the top-level Makefile.
(let ((buffer-file-name filename)
(default-major-mode 'emacs-lisp-mode)
(enable-local-eval nil))
- (normal-mode)
- (setq filename buffer-file-name)))
+ (normal-mode)
+ (setq filename buffer-file-name)))
(test-harness-from-buffer input-buffer filename)
(kill-buffer input-buffer)
))
(with-current-buffer buffer
(save-excursion
- (when (re-search-forward ";;;###eval-me-first" nil t)
- (let* ((p1 (point))
- (p2 (progn
- (forward-sexp)
- (point))))
- (eval-region p1 p2)))))
+ (when (re-search-forward ";;;###eval-me-first" nil t)
+ (let* ((p1 (point))
+ (p2 (progn
+ (forward-sexp)
+ (point))))
+ (eval-region p1 p2)))))
(goto-char (point-min) buffer)
(condition-case error-info
`(let ((test-harness-failure-tag "KNOWN BUG")
(test-harness-success-tag "PASS (FAILURE EXPECTED)"))
,@body))
-
+
(defmacro Implementation-Incomplete-Expect-Failure (&rest body)
`(let ((test-harness-failure-tag "IMPLEMENTATION INCOMPLETE")
(test-harness-success-tag "PASS (FAILURE EXPECTED)"))
,@body))
-
+
(defun Print-Failure (fmt &rest args)
(setq fmt (format "%s: %s" test-harness-failure-tag fmt))
(if (noninteractive) (apply #'message fmt args))
(Print-Failure "Assertion failed: (equal %S %S) => (equal %S %S)"
(quote ,object1) (quote ,object2) ,object1 ,object2)
(incf assertion-failures))
- (t (Print-Failure "(equal %S %S) ==> error: %S"
+ (t (Print-Failure "(equal %S %S) ==> error: %S"
(quote ,object1) (quote ,object2) error-info)
(incf other-failures)
)))
(Print-Failure "Assertion failed: (not (equal %S %S)) => (not (equal %S %S))"
(quote ,object1) (quote ,object2) ,object1 ,object2)
(incf assertion-failures))
- (t (Print-Failure "(not (equal %S %S)) ==> error: %S"
+ (t (Print-Failure "(not (equal %S %S)) ==> error: %S"
(quote ,object1) (quote ,object2) error-info)
(incf other-failures)
)))
(point))
(point-max))
(funcall temp-buffer-show-function show-buffer))
- (select-window
- (prog1 (selected-window)
- (select-window (display-buffer (current-buffer)))
- (goto-char test-harness-results-point-max)
- (recenter 1)))))))))
+ (select-window
+ (prog1 (selected-window)
+ (select-window (display-buffer (current-buffer)))
+ (goto-char test-harness-results-point-max)
+ (recenter 1)))))))))
(defun batch-test-emacs-1 (file)
(condition-case error-info
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(Assert-Equal (weak-list-list weaklist2) testlist)
(Assert-Equal (weak-list-list weaklist3) testlist)
(Assert-Equal (weak-list-list weaklist4) testlist)))
-
+
(garbage-collect)
;; tests for key-assoc weak-lists
(garbage-collect)
-
(defmacro bm-profile-time-multi-ord (count &rest body)
`(let* ((cnt ,count)
- (sttb (current-time)))
+ (sttb (current-time)))
(while (< 0 cnt)
,@body
(setq cnt (1- cnt)))
(defmacro bm-profile-time-btime (&rest body)
`(let* ((none (garbage-collect))
- (sttb (current-btime)))
+ (sttb (current-btime)))
,@body
(- (current-btime) sttb)))
(defmacro bm-profile-time-multi-btime (count &rest body)
`(let* ((cnt ,count)
- (sttb (current-btime)))
+ (sttb (current-btime)))
(while (nonnegativep cnt)
,@body
(setq cnt (1- cnt)))
(defun bm-compute-sample-points (test-range &optional grain)
(let* ((lo (car test-range))
- (hi (cdr test-range))
- (grain-ratio (// hi lo grain))
- (lol (log lo))
- (hil (log hi))
- (step (// (- hi lo) grain))
- (stepl (// (- hil lol) grain))
- (i (coerce-number lol 'int))
- (logp (> grain-ratio 1))
- (result (make-vector (1+ grain) nil))
- logf linf)
+ (hi (cdr test-range))
+ (grain-ratio (// hi lo grain))
+ (lol (log lo))
+ (hil (log hi))
+ (step (// (- hi lo) grain))
+ (stepl (// (- hil lol) grain))
+ (i (coerce-number lol 'int))
+ (logp (> grain-ratio 1))
+ (result (make-vector (1+ grain) nil))
+ logf linf)
(fset #'logf
- #'(lambda (unused)
- (let* ((exp (exp lol))
- (this (coerce-number exp 'int)))
- (setq lol (+ lol stepl))
- this)))
+ #'(lambda (unused)
+ (let* ((exp (exp lol))
+ (this (coerce-number exp 'int)))
+ (setq lol (+ lol stepl))
+ this)))
(fset #'linf
- #'(lambda (unused)
- (let* ((this (coerce-number lo 'int)))
- (setq lo (+ lo step))
- this)))
+ #'(lambda (unused)
+ (let* ((this (coerce-number lo 'int)))
+ (setq lo (+ lo step))
+ this)))
(mapc-inplace (if logp #'logf #'linf) result)
result))
(defun bm-util-average (dllv c)
(let* ((size (dllist-size dllv))
- (res 0))
+ (res 0))
(mapc-internal
#'(lambda (v)
- (setq res (+ res (aref v c))))
+ (setq res (+ res (aref v c))))
dllv)
(// res size)))
(defun bm-util-deviation (dllv avg c)
(let* ((size (dllist-size dllv))
- (res 0))
+ (res 0))
(mapc-internal
#'(lambda (v)
- (setq res
- (+ res (^ (- (aref v c) avg) 2))))
+ (setq res
+ (+ res (^ (- (aref v c) avg) 2))))
dllv)
(sqrt (// res size))))
(defun bm-determine-time-stability (test-funv result)
"Examine RESULT and try to guess if time data behaves like O(1)."
(let* ((vlen (length test-funv))
- (resv (make-vector (1+ vlen) 0))
- (j 0)
- (avgsum 0)
- (devsum 0))
+ (resv (make-vector (1+ vlen) 0))
+ (j 0)
+ (avgsum 0)
+ (devsum 0))
(while (< j vlen)
(let* ((fun (aref test-funv j))
- (name (function-documentation fun))
- (avg (bm-util-average result j))
- (adev (bm-util-deviation result avg j))
- (rdev (* (// adev avg) 100)))
- (setq avgsum (+ avgsum avg)
- devsum (+ devsum adev))
- (aset resv j (vector name avg adev rdev)))
+ (name (function-documentation fun))
+ (avg (bm-util-average result j))
+ (adev (bm-util-deviation result avg j))
+ (rdev (* (// adev avg) 100)))
+ (setq avgsum (+ avgsum avg)
+ devsum (+ devsum adev))
+ (aset resv j (vector name avg adev rdev)))
(setq j (1+ j)))
(aset resv vlen (vector "SUM" avgsum devsum (* (// devsum avgsum) 100)))
resv))
(defun bm-examine-time-stability (test-funv point)
(princ (format "Testing time stability on %d ...\n" point)
- 'external-debugging-output)
+ 'external-debugging-output)
(let* ((grain 100)
- (pile (dllist)))
+ (pile (dllist)))
(loop for i below grain
do (dllist-append
- pile
- (prog2
- ;; for the log
- (insert (format "%d" point))
- (mapvector
- #'(lambda (f)
- (let* ((time
- (bm-profile-time
- (funcall f point))))
- ;; for the log
- (insert (format " %d" time))
- time))
- test-funv)
- ;; for the log
- (insert (format "\n" point)))))
+ pile
+ (prog2
+ ;; for the log
+ (insert (format "%d" point))
+ (mapvector
+ #'(lambda (f)
+ (let* ((time
+ (bm-profile-time
+ (funcall f point))))
+ ;; for the log
+ (insert (format " %d" time))
+ time))
+ test-funv)
+ ;; for the log
+ (insert (format "\n" point)))))
(let* ((ts (bm-determine-time-stability test-funv pile)))
;;(bm-dump-pile test-funv pile ts)
(mapc-internal
#'(lambda (v)
- (let* ((name (aref v 0))
- (avg (aref v 1))
- (adev (aref v 2))
- (rdev (aref v 3)))
- (princ (format "%32s, avg: %10d us (±%d us = %3.2f %%%s)\n"
- name avg adev rdev
- (if (< rdev 25) "" " = UNSTABLE!"))
- 'external-debugging-output)))
+ (let* ((name (aref v 0))
+ (avg (aref v 1))
+ (adev (aref v 2))
+ (rdev (aref v 3)))
+ (princ (format "%32s, avg: %10d us (±%d us = %3.2f %%%s)\n"
+ name avg adev rdev
+ (if (< rdev 25) "" " = UNSTABLE!"))
+ 'external-debugging-output)))
ts)
(vector pile ts))))
(defun bm-estimate-time (test &optional grain)
(let* ((test-funv (plist-get test :test-funv))
- (test-range (plist-get test :test-range))
- (grain (or grain (plist-get test :grain) 20))
- (pf (plist-get test :plot-file))
- (buf (get-buffer-create (or pf "dontcare")))
- (tflen (length test-funv))
- (sample-points (bm-compute-sample-points test-range grain))
- (samples (make-skiplist)))
+ (test-range (plist-get test :test-range))
+ (grain (or grain (plist-get test :grain) 20))
+ (pf (plist-get test :plot-file))
+ (buf (get-buffer-create (or pf "dontcare")))
+ (tflen (length test-funv))
+ (sample-points (bm-compute-sample-points test-range grain))
+ (samples (make-skiplist)))
(with-temp-buffer
;; for the log
(insert "N")
(loop for j from 1 to tflen
- do (insert (format " t%d" j)))
+ do (insert (format " t%d" j)))
(insert "\n")
;; now run the tests
(mapcar
#'(lambda (point)
- (put-skiplist samples point (bm-run-tests test-funv point)))
+ (put-skiplist samples point (bm-run-tests test-funv point)))
sample-points)
(write-region-internal (point-min) (point-max) pf)
(princ "\n" 'external-debugging-output))
(insert (format "\n### component %d\n" c))
(map-skiplist
#'(lambda (key val)
- (let* ((pile (aref val 0))
- (ts (aref val 1))
- (tslen (length ts))
- (vec (aref ts c)))
- (insert (format "%d %f %f %f\n"
- key (aref vec 1) (aref vec 2) (aref vec 3)))))
+ (let* ((pile (aref val 0))
+ (ts (aref val 1))
+ (tslen (length ts))
+ (vec (aref ts c)))
+ (insert (format "%d %f %f %f\n"
+ key (aref vec 1) (aref vec 2) (aref vec 3)))))
samples)
(insert "\n")))
(with-current-buffer (get-buffer-create buf)
(map-skiplist
#'(lambda (key val)
- (insert (format "%s %S\n" key val)))
+ (insert (format "%s %S\n" key val)))
samples)
(insert "\n")))
(defun bm-dump-pile (test-funv pile ts)
(with-temp-buffer
(let* ((vlen (length test-funv))
- (resv (make-vector (1+ vlen) 0))
- (j 0))
+ (resv (make-vector (1+ vlen) 0))
+ (j 0))
(while (< j vlen)
- (let* ((fun (aref test-funv j))
- (name (function-documentation fun))
- (i 0))
- (insert "\n\n## " name "\n")
- (mapc-internal
- #'(lambda (v)
- (insert (format "%d %f\n" i (aref v j)))
- (setq i (1+ i)))
- pile))
- (setq j (1+ j)))
+ (let* ((fun (aref test-funv j))
+ (name (function-documentation fun))
+ (i 0))
+ (insert "\n\n## " name "\n")
+ (mapc-internal
+ #'(lambda (v)
+ (insert (format "%d %f\n" i (aref v j)))
+ (setq i (1+ i)))
+ pile))
+ (setq j (1+ j)))
(write-region (point-min) (point-max) "benchmark.plot")
(princ "\n" 'external-debugging-output))))
(provide 'benchmark)
-
(check-frame-geometry x (+ y 3))
(set-frame-property frame 'left (+ x 3))
(check-frame-geometry (+ x 3) (+ y 3))))
-
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
(setq im (make-glyph [xbm :file "xemacsicon.xbm"])))
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
(make-glyph [string :data "xemacs"]))
;; button in a group
(setq ok-select nil)
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (make-glyph
- (setq radio-button1
+ (make-glyph
+ (setq radio-button1
[button :face widget
:descriptor ["ok1" (setq ok-select t)
:style radio :selected ok-select]])))
;; button in a group
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (make-glyph
+ (make-glyph
(setq radio-button2
- [button :descriptor ["ok2" (setq ok-select nil) :style radio
+ [button :descriptor ["ok2" (setq ok-select nil) :style radio
:selected (not ok-select)]])))
;; toggle button
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
(setq tbutton
- (make-glyph [button :descriptor ["ok3" (setq ok-select nil)
- :style toggle
+ (make-glyph [button :descriptor ["ok3" (setq ok-select nil)
+ :style toggle
:selected (not ok-select)]])))
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (make-glyph
+ (make-glyph
(setq toggle-button
- [button :descriptor ["ok4" :style toggle
- :callback
+ [button :descriptor ["ok4" :style toggle
+ :callback
(setq ok-select (not ok-select))
:selected ok-select]])))
;; normal pushbutton
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (setq push-button
+ (setq push-button
(make-glyph [button :width 10 :height 2
:face modeline-mousable
:descriptor "ok" :callback foo
:selected t])))
;; tree view
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (setq tree (make-glyph
+ (setq tree (make-glyph
[tree-view :width 10
:descriptor "My Tree"
:items (["One" foo]
"Three")])))
;; tab control
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (setq tab (make-glyph
+ (setq tab (make-glyph
[tab-control :descriptor "My Tab"
:face highlight
:orientation right
["Three" foo :selected nil])])))
;; progress gauge
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (setq pgauge (make-glyph
+ (setq pgauge (make-glyph
[progress-gauge :width 10 :height 2 :value 0
:descriptor "ok"])))
;; progress the progress ...
(sit-for 0.1)))
;; progress gauge in the modeline
-(setq global-mode-string
+(setq global-mode-string
(cons (make-extent nil nil)
- (setq pg (make-glyph
+ (setq pg (make-glyph
[progress-gauge :width 5 :pixel-height 16
:descriptor "ok"]))))
;; progress the progress ...
(redisplay-frame)
(sit-for 0.1)))
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (make-glyph
+ (make-glyph
[button :face modeline-mousable
:descriptor "ok" :callback foo
:image [xpm :file "../etc/xemacs-icon.xpm"]]))
;; normal pushbutton
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
(setq pbutton
(make-glyph [button :descriptor ["A Big Button" foo ]])))
;; edit box
-(set-extent-begin-glyph
- (make-extent (point) (point))
+(set-extent-begin-glyph
+ (make-extent (point) (point))
(make-glyph (setq edit-field [edit-field :pixel-width 50 :pixel-height 30
:face bold-italic
:descriptor ["Hello"]])))
;; combo box
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
(make-glyph (setq combo-box
- [combo-box :width 10 :descriptor ["Hello"]
+ [combo-box :width 10 :descriptor ["Hello"]
:items ("One" "Two" "Three")])))
;; label
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
(make-glyph (setq label [label :pixel-width 150 :descriptor "Hello"])))
;; string
-(set-extent-begin-glyph
+(set-extent-begin-glyph
(make-extent (point) (point))
- (make-glyph
+ (make-glyph
(setq str
[string :data "Hello There"])))
;; scrollbar
-;(set-extent-begin-glyph
+;(set-extent-begin-glyph
; (make-extent (point) (point))
; (make-glyph [scrollbar :width 50 :height 20 :descriptor ["Hello"]]))
(set-extent-begin-glyph (make-extent (point) (point)) sw)
;; layout
-(setq layout
+(setq layout
(make-glyph
`[layout :descriptor "The Layout"
:orientation vertical
;; another test layout
(set-extent-begin-glyph
- (make-extent (point) (point))
+ (make-extent (point) (point))
(setq layout-2
(make-glyph `[layout :descriptor "The Layout"
:orientation vertical
:items ([progress-gauge :value 4 :width 10 :height 2
:descriptor "ok"])])
(setq test-toggle-widget nil)
-
+
(defun test-toggle (widget)
- (set-extent-begin-glyph
+ (set-extent-begin-glyph
(make-extent (point) (point))
(make-glyph (vector 'button
:descriptor "ok"
(setq str "Hello\nAgain")
(setq str-ext (make-extent 0 5 str))
-(set-extent-begin-glyph
+(set-extent-begin-glyph
str-ext
(make-glyph [xpm :file "../etc/xemacs-icon.xpm"]))
(set-extent-property str-ext 'mouse-face 'highlight)
(setq str2-ext (make-extent 0 1 str2))
(set-extent-begin-glyph
str2-ext
- (make-glyph
+ (make-glyph
[button :width 5 :height 1
:face modeline-mousable
:callback (set-specifier bottom-gutter-visible-p '(str2))
(set-specifier bottom-gutter-height 'autodetect)
(set-specifier bottom-gutter-border-width 2)
-(set-gutter-element
+(set-gutter-element
bottom-gutter 'str
- (make-glyph
- [layout :orientation vertical
- :justify left :margin-width 4
+ (make-glyph
+ [layout :orientation vertical
+ :justify left :margin-width 4
:items ([string :data "Fontifying glyphs.c..."]
- [layout :orientation horizontal
- :items
+ [layout :orientation horizontal
+ :items
([progress-gauge :value 0 :pixel-height 24
- :pixel-width 250 :descriptor
+ :pixel-width 250 :descriptor
"Progress"]
[button :pixel-height 24
- :descriptor " Stop "
+ :descriptor " Stop "
:callback (quote quit)])])]))
(set-gutter-element bottom-gutter 'str2 str2)
(set-gutter-element-visible-p bottom-gutter-visible-p 'str t)
(set-gutter-element-visible-p bottom-gutter-visible-p 'str2 t)
-
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Just load the file to run the test.
(test-match 0 "[^\e$(B4A\e(Ba]" "b\e$(B4A\e(Bab\e$(B4A;z\e(Bba")
(test-match 5 "\e$(B4A\e(B[^\e$(B4A\e(Ba]" "a\e$(B4A\e(Bab\e$(B4A4A;z\e(Bba")
)
-
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Synched up with: Not in FSF.
(defbug 7
(string-match "\\(\\s-\\|$\\)" "å"))
-
+
;;;; -------------------------------------------------------------------
;;;; Bugs below this line have been fixed.
;;;; Keep these for regression testing