15dfecf96Smrg;;
25dfecf96Smrg;; Copyright (c) 2002 by The XFree86 Project, Inc.
35dfecf96Smrg;;
45dfecf96Smrg;; Permission is hereby granted, free of charge, to any person obtaining a
55dfecf96Smrg;; copy of this software and associated documentation files (the "Software"),
65dfecf96Smrg;; to deal in the Software without restriction, including without limitation
75dfecf96Smrg;; the rights to use, copy, modify, merge, publish, distribute, sublicense,
85dfecf96Smrg;; and/or sell copies of the Software, and to permit persons to whom the
95dfecf96Smrg;; Software is furnished to do so, subject to the following conditions:
105dfecf96Smrg;;
115dfecf96Smrg;; The above copyright notice and this permission notice shall be included in
125dfecf96Smrg;; all copies or substantial portions of the Software.
135dfecf96Smrg;;
145dfecf96Smrg;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
155dfecf96Smrg;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
165dfecf96Smrg;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
175dfecf96Smrg;; THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
185dfecf96Smrg;; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
195dfecf96Smrg;; OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
205dfecf96Smrg;; SOFTWARE.
215dfecf96Smrg;;
225dfecf96Smrg;; Except as contained in this notice, the name of the XFree86 Project shall
235dfecf96Smrg;; not be used in advertising or otherwise to promote the sale, use or other
245dfecf96Smrg;; dealings in this Software without prior written authorization from the
255dfecf96Smrg;; XFree86 Project.
265dfecf96Smrg;;
275dfecf96Smrg;; Author: Paulo César Pereira de Andrade
285dfecf96Smrg;;
295dfecf96Smrg;;
305dfecf96Smrg;; $XFree86: xc/programs/xedit/lisp/test/math.lsp,v 1.4 2002/11/30 23:13:14 paulo Exp $
315dfecf96Smrg;;
325dfecf96Smrg
335dfecf96Smrg;; basic math tests
345dfecf96Smrg;; This is far from a good regression test, but in the current stage of
355dfecf96Smrg;; the interpreter, this is good enough to make sure it is not "so"
365dfecf96Smrg;; broken. But note that this does not test all cases where there is
375dfecf96Smrg;; change in the type of a numeric object.
385dfecf96Smrg
395dfecf96Smrg(setq *default-float-format* 'double-float)
405dfecf96Smrg
415dfecf96Smrg;; floating point results may differ from implementation to implementation (?!)
425dfecf96Smrg
435dfecf96Smrg(defun test (expect function &rest arguments &aux result (error t))
445dfecf96Smrg    (ignore-errors
455dfecf96Smrg	(setq result (apply function arguments))
465dfecf96Smrg	(setq error nil)
475dfecf96Smrg    )
485dfecf96Smrg    (if error
495dfecf96Smrg	(format t "ERROR: (~A~{ ~A~})~%" function arguments)
505dfecf96Smrg	;; Use eql to make sure result and expect have the same type
515dfecf96Smrg	(or (eql result expect)
525dfecf96Smrg#-xedit	;; hack...
535dfecf96Smrg	    (or
545dfecf96Smrg		(and
555dfecf96Smrg		    (floatp result)
565dfecf96Smrg		    (floatp expect)
575dfecf96Smrg		    (< (abs (- (abs result) (abs expect)))
585dfecf96Smrg			0.00000000000001d0)
595dfecf96Smrg		)
605dfecf96Smrg		(format t "(~A~{ ~A~}) => should be ~A not ~A~%"
615dfecf96Smrg		    function arguments expect result
625dfecf96Smrg		)
635dfecf96Smrg	    )
645dfecf96Smrg#+xedit     (format t "(~A~{ ~A~}) => should be ~A not ~A~%"
655dfecf96Smrg		function arguments expect result
665dfecf96Smrg	    )
675dfecf96Smrg	)
685dfecf96Smrg    )
695dfecf96Smrg)
705dfecf96Smrg
715dfecf96Smrg(defun div-test (quotient remainder function &rest arguments
725dfecf96Smrg		 &aux quo rem  (error t))
735dfecf96Smrg    (ignore-errors
745dfecf96Smrg	(multiple-value-setq (quo rem) (apply function arguments))
755dfecf96Smrg	(setq error nil)
765dfecf96Smrg    )
775dfecf96Smrg    (if error
785dfecf96Smrg	(format t "ERROR: (~A~{ ~A~})~%" function arguments)
795dfecf96Smrg	(or (and (eql quotient quo) (eql remainder rem))
805dfecf96Smrg#-xedit	;; hack
815dfecf96Smrg	    (or
825dfecf96Smrg		(or
835dfecf96Smrg		    (eql quotient quo)
845dfecf96Smrg		    (and
855dfecf96Smrg			(floatp quotient)
865dfecf96Smrg			(floatp quo)
875dfecf96Smrg			(< (abs (- (abs quotient) (abs quo)))
885dfecf96Smrg			    0.00000000000001d0)
895dfecf96Smrg		    )
905dfecf96Smrg		)
915dfecf96Smrg		(or
925dfecf96Smrg		    (eql remainder rem)
935dfecf96Smrg		    (and
945dfecf96Smrg			(floatp remainder)
955dfecf96Smrg			(floatp rem)
965dfecf96Smrg			(< (abs (- (abs remainder) (abs rem)))
975dfecf96Smrg			    0.00000000000001d0)
985dfecf96Smrg		    )
995dfecf96Smrg		)
1005dfecf96Smrg		(format t "(~A~{ ~A~}) => should be ~A; ~A not ~A; ~A~%"
1015dfecf96Smrg		    function arguments quotient remainder quo rem
1025dfecf96Smrg		)
1035dfecf96Smrg	    )
1045dfecf96Smrg#+xedit	    (format t "(~A~{ ~A~}) => should be ~A; ~A not ~A; ~A~%"
1055dfecf96Smrg		function arguments quotient remainder quo rem
1065dfecf96Smrg	    )
1075dfecf96Smrg	)
1085dfecf96Smrg    )
1095dfecf96Smrg)
1105dfecf96Smrg
1115dfecf96Smrg(defun bool-test (expect function &rest arguments &aux result (error t))
1125dfecf96Smrg    (ignore-errors
1135dfecf96Smrg	(setq result (apply function arguments))
1145dfecf96Smrg	(setq error nil)
1155dfecf96Smrg    )
1165dfecf96Smrg    (if error
1175dfecf96Smrg	(format t "ERROR: (~A~{ ~A~})~%" function arguments)
1185dfecf96Smrg	(or (eq result expect)
1195dfecf96Smrg	    (format t "(~A~{ ~A~}) => should be ~A not ~A~%"
1205dfecf96Smrg		function arguments expect result
1215dfecf96Smrg	    )
1225dfecf96Smrg	)
1235dfecf96Smrg    )
1245dfecf96Smrg)
1255dfecf96Smrg
1265dfecf96Smrg(defun error-test (function &rest arguments &aux result (error t))
1275dfecf96Smrg  (ignore-errors
1285dfecf96Smrg    (setq result (apply function arguments))
1295dfecf96Smrg    (setq error nil))
1305dfecf96Smrg  (unless error
1315dfecf96Smrg    (format t "ERROR: no error for (~A~{ ~A}), result was ~A~%"
1325dfecf96Smrg      function arguments result)))
1335dfecf96Smrg
1345dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1355dfecf96Smrg;; fixnum fixnum
1365dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1375dfecf96Smrg(test 0 #'+)
1385dfecf96Smrg(test 5 #'+ 5)
1395dfecf96Smrg(test -2 #'+ -2)
1405dfecf96Smrg(test 3 #'+ 2 1)
1415dfecf96Smrg(test 134217728 #'+ 134217727 1)
1425dfecf96Smrg(test -134217729 #'+ -134217728 -1)
1435dfecf96Smrg(test 2147483648 #'+ 2147483647 1)
1445dfecf96Smrg(test -2147483649 #'+ -2147483648 -1)
1455dfecf96Smrg(test -5 #'- 5)
1465dfecf96Smrg(test 6 #'- -6)
1475dfecf96Smrg(test 1 #'- 2 1)
1485dfecf96Smrg(test 134217728 #'- 134217727 -1)
1495dfecf96Smrg(test -2147483649 #'- -2147483648 1)
1505dfecf96Smrg(test 4294967295 #'- 2147483647 -2147483648)
1515dfecf96Smrg(test 1 #'*)
1525dfecf96Smrg(test 4 #'* 4)
1535dfecf96Smrg(test -5 #'* -5)
1545dfecf96Smrg(test 6 #'* 2 3)
1555dfecf96Smrg(test 2147483648 #'* 65536 32768)
1565dfecf96Smrg(test 2147418112 #'* 65536 32767)
1575dfecf96Smrg(test 134217728 #'* 65536 2048)
1585dfecf96Smrg(test -134217728 #'* 65536 -2048)
1595dfecf96Smrg(test 1/3 #'/ 3)
1605dfecf96Smrg(test -1/4 #'/ -4)
1615dfecf96Smrg(test 1/3 #'/ 10 30)
1625dfecf96Smrg(test -1/2 #'/ -5 10)
1635dfecf96Smrg(test -4 #'/ 20 -5)
1645dfecf96Smrg(test 431432412345/32 #'/ 431432412345 32)
1655dfecf96Smrg(test -2147483647/2147483648 #'/ 2147483647 -2147483648)
1665dfecf96Smrg(test -1 #'/ 2147483648 -2147483648)
1675dfecf96Smrg(test 2147483648 #'/ -2147483648 -1)
1685dfecf96Smrg(test -1/2147483648 #'/ 1 -2147483648)
1695dfecf96Smrg(test 1 #'min 2 3 4 1 5)
1705dfecf96Smrg(test 7 #'max 0 -2 7 6 3)
1715dfecf96Smrg(test -2147483648 #'min -2147483648 2147483647)
1725dfecf96Smrg(test 2147483647 #'max -2147483648 2147483647)
1735dfecf96Smrg(bool-test t #'< 1 2)
1745dfecf96Smrg(bool-test nil #'< 2 2)
1755dfecf96Smrg(bool-test nil #'< 4 3)
1765dfecf96Smrg(bool-test t #'< -2147483648 -1)
1775dfecf96Smrg(bool-test t #'< -2147483648 2147483648)
1785dfecf96Smrg(bool-test t #'<= 3 3)
1795dfecf96Smrg(bool-test nil #'<= 3 2)
1805dfecf96Smrg(bool-test t #'<= 3 7)
1815dfecf96Smrg(bool-test t #'<= -2147483648 2147483648)
1825dfecf96Smrg(bool-test t #'= 1 1)
1835dfecf96Smrg(bool-test nil #'= 1 -1)
1845dfecf96Smrg(bool-test t #'= -2147483648 -2147483648)
1855dfecf96Smrg(bool-test t #'>= 4 3)
1865dfecf96Smrg(bool-test t #'>= 5 5)
1875dfecf96Smrg(bool-test nil #'>= 4 9)
1885dfecf96Smrg(bool-test t #'>= 2147483647 -2147483648)
1895dfecf96Smrg(bool-test t #'> 7 5)
1905dfecf96Smrg(bool-test nil #'> 20 20)
1915dfecf96Smrg(bool-test nil #'> 19 31)
1925dfecf96Smrg(bool-test nil #'> 2147483647 2147483648)
1935dfecf96Smrg(bool-test nil #'> -2147483648 2147483647)
1945dfecf96Smrg(bool-test nil #'/= 2147483647 2147483647)
1955dfecf96Smrg(bool-test t #'/= 2147483647 -2147483648)
1965dfecf96Smrg
1975dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1985dfecf96Smrg;; fixnum bignum
1995dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2005dfecf96Smrg(test 4123412341238575768576858308380 #'+
2015dfecf96Smrg	431412 4123412341238575768576857876968)
2025dfecf96Smrg(test -653653534554686349560628211 #'-
2035dfecf96Smrg	4231423 653653534554686349564859634)
2045dfecf96Smrg(test 17952112630025927929 #'* 4342423 4134123421423)
2055dfecf96Smrg(test 412341/766687896595678 #'/ 412341 766687896595678)
2065dfecf96Smrg
2075dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2085dfecf96Smrg;; fixnum flonum
2095dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2105dfecf96Smrg(test 566594.4123d0 #'+ 43141 523453.4123d0)
2115dfecf96Smrg(test -2.106249523586876d9 #'+ -2147483647 41234123.413124d0)
2125dfecf96Smrg(test -6530250.653d0 #'- 4314 6534564.653d0)
2135dfecf96Smrg(test -358687.653d0 #'- -324123 34564.653d0)
2145dfecf96Smrg(test 3.26338916904d67 #'* 431234 756756d56)
2155dfecf96Smrg(test 5.731169192902366d-50 #'/ 3 5234534d43)
2165dfecf96Smrg(bool-test t #'< 423421 646454d0)
2175dfecf96Smrg(bool-test t #'= 43242113 43242113d0)
2185dfecf96Smrg
2195dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2205dfecf96Smrg;; fixnum fixratio
2215dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2225dfecf96Smrg(test 38654705646/17 #'+ 2147483647 2147483647/17)
2235dfecf96Smrg(test -2146748499/17 #'+ 43244 -2147483647/17)
2245dfecf96Smrg(test 17633127/4232 #'- 4321 653345/4232)
2255dfecf96Smrg(test 28227714415090/4323 #'* 4312442 6545645/4323)
2265dfecf96Smrg(test 639030/1441 #'* 42 15215/1441)
2275dfecf96Smrg(test 924444112/547 #'/ 3432342 1641/808)
2285dfecf96Smrg(bool-test t #'> 41342 42423/32)
2295dfecf96Smrg
2305dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2315dfecf96Smrg;; fixnum bigratio
2325dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2335dfecf96Smrg(test 134681902103055335/31231131234 #'+ 4312423 53453535353/31231131234)
2345dfecf96Smrg(test 134681795195984629/31231131234 #'- 4312423 53453535353/31231131234)
2355dfecf96Smrg(test 230514255287590319/31231131234 #'* 4312423 53453535353/31231131234)
2365dfecf96Smrg(test 134681848649519982/53453535353 #'/ 4312423 53453535353/31231131234)
2375dfecf96Smrg(bool-test t #'> 4312423 53453535353/31231131234)
2385dfecf96Smrg
2395dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2405dfecf96Smrg;; bignum fixnum
2415dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2425dfecf96Smrg(test 4123412341234124068 #'+ 4123412341234123412 656)
2435dfecf96Smrg(test 2147483647 #'+ 2147483648 -1)
2445dfecf96Smrg(test 2147483648 #'- 2147483647 -1)
2455dfecf96Smrg(test 3245393337480 #'* 4242344232 765)
2465dfecf96Smrg(test 1414114744/255 #'/ 4242344232 765)
2475dfecf96Smrg(bool-test nil #'< 2147483648 1)
2485dfecf96Smrg(bool-test t #'> 2147483648 -2147483648)
2495dfecf96Smrg
2505dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2515dfecf96Smrg;; bignum flonum
2525dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2535dfecf96Smrg(test 5.452523543454353d15 #'+ 5452523543454353 423d-6)
2545dfecf96Smrg(test -3.41423d205 #'- 54235423452345424443423 341423d200)
2555dfecf96Smrg(test 2.7061221650759596d89 #'* 413423412341231232 6.545643242d71)
2565dfecf96Smrg(test 9.744908405310087d-29 #'/ 41341234214 4242342d32)
2575dfecf96Smrg(bool-test t #'< 4314123412312341234123 4234242d46)
2585dfecf96Smrg(bool-test nil #'> 42342342142142421412341242 423423.432423d51)
2595dfecf96Smrg(bool-test t #'= 100000000000000000000 1d20)
2605dfecf96Smrg
2615dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2625dfecf96Smrg;; bignum fixratio
2635dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2645dfecf96Smrg(test 3027180466416641662/7 #'+ 432454352345234523 1/7)
2655dfecf96Smrg(test 4294967295/2 #'- 2147483648 1/2)
2665dfecf96Smrg(test 14113747078041141/152263 #'* 42341241234123423 1/456789)
2675dfecf96Smrg(test 475355357536664/19 #'* 43214123412424 11/19)
2685dfecf96Smrg(test 143960192608 #'/ 4234123312 1/34)
2695dfecf96Smrg(test 15032385536/5 #'/ 2147483648 5/7)
2705dfecf96Smrg(bool-test nil #'< 4123412341234123 423424/23)
2715dfecf96Smrg(bool-test nil #'= 2147483648 1/3)
2725dfecf96Smrg(bool-test t #'> 2147483648 1/3)
2735dfecf96Smrg
2745dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2755dfecf96Smrg;; bignum bigratio
2765dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2775dfecf96Smrg(test -493153721444554600746963362777609/11404707804137
2785dfecf96Smrg	#'+ -43241241241241234234 18178448448449/11404707804137)
2795dfecf96Smrg(test 22573725350444837506376255369215081106984960/431241324242143434377
2805dfecf96Smrg	#'- 52345923457394857234895 455/431241324242143434377)
2815dfecf96Smrg(test 355905909219316970540364021939287762325439304380984344811607132990/14374707710807
2825dfecf96Smrg	#'* 45523452345234790345923405723902389345782390 23454234524234523623623/43124123132421)
2835dfecf96Smrg(test -853356237922877963618542794532291751029677352/21566206170617061706171
2845dfecf96Smrg	#'/ 4131234123412342 -43132412341234123412342/413124123412312234123412312312)
2855dfecf96Smrg(bool-test nil #'< 9482384762389461234892 463124869123897/43124123456678)
2865dfecf96Smrg(bool-test t #'/= 4689123469123846123843 4123894623894612/211)
2875dfecf96Smrg(bool-test t #'> 90437849234701234891203 4234123423/37)
2885dfecf96Smrg
2895dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2905dfecf96Smrg;; flonum fixnum
2915dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2925dfecf96Smrg(test 4.3291328479d86 #'+ 43291328479d76 431243)
2935dfecf96Smrg(test 4.123123123432d58 #'- 4123123123432d46 2147483647)
2945dfecf96Smrg(test 4.1974800714094d109 #'* 970874791d96 43234)
2955dfecf96Smrg(test -1.0004838618250252d55 #'/ -432423.432d56 4322143)
2965dfecf96Smrg(bool-test nil #'< 4324932.342d5 4321421)
2975dfecf96Smrg(bool-test t #'> 2147483648d0 2147483647)
2985dfecf96Smrg
2995dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3005dfecf96Smrg;; flonum bignum
3015dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3025dfecf96Smrg(test 4.3124325345d62 #'+ 4312432.5345d56 431241234901234791023479023)
3035dfecf96Smrg(test 4.123123443242d39 #'- 41231234.43242d32 -10947390284720389)
3045dfecf96Smrg(test 9.81681448753991d48 #'* 42342.89d27 231840917980324712)
3055dfecf96Smrg(test 6.837110051466236d49 #'/ -64832d57 -948236894126)
3065dfecf96Smrg(bool-test nil #'< 7589079203d56 43214124124312)
3075dfecf96Smrg
3085dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3095dfecf96Smrg;; flonum flonum
3105dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3115dfecf96Smrg(test 4.12685643412d7 #'+ 34442.3412d0 41234122d0)
3125dfecf96Smrg(test -4.23432d84 #'- -45523453d56 423432d79)
3135dfecf96Smrg(test 2.0000000000000004d0 #'* 1.4142135623730951d0 1.4142135623730951d0)
3145dfecf96Smrg(test -1.414213562373095d0 #'/ -2d0 1.4142135623730951d0)
3155dfecf96Smrg(test 0.7071067811865476d0 #'/ 1.4142135623730951d0 2d0)
3165dfecf96Smrg(bool-test nil #'< 43124123d56 4231412d43)
3175dfecf96Smrg
3185dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3195dfecf96Smrg;; flonum fixratio
3205dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3215dfecf96Smrg(test 3.41412d61 #'+ 341412d56 3/652)
3225dfecf96Smrg(test 4.312443d72 #'- 43124.43d68 42421/5678)
3235dfecf96Smrg(test -4.32112300201218d73 #'* 4321123d67 -2147483648/2147483647)
3245dfecf96Smrg(test 3.388443859138533d58 #'/ 432412d54 13744/1077)
3255dfecf96Smrg(bool-test t #'> 423194237d43 4231412/23)
3265dfecf96Smrg
3275dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3285dfecf96Smrg;; flonum bigratio
3295dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3305dfecf96Smrg(test 4.378904431d62 #'+ 4378904.431d56 49230471923047129/32412341234126)
3315dfecf96Smrg(test 0d0 #'- 1.7320508075688772d0 3900231685776981/2251799813685248)
3325dfecf96Smrg(test 5.000000000000001d0 #'* 2.23606797749979d0 629397181890197/281474976710656)
3335dfecf96Smrg(test 7.000000000000001d0 #'/ 2.6457513110645907d0 1125899906842624/2978851154656373)
3345dfecf96Smrg(bool-test nil #'< 790412390412d45 1005712007432/10518078881)
3355dfecf96Smrg
3365dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3375dfecf96Smrg;; fixratio fixnum
3385dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3395dfecf96Smrg(test 23502480199/57 #'+ 1/57 412324214)
3405dfecf96Smrg(test -1608505/39 #'- 11/39 41244)
3415dfecf96Smrg(test 241844976595/3121 #'* 45245/3121 5345231)
3425dfecf96Smrg(test 4231/30211050 #'/ 4231/67890 445)
3435dfecf96Smrg(bool-test nil #'< 43123/12 -3432)
3445dfecf96Smrg
3455dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3465dfecf96Smrg;; fixratio bignum
3475dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3485dfecf96Smrg(test 290071443963580821646/4115 #'+ -14119/4115 70491237901234711)
3495dfecf96Smrg(test 92654360215843653827434431256/1237 #'- 423412/1237 -74902473901247901234789012)
3505dfecf96Smrg(test 139081825032265225396/111 #'* 13/777 74890213478912044444)
3515dfecf96Smrg(test -22/19000187487170108051697772680759 #'/ -176/31 4903274190237447239147812304712)
3525dfecf96Smrg(bool-test t #'< 7094123/312 423412429047)
3535dfecf96Smrg
3545dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3555dfecf96Smrg;; fixratio flonum
3565dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3575dfecf96Smrg(test 3756.777956289953d0 #'+ 41290/11 3.141592653589793d0)
3585dfecf96Smrg(test 3750.494770982774d0 #'- 41290/11 3.141592653589793d0)
3595dfecf96Smrg(test 11792.396424247505d0 #'* 41290/11 3.141592653589793d0)
3605dfecf96Smrg(test 1194.8195636844289d0 #'/ 41290/11 3.141592653589793d0)
3615dfecf96Smrg(bool-test nil #'< 41290/11 3.141592653589793d0)
3625dfecf96Smrg
3635dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3645dfecf96Smrg;; fixratio fixratio
3655dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3665dfecf96Smrg(test -2/2147483647 #'+ 2147483646/2147483647 -2147483648/2147483647)
3675dfecf96Smrg(test 4611686015206162432/2305843005992468481 #'+ 2147483648/2147483646 2147483648/2147483647)
3685dfecf96Smrg(test 114/91 #'+ 5/7 7/13)
3695dfecf96Smrg(test 2 #'- 2147483646/2147483647 -2147483648/2147483647)
3705dfecf96Smrg(test -6442450939/4611686009837453315 #'- 2147483646/2147483647 2147483647/2147483645)
3715dfecf96Smrg(test 214/231 #'- 5/7 -7/33)
3725dfecf96Smrg(test 183092240452/408559 #'* '432421/3217 423412/127)
3735dfecf96Smrg(test 1057751/7345 #'* 34121/65 31/113)
3745dfecf96Smrg(test -93866791/102381559 #'/ 143747/107 -956837/653)
3755dfecf96Smrg(test 117/517 #'/ 13/33 47/27)
3765dfecf96Smrg(bool-test nil #'< 5/3 7/9)
3775dfecf96Smrg
3785dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3795dfecf96Smrg;; fixratio bigratio
3805dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3815dfecf96Smrg(test 1211321073398067249731082729214954013/1099249926163926018396018404101914
3825dfecf96Smrg	#'+ 23141/21 572903572390457239/52345234579234572304572304957234)
3835dfecf96Smrg(test -1210401943424090457832980748892408320175/1099249926163926018396018404101914
3845dfecf96Smrg	#'+ -23123441/21 572903572390457239/52345234579234572304572304957234)
3855dfecf96Smrg(test -130565585970579643613431728982140/1297324236427391
3865dfecf96Smrg	#'- 6/83 1573079349043128237436315709694/15630412487077)
3875dfecf96Smrg(test 119377824848653/98027 #'* 4123/61 28954117111/1607)
3885dfecf96Smrg(test -533081148/1126543487854337661125 #'/ 4132412/125 -9012347902834701289/129)
3895dfecf96Smrg(bool-test nil #'< 4132412/125 -9012347902834701289/129)
3905dfecf96Smrg
3915dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3925dfecf96Smrg;; bigratio fixnum
3935dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3945dfecf96Smrg(test 48668779872364438/8438103123 #'+ 49032749012471920/8438103123 -43134)
3955dfecf96Smrg(test 49396718152579402/8438103123 #'- 49032749012471920/8438103123 -43134)
3965dfecf96Smrg(test -704992865301321265760/2812701041 #'* 49032749012471920/8438103123 -43134)
3975dfecf96Smrg(test -24516374506235960/181984570053741 #'/ 49032749012471920/8438103123 -43134)
3985dfecf96Smrg(bool-test t #'> 49032749012471920/8438103123 -43134)
3995dfecf96Smrg
4005dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4015dfecf96Smrg;; bigratio bignum
4025dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4035dfecf96Smrg(test 22765322736543569109219273030163417097453878379283263605274270/46382946123894712341
4045dfecf96Smrg	#'+ 4692318468912374612389461278/46382946123894712341 490812348912346238794612389461238961238912)
4055dfecf96Smrg(test -22765322736543569109219273030163417097453878379283263605274270/46382946123894712341
4065dfecf96Smrg	#'- -4692318468912374612389461278/46382946123894712341 490812348912346238794612389461238961238912)
4075dfecf96Smrg(test -2303047849571666696101160700266058250647016644840659232609643130849536/46382946123894712341
4085dfecf96Smrg	#'* 4692318468912374612389461278/46382946123894712341 -490812348912346238794612389461238961238912)
4095dfecf96Smrg(test 2346159234456187306194730639/11382661368271784554609636515081706202567704733454325607906496
4105dfecf96Smrg	#'/ -4692318468912374612389461278/46382946123894712341 -490812348912346238794612389461238961238912)
4115dfecf96Smrg(bool-test t #'< 4692318468912374612389461278/46382946123894712341 490812348912346238794612389461238961238912)
4125dfecf96Smrg
4135dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4145dfecf96Smrg;; bigratio flonum
4155dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4165dfecf96Smrg(test 63.2771680782255d0 #'+ 31.63858403911275d0 4452734852783697/140737488355328)
4175dfecf96Smrg(test 0d0 #'+ -31.63858403911275d0 4452734852783697/140737488355328)
4185dfecf96Smrg(test -1001.0000000000001d0 #'* -31.63858403911275d0 4452734852783697/140737488355328)
4195dfecf96Smrg(test 1d0 #'/ -31.63858403911275d0 -4452734852783697/140737488355328)
4205dfecf96Smrg(bool-test nil #'< -31.63858403911275d0 -4452734852783697/140737488355328)
4215dfecf96Smrg(bool-test nil #'> -31.63858403911275d0 -4452734852783697/140737488355328)
4225dfecf96Smrg(bool-test nil #'/= -31.63858403911275d0 -4452734852783697/140737488355328)
4235dfecf96Smrg
4245dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4255dfecf96Smrg;; bigratio fixratio
4265dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4275dfecf96Smrg(test 0 #'+ 2147483648/2147483647 -2147483648/2147483647)
4285dfecf96Smrg(test 3230093924913437/413416372043776 #'+ 45705840067699/8796093022208 123/47)
4295dfecf96Smrg(test 4294967296/2147483647 #'- 2147483648/2147483647 -2147483648/2147483647)
4305dfecf96Smrg(test 1066255041450269/413416372043776 #'- 45705840067699/8796093022208 123/47)
4315dfecf96Smrg(test -5621818328326977/413416372043776 #'* -45705840067699/8796093022208 123/47)
4325dfecf96Smrg(test -2148174483181853/1081919441731584 #'/ 45705840067699/8796093022208 -123/47)
4335dfecf96Smrg(bool-test t #'> 45705840067699/8796093022208 123/47)
4345dfecf96Smrg
4355dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4365dfecf96Smrg;; bigratio bigratio
4375dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4385dfecf96Smrg(test 2679495973598190955776211861634126560767052764822779809414184089582/140710542183009389719255843429922029722593
4395dfecf96Smrg	#'+ 649812364891236481923461238946128/34124123 -7489023423142/4123491823746192384761238946123891)
4405dfecf96Smrg(test 2679495973598190955776211861634126560767052765333892522296541398514/140710542183009389719255843429922029722593
4415dfecf96Smrg	#'- 649812364891236481923461238946128/34124123 -7489023423142/4123491823746192384761238946123891)
4425dfecf96Smrg(test -4866460021317766216371472892133283923086494176/140710542183009389719255843429922029722593
4435dfecf96Smrg	#'* 649812364891236481923461238946128/34124123 -7489023423142/4123491823746192384761238946123891)
4445dfecf96Smrg(test -1339747986799095477888105930817063280383526382539168082927681372024/127778178220589327233
4455dfecf96Smrg	#'/ 649812364891236481923461238946128/34124123 -7489023423142/4123491823746192384761238946123891)
4465dfecf96Smrg(bool-test t #'> 649812364891236481923461238946128/34124123 -7489023423142/4123491823746192384761238946123891)
4475dfecf96Smrg
4485dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4495dfecf96Smrg;; complex real
4505dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4515dfecf96Smrg(test #c(2147483648 -1) #'+ #c(1 -1) 2147483647)
4525dfecf96Smrg(test #c(2.147483648d9 -1) #'+ #c(2147483647 -1) 1d0)
4535dfecf96Smrg(test #c(129642370237029633787/3 0.25d0) #'- #c(-11/3 0.25d0) -43214123412343211266)
4545dfecf96Smrg(test #c(23470/21 4.333333333333334d0) #'* #c(2347/7 1.3d0) 10/3)
4555dfecf96Smrg(test #c(134217728/11 67108864/11) #'* #c(65536 32768) 2048/11)
4565dfecf96Smrg(test #c(1.3133333333333332d0 82304) #'/ #c(1.97d0 123456) 3/2)
4575dfecf96Smrg
4585dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4595dfecf96Smrg;; real complex
4605dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4615dfecf96Smrg(test #c(80/7 7/13) #'+ 3/7 #c(11 7/13))
4625dfecf96Smrg(test #c(1.2345d47 -1) #'+ 12345d43 #c(-2147483648 -1))
4635dfecf96Smrg(test #c(-2147483649 2147483647) #'+ -2147483648 #c(-1 2147483647))
4645dfecf96Smrg(test #c(41/15 1.23456d68) #'- #c(7/5 1234.56d65) -4/3)
4655dfecf96Smrg(test #c(-41/19 2147483648) #'* #c(41/19 -2147483648) -1)
4665dfecf96Smrg(test #c(-88046829568/40802189293 2.147483649d41) #'* #c(41/19 -2147483648d32) -2147483648/2147483647)
4675dfecf96Smrg(test #c(-5.0691244239631335d0 1.3911008563333336d16)
4685dfecf96Smrg	#'/ #c(-11/7 4312412654633334) 0.31d0)
4695dfecf96Smrg(bool-test t #'= #c(1 0.0) 1)
4705dfecf96Smrg
4715dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4725dfecf96Smrg;; complex complex
4735dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4745dfecf96Smrg(test #c(-16.0d0 -4.0d0) #'+ #c(-16.0d0 -4.0d0))
4755dfecf96Smrg(test #c(0d0 1d0) #'- #c(0d0 -1d0))
4765dfecf96Smrg(test #c(1d0 3d0) #'- #c(-1d0 -3d0))
4775dfecf96Smrg(test #c(-16.0d0 -4.0d0) #'* #c(-16.0d0 -4.0d0))
4785dfecf96Smrg(test #c(-0.058823529411764705d0 0.014705882352941176d0) #'/ #c(-16d0 -4d0))
4795dfecf96Smrg(test #c(1.94d0 301868863889/7) #'+ #c(3/5 5/7) #c(1.34d0 43124123412))
4805dfecf96Smrg(test #c(8641975242/7 -3.4596d0) #'- #c(1234567890 0.0004d0) #c(-12/7 3.46d0))
4815dfecf96Smrg(test #c(2944.315858312371d0 5.59002d13) #'* #c(-11/7 -1234d9) #c(-45.3d0 5/2147483647))
4825dfecf96Smrg(test #c(1.9635384272224412d-8 -0.33333333317811176d0)
4835dfecf96Smrg	#'/ #c(2147483647/3 -0.5d0) #c(128 2147483648.0d0))
4845dfecf96Smrg(test #c(8.154945137073864d11 2.621232365490813d12)
4855dfecf96Smrg	#'/ #c(-1.3d0 4312412654633) #c(3/2 7/15))
4865dfecf96Smrg(test #c(0.003674737027278924d0 -257.6948748113586d0)
4875dfecf96Smrg	#'/ #c(1.5d0 -432412) #c(1678 -567/31313))
4885dfecf96Smrg(bool-test t #'= #c(1 2d0) #c(1 2))
4895dfecf96Smrg(bool-test nil #'/= #c(1 2) #c(1d0 2d0))
4905dfecf96Smrg
4915dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4925dfecf96Smrg;; abs
4935dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4945dfecf96Smrg(test 2147483648 #'abs -2147483648)
4955dfecf96Smrg(test 2147483647 #'abs -2147483647)
4965dfecf96Smrg(test 2147483647 #'abs 2147483647)
4975dfecf96Smrg(test 1 #'abs 1)
4985dfecf96Smrg(test 5/7 #'abs -5/7)
4995dfecf96Smrg(test 2147483648/2147483647 #'abs -2147483648/2147483647)
5005dfecf96Smrg(test 3.12d0 #'abs -3.12d0)
5015dfecf96Smrg(test 4312412341234124124123412 #'abs 4312412341234124124123412)
5025dfecf96Smrg(test 4312412341234124124123412 #'abs -4312412341234124124123412)
5035dfecf96Smrg(test 1.0 #'abs #c(1 0.0))
5045dfecf96Smrg(test 11.40175425099138d0 #'abs #c(-11 3d0))
5055dfecf96Smrg(test 4.47213595499958d0 #'abs #c(-4 -2))
5065dfecf96Smrg(test 1.0 #'abs #c(0.0 -1.0))
5075dfecf96Smrg
5085dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5095dfecf96Smrg;; sqrt
5105dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5115dfecf96Smrg(test 3.4641016151377544d0 #'sqrt 12)
5125dfecf96Smrg(test #c(0 12) #'sqrt -144)
5135dfecf96Smrg(test 6.429728792199102d18 #'sqrt 41341412341234123412490123470912347210)
5145dfecf96Smrg(test 41341412341234123412490123470912347210
5155dfecf96Smrg	#'sqrt 1709112374367945085349927261774254951456404621200206927501652414831594784100)
5165dfecf96Smrg(test 46340.95001184158d0 #'sqrt 2147483648)
5175dfecf96Smrg(test 0.7071067811865476d0 #'sqrt 0.5d0)
5185dfecf96Smrg(test 0 #'sqrt 0)
5195dfecf96Smrg(test 0d0 #'sqrt 0d0)
5205dfecf96Smrg(test 111.1106106544285d0 #'sqrt 12345.5678d0)
5215dfecf96Smrg(test #c(0 11.119982014373944d0) #'sqrt -123.654d0)
5225dfecf96Smrg(test 3/8 #'sqrt 9/64)
5235dfecf96Smrg(test #c(0 1.1832159566199232d0) #'sqrt -7/5)
5245dfecf96Smrg(test 514.7536007118473d0 #'sqrt 821974900428408092/3102128401119)
5255dfecf96Smrg(test 413412341293461238946192384612893/314212341412341246128361289
5265dfecf96Smrg	#'sqrt 170909763933741276657131032282211169869649489782500833989461829449/98729395495825697643724477479624921705328808513741521)
5275dfecf96Smrg;; check for overflow
5285dfecf96Smrg(error-test #'sqrt 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
5295dfecf96Smrg
5305dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5315dfecf96Smrg;; mod
5325dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5335dfecf96Smrg(test 5 #'mod 5 9)
5345dfecf96Smrg(test 4 #'mod -5 9)
5355dfecf96Smrg(test -4 #'mod 5 -9)
5365dfecf96Smrg(test -5 #'mod -5 -9)
5375dfecf96Smrg(test 2147483646 #'mod -2147483648 2147483647)
5385dfecf96Smrg(test -1 #'mod -2147483648 -2147483647)
5395dfecf96Smrg(test 1 #'mod 2147483648 2147483647)
5405dfecf96Smrg(test 0 #'mod -170909763933741276657131032282211169869649489782500833989461829449 413412341293461238946192384612893)
5415dfecf96Smrg(test -1709112374367945085349927261774254951415063208858972804089162291360682436890
5425dfecf96Smrg	#'mod 41341412341234123412490123470912347210 -1709112374367945085349927261774254951456404621200206927501652414831594784100)
5435dfecf96Smrg(test 9.666666666666666d0 #'mod -1/3 10d0)
5445dfecf96Smrg(test -9.666666666666666d0 #'mod 1/3 -10d0)
5455dfecf96Smrg(test -0.3333333333333333d0 #'mod -1/3 -10d0)
5465dfecf96Smrg(test 0.3333333333333333d0 #'mod 1/3 10d0)
5475dfecf96Smrg
5485dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5495dfecf96Smrg;; rem
5505dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5515dfecf96Smrg(test 2 #'rem 11 3)
5525dfecf96Smrg(test 2 #'rem 11 -3)
5535dfecf96Smrg(test -2 #'rem -11 3)
5545dfecf96Smrg(test -2 #'rem -11 -3)
5555dfecf96Smrg(test -1 #'rem -2147483648 2147483647)
5565dfecf96Smrg(test  0.1499999999999999d0 #'rem 1.35d0 1/5)
5575dfecf96Smrg(test  -0.1499999999999999d0 #'rem -1.35d0 1/5)
5585dfecf96Smrg
5595dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5605dfecf96Smrg;; gcd
5615dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5625dfecf96Smrg(test 11 #'gcd 33 11)
5635dfecf96Smrg(test 7 #'gcd 91 -49)
5645dfecf96Smrg(test 4 #'gcd -4)
5655dfecf96Smrg(test 0 #'gcd)
5665dfecf96Smrg(test 11 #'gcd 3333 -33 1002001)
5675dfecf96Smrg(test 1 #'gcd -2147483648 2147483647)
5685dfecf96Smrg
5695dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5705dfecf96Smrg;; lcm
5715dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5725dfecf96Smrg(test 1 #'lcm)
5735dfecf96Smrg(test 10 #'lcm 10)
5745dfecf96Smrg(test 5 #'lcm -5)
5755dfecf96Smrg(test 4611686016279904256 #'lcm -2147483648 2147483647)
5765dfecf96Smrg(test 0 #'lcm 0 5)
5775dfecf96Smrg(test 60 #'lcm 1 2 3 4 5 6)
5785dfecf96Smrg
5795dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5805dfecf96Smrg;; and
5815dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5825dfecf96Smrg(test -1 #'logand)
5835dfecf96Smrg(test 0 #'logand 1 2)
5845dfecf96Smrg(test -2147483648 #'logand -2147483648 -1)
5855dfecf96Smrg(test 2147483647 #'logand 2147483647 -1)
5865dfecf96Smrg(test 2147479552 #'logand 8796093018112 2147483647)
5875dfecf96Smrg
5885dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5895dfecf96Smrg;; eqv
5905dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5915dfecf96Smrg(test -1 #'logeqv)
5925dfecf96Smrg(test -4 #'logeqv 1 2)
5935dfecf96Smrg(test -2147483648 #'logeqv -2147483648 -1)
5945dfecf96Smrg(test 2147483647 #'logeqv 2147483647 -1)
5955dfecf96Smrg(test -8793945542656 #'logeqv 8796093018112 2147483647)
5965dfecf96Smrg
5975dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5985dfecf96Smrg;; or
5995dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6005dfecf96Smrg(test 0 #'logior)
6015dfecf96Smrg(test 3 #'logior 1 2)
6025dfecf96Smrg(test -1 #'logior -2147483648 -1)
6035dfecf96Smrg(test -1 #'logior 2147483647 -1)
6045dfecf96Smrg(test 8796093022207 #'logior 8796093018112 2147483647)
6055dfecf96Smrg
6065dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6075dfecf96Smrg;; xor
6085dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6095dfecf96Smrg(test 0 #'logxor)
6105dfecf96Smrg(test 3 #'logxor 1 2)
6115dfecf96Smrg(test 2147483647 #'logxor -2147483648 -1)
6125dfecf96Smrg(test -2147483648 #'logxor 2147483647 -1)
6135dfecf96Smrg(test 8793945542655 #'logxor 8796093018112 2147483647)
6145dfecf96Smrg
6155dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6165dfecf96Smrg;; not
6175dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6185dfecf96Smrg(test -1 #'lognot 0)
6195dfecf96Smrg(test 0 #'lognot -1)
6205dfecf96Smrg(test -2 #'lognot 1)
6215dfecf96Smrg(test 1 #'lognot -2)
6225dfecf96Smrg(test -3 #'lognot 2)
6235dfecf96Smrg(test 2 #'lognot -3)
6245dfecf96Smrg(test -2147483648 #'lognot 2147483647)
6255dfecf96Smrg(test 2147483647 #'lognot -2147483648)
6265dfecf96Smrg(test -8793945542656 #'lognot 8793945542655)
6275dfecf96Smrg(test -8796093018113 #'lognot 8796093018112)
6285dfecf96Smrg
6295dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6305dfecf96Smrg;; floor
6315dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6325dfecf96Smrg(div-test 1 1/2 #'floor 3/2)
6335dfecf96Smrg(div-test 1d0 1 #'ffloor 3 2)
6345dfecf96Smrg(div-test -2 2147483646 #'floor -2147483648 2147483647)
6355dfecf96Smrg(div-test 2147483648 0 #'floor -2147483648 -1)
6365dfecf96Smrg(div-test 17179869184 0 #'floor 18446744073709551616 1073741824)
6375dfecf96Smrg(div-test -17179869201 -1073741807 #'floor 18446744073709551616 -1073741823)
6385dfecf96Smrg(div-test 2147483648 0d0 #'floor -2147483648 -1d0)
6395dfecf96Smrg(div-test -2 2147483646/2147483647 #'floor -2147483648/2147483647)
6405dfecf96Smrg(div-test 32768 32768/2147483647 #'floor 2147483648/2147483647 65535/2147483647)
6415dfecf96Smrg(div-test -32769 -32767/2147483647 #'floor 2147483648/2147483647 -65535/2147483647)
6425dfecf96Smrg(div-test -32769 32767/2147483647 #'floor -2147483648/2147483647 65535/2147483647)
6435dfecf96Smrg(div-test 32768 -32768/2147483647 #'floor -2147483648/2147483647 -65535/2147483647)
6445dfecf96Smrg(div-test 2 0.5d0 #'floor 3d0 1.25d0)
6455dfecf96Smrg(div-test 2 1d0 #'floor 4d0 1.5d0)
6465dfecf96Smrg(div-test -3 -0.5d0 #'floor 4d0 -1.5d0)
6475dfecf96Smrg(div-test -3 0.5d0 #'floor -4d0 1.5d0)
6485dfecf96Smrg(div-test 2 -1d0 #'floor -4d0 -1.5d0)
6495dfecf96Smrg(div-test 1 2/91 #'floor 5/7 9/13)
6505dfecf96Smrg(div-test -2 -61/91 #'floor 5/7 -9/13)
6515dfecf96Smrg(div-test -2 61/91 #'floor -5/7 9/13)
6525dfecf96Smrg(div-test 1 -2/91 #'floor -5/7 -9/13)
6535dfecf96Smrg(div-test 1 0 #'floor 2147483648/2147483647 2147483648/2147483647)
6545dfecf96Smrg(div-test -1 0 #'floor 2147483648/2147483647 -2147483648/2147483647)
6555dfecf96Smrg(div-test -1 0 #'floor -2147483648/2147483647 2147483648/2147483647)
6565dfecf96Smrg(div-test 1 0 #'floor -2147483648/2147483647 -2147483648/2147483647)
6575dfecf96Smrg(div-test 9437 1416337955817765/144137437447079
6585dfecf96Smrg	#'floor 16324116304212832041/144137437447079 12)
6595dfecf96Smrg(div-test -9438 -313311293547183/144137437447079
6605dfecf96Smrg	#'floor 16324116304212832041/144137437447079 -12)
6615dfecf96Smrg(div-test -9438 313311293547183/144137437447079
6625dfecf96Smrg	#'floor -16324116304212832041/144137437447079 12)
6635dfecf96Smrg(div-test 9437 -1416337955817765/144137437447079
6645dfecf96Smrg	#'floor -16324116304212832041/144137437447079 -12)
6655dfecf96Smrg(div-test 8081 1138147903718848755797/4324123123412370
6665dfecf96Smrg	#'floor 2147483648 1148972348912638496123/4324123123412370)
6675dfecf96Smrg(div-test -8082 -1804074198964956721/720687187235395
6685dfecf96Smrg	#'floor 2147483648 -1148972348912638496123/4324123123412370)
6695dfecf96Smrg(div-test -8082 1804074198964956721/720687187235395
6705dfecf96Smrg	#'floor -2147483648 1148972348912638496123/4324123123412370)
6715dfecf96Smrg(div-test 8081 -1138147903718848755797/4324123123412370
6725dfecf96Smrg	#'floor -2147483648 -1148972348912638496123/4324123123412370)
6735dfecf96Smrg(div-test 0 1148972348912638496123/4324123123412370111
6745dfecf96Smrg	#'floor 1148972348912638496123/4324123123412370111 2147483648)
6755dfecf96Smrg(div-test -1 -9285982550494401861657948805/4324123123412370111
6765dfecf96Smrg	#'floor 1148972348912638496123/4324123123412370111 -2147483648)
6775dfecf96Smrg(div-test -1 9285982550494401861657948805/4324123123412370111
6785dfecf96Smrg	#'floor -1148972348912638496123/4324123123412370111 2147483648)
6795dfecf96Smrg(div-test 0 -1148972348912638496123/4324123123412370111
6805dfecf96Smrg	#'floor -1148972348912638496123/4324123123412370111 -2147483648)
6815dfecf96Smrg(div-test 0.0d0 1.0000000004656613d0 #'ffloor 2147483648/2147483647 2147483648d0)
6825dfecf96Smrg(div-test -1.0d0 -2.147483647d9 #'ffloor 2147483648/2147483647 -2147483648d0)
6835dfecf96Smrg(div-test -1.0d0 2.147483647d9 #'ffloor -2147483648/2147483647 2147483648d0)
6845dfecf96Smrg(div-test 0.0d0 -1.0000000004656613d0 #'ffloor -2147483648/2147483647 -2147483648d0)
6855dfecf96Smrg
6865dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6875dfecf96Smrg;; ceiling
6885dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6895dfecf96Smrg(div-test 2 -1/2 #'ceiling 3/2)
6905dfecf96Smrg(div-test 2d0 -1 #'fceiling 3 2)
6915dfecf96Smrg(div-test -1 -1 #'ceiling -2147483648 2147483647)
6925dfecf96Smrg(div-test 2147483648 0 #'ceiling -2147483648 -1)
6935dfecf96Smrg(div-test 17179869184 0 #'ceiling 18446744073709551616 1073741824)
6945dfecf96Smrg(div-test -17179869200 16 #'ceiling 18446744073709551616 -1073741823)
6955dfecf96Smrg(div-test 2147483648 0d0 #'ceiling -2147483648 -1d0)
6965dfecf96Smrg(div-test -1 -1/2147483647 #'ceiling -2147483648/2147483647)
6975dfecf96Smrg(div-test 32769 -32767/2147483647 #'ceiling 2147483648/2147483647 65535/2147483647)
6985dfecf96Smrg(div-test -32768 32768/2147483647 #'ceiling 2147483648/2147483647 -65535/2147483647)
6995dfecf96Smrg(div-test -32768 -32768/2147483647 #'ceiling -2147483648/2147483647 65535/2147483647)
7005dfecf96Smrg(div-test 32769 32767/2147483647 #'ceiling -2147483648/2147483647 -65535/2147483647)
7015dfecf96Smrg(div-test 3 -0.75d0 #'ceiling 3d0 1.25d0)
7025dfecf96Smrg(div-test 3 -0.5d0 #'ceiling 4d0 1.5d0)
7035dfecf96Smrg(div-test -2 1d0 #'ceiling 4d0 -1.5d0)
7045dfecf96Smrg(div-test -2 -1d0 #'ceiling -4d0 1.5d0)
7055dfecf96Smrg(div-test 3 0.5d0 #'ceiling -4d0 -1.5d0)
7065dfecf96Smrg(div-test 2 -61/91 #'ceiling 5/7 9/13)
7075dfecf96Smrg(div-test -1 2/91 #'ceiling 5/7 -9/13)
7085dfecf96Smrg(div-test -1 -2/91 #'ceiling -5/7 9/13)
7095dfecf96Smrg(div-test 2 61/91 #'ceiling -5/7 -9/13)
7105dfecf96Smrg(div-test 1 0 #'ceiling 2147483648/2147483647 2147483648/2147483647)
7115dfecf96Smrg(div-test -1 0 #'ceiling 2147483648/2147483647 -2147483648/2147483647)
7125dfecf96Smrg(div-test -1 0 #'ceiling -2147483648/2147483647 2147483648/2147483647)
7135dfecf96Smrg(div-test 1 0 #'ceiling -2147483648/2147483647 -2147483648/2147483647)
7145dfecf96Smrg(div-test 9438 -313311293547183/144137437447079
7155dfecf96Smrg	#'ceiling 16324116304212832041/144137437447079 12)
7165dfecf96Smrg(div-test -9437 1416337955817765/144137437447079
7175dfecf96Smrg	#'ceiling 16324116304212832041/144137437447079 -12)
7185dfecf96Smrg(div-test -9437 -1416337955817765/144137437447079
7195dfecf96Smrg	#'ceiling -16324116304212832041/144137437447079 12)
7205dfecf96Smrg(div-test 9438 313311293547183/144137437447079
7215dfecf96Smrg	#'ceiling -16324116304212832041/144137437447079 -12)
7225dfecf96Smrg(div-test 8082 -1804074198964956721/720687187235395
7235dfecf96Smrg	#'ceiling 2147483648 1148972348912638496123/4324123123412370)
7245dfecf96Smrg(div-test -8081 1138147903718848755797/4324123123412370
7255dfecf96Smrg	#'ceiling 2147483648 -1148972348912638496123/4324123123412370)
7265dfecf96Smrg(div-test -8081 -1138147903718848755797/4324123123412370
7275dfecf96Smrg	#'ceiling -2147483648 1148972348912638496123/4324123123412370)
7285dfecf96Smrg(div-test 8082 1804074198964956721/720687187235395
7295dfecf96Smrg	#'ceiling -2147483648 -1148972348912638496123/4324123123412370)
7305dfecf96Smrg(div-test 1 -9285982550494401861657948805/4324123123412370111
7315dfecf96Smrg	#'ceiling 1148972348912638496123/4324123123412370111 2147483648)
7325dfecf96Smrg(div-test 0 1148972348912638496123/4324123123412370111
7335dfecf96Smrg	#'ceiling 1148972348912638496123/4324123123412370111 -2147483648)
7345dfecf96Smrg(div-test 0 -1148972348912638496123/4324123123412370111
7355dfecf96Smrg	#'ceiling -1148972348912638496123/4324123123412370111 2147483648)
7365dfecf96Smrg(div-test 1 9285982550494401861657948805/4324123123412370111
7375dfecf96Smrg	#'ceiling -1148972348912638496123/4324123123412370111 -2147483648)
7385dfecf96Smrg(div-test 1.0d0 -2.147483647d9 #'fceiling 2147483648/2147483647 2147483648d0)
7395dfecf96Smrg(div-test 0d0 1.0000000004656613d0 #'fceiling 2147483648/2147483647 -2147483648d0)
7405dfecf96Smrg(div-test 0d0 -1.0000000004656613d0 #'fceiling -2147483648/2147483647 2147483648d0)
7415dfecf96Smrg(div-test 1d0 2.147483647d9 #'fceiling -2147483648/2147483647 -2147483648d0)
7425dfecf96Smrg
7435dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7445dfecf96Smrg;; truncate
7455dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7465dfecf96Smrg(div-test 1 1/2 #'truncate 3/2)
7475dfecf96Smrg(div-test 1d0 1 #'ftruncate 3 2)
7485dfecf96Smrg(div-test -1 -1 #'truncate -2147483648 2147483647)
7495dfecf96Smrg(div-test 2147483648 0 #'truncate -2147483648 -1)
7505dfecf96Smrg(div-test 17179869184 0 #'truncate 18446744073709551616 1073741824)
7515dfecf96Smrg(div-test -17179869200 16 #'truncate 18446744073709551616 -1073741823)
7525dfecf96Smrg(div-test 2147483648 0d0 #'truncate -2147483648 -1d0)
7535dfecf96Smrg(div-test -1 -1/2147483647 #'truncate -2147483648/2147483647)
7545dfecf96Smrg(div-test 32768 32768/2147483647 #'truncate 2147483648/2147483647 65535/2147483647)
7555dfecf96Smrg(div-test -32768 32768/2147483647 #'truncate 2147483648/2147483647 -65535/2147483647)
7565dfecf96Smrg(div-test -32768 -32768/2147483647 #'truncate -2147483648/2147483647 65535/2147483647)
7575dfecf96Smrg(div-test 32768 -32768/2147483647 #'truncate -2147483648/2147483647 -65535/2147483647)
7585dfecf96Smrg(div-test 2 0.5d0 #'truncate 3d0 1.25d0)
7595dfecf96Smrg(div-test 2 1d0 #'truncate 4d0 1.5d0)
7605dfecf96Smrg(div-test -2 1d0 #'truncate 4d0 -1.5d0)
7615dfecf96Smrg(div-test -2 -1d0 #'truncate -4d0 1.5d0)
7625dfecf96Smrg(div-test 2 -1d0 #'truncate -4d0 -1.5d0)
7635dfecf96Smrg(div-test 1 2/91 #'truncate 5/7 9/13)
7645dfecf96Smrg(div-test -1 2/91 #'truncate 5/7 -9/13)
7655dfecf96Smrg(div-test -1 -2/91 #'truncate -5/7 9/13)
7665dfecf96Smrg(div-test 1 -2/91 #'truncate -5/7 -9/13)
7675dfecf96Smrg(div-test 1 0 #'truncate 2147483648/2147483647 2147483648/2147483647)
7685dfecf96Smrg(div-test -1 0 #'truncate 2147483648/2147483647 -2147483648/2147483647)
7695dfecf96Smrg(div-test -1 0 #'truncate -2147483648/2147483647 2147483648/2147483647)
7705dfecf96Smrg(div-test 1 0 #'truncate -2147483648/2147483647 -2147483648/2147483647)
7715dfecf96Smrg(div-test 9437 1416337955817765/144137437447079
7725dfecf96Smrg	#'truncate 16324116304212832041/144137437447079 12)
7735dfecf96Smrg(div-test -9437 1416337955817765/144137437447079
7745dfecf96Smrg	#'truncate 16324116304212832041/144137437447079 -12)
7755dfecf96Smrg(div-test -9437 -1416337955817765/144137437447079
7765dfecf96Smrg	#'truncate -16324116304212832041/144137437447079 12)
7775dfecf96Smrg(div-test 9437 -1416337955817765/144137437447079
7785dfecf96Smrg	#'truncate -16324116304212832041/144137437447079 -12)
7795dfecf96Smrg(div-test 8081 1138147903718848755797/4324123123412370
7805dfecf96Smrg	#'truncate 2147483648 1148972348912638496123/4324123123412370)
7815dfecf96Smrg(div-test -8081 1138147903718848755797/4324123123412370
7825dfecf96Smrg	#'truncate 2147483648 -1148972348912638496123/4324123123412370)
7835dfecf96Smrg(div-test -8081 -1138147903718848755797/4324123123412370
7845dfecf96Smrg	#'truncate -2147483648 1148972348912638496123/4324123123412370)
7855dfecf96Smrg(div-test 8081 -1138147903718848755797/4324123123412370
7865dfecf96Smrg	#'truncate -2147483648 -1148972348912638496123/4324123123412370)
7875dfecf96Smrg(div-test 0 1148972348912638496123/4324123123412370111
7885dfecf96Smrg	#'truncate 1148972348912638496123/4324123123412370111 2147483648)
7895dfecf96Smrg(div-test 0 1148972348912638496123/4324123123412370111
7905dfecf96Smrg	#'truncate 1148972348912638496123/4324123123412370111 -2147483648)
7915dfecf96Smrg(div-test 0 -1148972348912638496123/4324123123412370111
7925dfecf96Smrg	#'truncate -1148972348912638496123/4324123123412370111 2147483648)
7935dfecf96Smrg(div-test 0 -1148972348912638496123/4324123123412370111
7945dfecf96Smrg	#'truncate -1148972348912638496123/4324123123412370111 -2147483648)
7955dfecf96Smrg(div-test 0d0 1.0000000004656613d0 #'ftruncate 2147483648/2147483647 2147483648d0)
7965dfecf96Smrg(div-test 0d0 1.0000000004656613d0 #'ftruncate 2147483648/2147483647 -2147483648d0)
7975dfecf96Smrg(div-test 0d0 -1.0000000004656613d0 #'ftruncate -2147483648/2147483647 2147483648d0)
7985dfecf96Smrg(div-test 0d0 -1.0000000004656613d0 #'ftruncate -2147483648/2147483647 -2147483648d0)
7995dfecf96Smrg
8005dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8015dfecf96Smrg;; round
8025dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8035dfecf96Smrg(div-test 2 -1/2 #'round 3/2)
8045dfecf96Smrg(div-test 2d0 -1 #'fround 3 2)
8055dfecf96Smrg(div-test -1 -1 #'round -2147483648 2147483647)
8065dfecf96Smrg(div-test 2147483648 0 #'round -2147483648 -1)
8075dfecf96Smrg(div-test 17179869184 0 #'round 18446744073709551616 1073741824)
8085dfecf96Smrg(div-test -17179869200 16 #'round 18446744073709551616 -1073741823)
8095dfecf96Smrg(div-test 2147483648 0d0 #'round -2147483648 -1d0)
8105dfecf96Smrg(div-test -1 -1/2147483647 #'round -2147483648/2147483647)
8115dfecf96Smrg(div-test 32769 -32767/2147483647 #'round 2147483648/2147483647 65535/2147483647)
8125dfecf96Smrg(div-test -32769 -32767/2147483647 #'round 2147483648/2147483647 -65535/2147483647)
8135dfecf96Smrg(div-test -32769 32767/2147483647 #'round -2147483648/2147483647 65535/2147483647)
8145dfecf96Smrg(div-test 32769 32767/2147483647 #'round -2147483648/2147483647 -65535/2147483647)
8155dfecf96Smrg(div-test 2 0.5d0 #'round 3d0 1.25d0)
8165dfecf96Smrg(div-test 3 -0.5d0 #'round 4d0 1.5d0)
8175dfecf96Smrg(div-test -3 -0.5d0 #'round 4d0 -1.5d0)
8185dfecf96Smrg(div-test -3 0.5d0 #'round -4d0 1.5d0)
8195dfecf96Smrg(div-test 3 0.5d0 #'round -4d0 -1.5d0)
8205dfecf96Smrg(div-test 1 2/91 #'round 5/7 9/13)
8215dfecf96Smrg(div-test -1 2/91 #'round 5/7 -9/13)
8225dfecf96Smrg(div-test -1 -2/91 #'round -5/7 9/13)
8235dfecf96Smrg(div-test 1 -2/91 #'round -5/7 -9/13)
8245dfecf96Smrg(div-test 1 0 #'round 2147483648/2147483647 2147483648/2147483647)
8255dfecf96Smrg(div-test -1 0 #'round 2147483648/2147483647 -2147483648/2147483647)
8265dfecf96Smrg(div-test -1 0 #'round -2147483648/2147483647 2147483648/2147483647)
8275dfecf96Smrg(div-test 1 0 #'round -2147483648/2147483647 -2147483648/2147483647)
8285dfecf96Smrg(div-test 9438 -313311293547183/144137437447079
8295dfecf96Smrg	#'round 16324116304212832041/144137437447079 12)
8305dfecf96Smrg(div-test -9438 -313311293547183/144137437447079
8315dfecf96Smrg	#'round 16324116304212832041/144137437447079 -12)
8325dfecf96Smrg(div-test -9438 313311293547183/144137437447079
8335dfecf96Smrg	#'round -16324116304212832041/144137437447079 12)
8345dfecf96Smrg(div-test 9438 313311293547183/144137437447079
8355dfecf96Smrg	#'round -16324116304212832041/144137437447079 -12)
8365dfecf96Smrg(div-test 8082 -1804074198964956721/720687187235395
8375dfecf96Smrg	#'round 2147483648 1148972348912638496123/4324123123412370)
8385dfecf96Smrg(div-test -8082 -1804074198964956721/720687187235395
8395dfecf96Smrg	#'round 2147483648 -1148972348912638496123/4324123123412370)
8405dfecf96Smrg(div-test -8082 1804074198964956721/720687187235395
8415dfecf96Smrg	#'round -2147483648 1148972348912638496123/4324123123412370)
8425dfecf96Smrg(div-test 8082 1804074198964956721/720687187235395
8435dfecf96Smrg	#'round -2147483648 -1148972348912638496123/4324123123412370)
8445dfecf96Smrg(div-test 0 1148972348912638496123/4324123123412370111
8455dfecf96Smrg	#'round 1148972348912638496123/4324123123412370111 2147483648)
8465dfecf96Smrg(div-test 0 1148972348912638496123/4324123123412370111
8475dfecf96Smrg	#'round 1148972348912638496123/4324123123412370111 -2147483648)
8485dfecf96Smrg(div-test 0 -1148972348912638496123/4324123123412370111
8495dfecf96Smrg	#'round -1148972348912638496123/4324123123412370111 2147483648)
8505dfecf96Smrg(div-test 0 -1148972348912638496123/4324123123412370111
8515dfecf96Smrg	#'round -1148972348912638496123/4324123123412370111 -2147483648)
8525dfecf96Smrg(div-test 0d0 1.0000000004656613d0 #'fround 2147483648/2147483647 2147483648d0)
8535dfecf96Smrg(div-test 0d0 1.0000000004656613d0 #'fround 2147483648/2147483647 -2147483648d0)
8545dfecf96Smrg(div-test 0d0 -1.0000000004656613d0 #'fround -2147483648/2147483647 2147483648d0)
8555dfecf96Smrg(div-test 0d0 -1.0000000004656613d0 #'fround -2147483648/2147483647 -2147483648d0)
8565dfecf96Smrg(div-test 2 0.5d0 #'round 2.5d0)
8575dfecf96Smrg(div-test -2 -0.5d0 #'round -2.5d0)
8585dfecf96Smrg(div-test 5 0d0 #'round 2.5d0 0.5d0)
8595dfecf96Smrg(div-test -5 0d0 #'round 2.5d0 -0.5d0)
8605dfecf96Smrg(div-test -5 0d0 #'round 2.5d0 -0.5d0)
8615dfecf96Smrg(div-test -5 0d0 #'round -2.5d0 0.5d0)
8625dfecf96Smrg(div-test 5 0d0 #'round -2.5d0 -0.5d0)
8635dfecf96Smrg(div-test 1 -2/7 #'round 5/7)
8645dfecf96Smrg(div-test -1 2/7 #'round -5/7)
8655dfecf96Smrg(div-test 2 -1/2 #'round 3/2)
8665dfecf96Smrg(div-test -2 1/2 #'round -3/2)
8675dfecf96Smrg(div-test 2 1 #'round 30/2 7)
8685dfecf96Smrg(div-test -2 1 #'round 30/2 -7)
8695dfecf96Smrg(div-test -2 -1 #'round -30/2 7)
8705dfecf96Smrg(div-test 2 -1 #'round -30/2 -7)
8715dfecf96Smrg(div-test 1073741824 -1/2 #'round 2147483647/2)
8725dfecf96Smrg(div-test -1073741824 1/2 #'round -2147483647/2)
8735dfecf96Smrg(div-test 1 -2147483645/2 #'round 2147483647/2 2147483646)
8745dfecf96Smrg(div-test -1 -2147483645/2 #'round 2147483647/2 -2147483646)
8755dfecf96Smrg(div-test -1 2147483645/2 #'round -2147483647/2 2147483646)
8765dfecf96Smrg(div-test 1 -2147483645/2 #'round 2147483647/2 2147483646)
8775dfecf96Smrg
8785dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8795dfecf96Smrg;; misc
8805dfecf96Smrg;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8815dfecf96Smrg(test #c(5 -5) #'conjugate #c(5 5))
8825dfecf96Smrg(test #c(5 5) #'conjugate #c(5 -5))
8835dfecf96Smrg(test #c(-5 -5) #'conjugate #c(-5 5))
8845dfecf96Smrg(test #c(-5 5) #'conjugate #c(-5 -5))
8855dfecf96Smrg
8865dfecf96Smrg(test 1 #'denominator 10)
8875dfecf96Smrg(test 3 #'denominator 10/3)
8885dfecf96Smrg(test 3 #'denominator 1804074198964956721/3)
8895dfecf96Smrg(test 4324123123412370111 #'denominator -1148972348912638496123/4324123123412370111)
8905dfecf96Smrg
8915dfecf96Smrg(bool-test nil #'evenp -1)
8925dfecf96Smrg(bool-test t #'evenp -2147483648)
8935dfecf96Smrg(bool-test t #'evenp -4294967296)
8945dfecf96Smrg(bool-test nil #'evenp -4294967295)
8955dfecf96Smrg
8965dfecf96Smrg(test 0.5d0 #'float 1/2)
8975dfecf96Smrg(test 10.0d0 #'float 10)
8985dfecf96Smrg(test 4.978341823462786d22 #'float 49783418234627861238926)
8995dfecf96Smrg(test 1.845867531346429d12 #'float 643827946123846123984/348794231)
9005dfecf96Smrg
9015dfecf96Smrg(bool-test t #'floatp 0.3d0)
9025dfecf96Smrg(bool-test nil #'floatp 1/3)
9035dfecf96Smrg
9045dfecf96Smrg(test 0 #'imagpart 1)
9055dfecf96Smrg(test -5 #'imagpart #c(1 -5))
9065dfecf96Smrg
9075dfecf96Smrg(bool-test t #'integerp 12)
9085dfecf96Smrg(bool-test nil #'integerp 1/2)
9095dfecf96Smrg(bool-test nil #'integerp :test)
9105dfecf96Smrg(bool-test nil #'integerp 0d0)
9115dfecf96Smrg(bool-test t #'integerp 49783418234627861238926)
9125dfecf96Smrg
9135dfecf96Smrg(test 3 #'isqrt 12)
9145dfecf96Smrg(test 46340 #'isqrt 2147483648)
9155dfecf96Smrg(test 46340 #'isqrt 2147483647)
9165dfecf96Smrg(test 25373764918 #'isqrt 643827946123846123984)
9175dfecf96Smrg
9185dfecf96Smrg(bool-test nil #'logtest 1 2)
9195dfecf96Smrg(bool-test t #'logtest 1 3)
9205dfecf96Smrg(bool-test t #'logtest 7 -1)
9215dfecf96Smrg
9225dfecf96Smrg(bool-test nil #'minusp 0)
9235dfecf96Smrg(bool-test nil #'minusp 2147483648)
9245dfecf96Smrg(bool-test t #'minusp -2147483648)
9255dfecf96Smrg(bool-test t #'minusp -1/4)
9265dfecf96Smrg(bool-test nil #'minusp 0.2d0)
9275dfecf96Smrg(bool-test nil #'minusp 0d0)
9285dfecf96Smrg(bool-test nil #'minusp 984723891462817946123897416)
9295dfecf96Smrg(bool-test t #'minusp -1148972348912638496123/4324123123412370111)
9305dfecf96Smrg
9315dfecf96Smrg(bool-test t #'numberp #c(1 2))
9325dfecf96Smrg(bool-test t #'numberp -200)
9335dfecf96Smrg(bool-test nil #'numberp :test)
9345dfecf96Smrg
9355dfecf96Smrg(test 10 #'numerator 10)
9365dfecf96Smrg(test 10 #'numerator 10/3)
9375dfecf96Smrg(test 1804074198964956721 #'numerator 1804074198964956721/3)
9385dfecf96Smrg(test -1148972348912638496123 #'numerator -1148972348912638496123/4324123123412370111)
9395dfecf96Smrg
9405dfecf96Smrg(bool-test t #'oddp -1)
9415dfecf96Smrg(bool-test nil #'oddp -2147483648)
9425dfecf96Smrg(bool-test nil #'oddp -4294967296)
9435dfecf96Smrg(bool-test t #'oddp -4294967295)
9445dfecf96Smrg
9455dfecf96Smrg(bool-test nil #'plusp 0)
9465dfecf96Smrg(bool-test t #'plusp 2147483648)
9475dfecf96Smrg(bool-test nil #'plusp -2147483648)
9485dfecf96Smrg(bool-test nil #'plusp -1/4)
9495dfecf96Smrg(bool-test t #'plusp 0.2d0)
9505dfecf96Smrg(bool-test nil #'plusp 0d0)
9515dfecf96Smrg(bool-test t #'plusp 984723891462817946123897416)
9525dfecf96Smrg(bool-test nil #'plusp -1148972348912638496123/4324123123412370111)
9535dfecf96Smrg
9545dfecf96Smrg(test 1/4 #'rational 0.25d0)
9555dfecf96Smrg(test 5/2 #'rational 2.5d0)
9565dfecf96Smrg(test 1/8 #'rational 0.125d0)
9575dfecf96Smrg(test -5/8 #'rational -0.625d0)
9585dfecf96Smrg(test 524293/8 #'rational 65536.625d0)
9595dfecf96Smrg(test 17179869181/8 #'rational 2147483647.625d0)
9605dfecf96Smrg
9615dfecf96Smrg(bool-test t #'rationalp -3)
9625dfecf96Smrg(bool-test t #'rationalp 1/2)
9635dfecf96Smrg(bool-test t #'rationalp 1/2412341242424122412)
9645dfecf96Smrg(bool-test nil #'rationalp :test)
9655dfecf96Smrg(bool-test nil #'rationalp 0d0)
9665dfecf96Smrg(bool-test t #'rationalp 49783418234627861238926)
9675dfecf96Smrg
9685dfecf96Smrg(test -1 #'realpart #c(-1 0.5d0))
9695dfecf96Smrg
9705dfecf96Smrg(test 1 #'signum 123/5)
9715dfecf96Smrg(test 0d0 #'signum 0d0)
9725dfecf96Smrg(test -1d0 #'signum -7.3d0)
9735dfecf96Smrg
9745dfecf96Smrg(bool-test nil #'zerop 1)
9755dfecf96Smrg(bool-test nil #'zerop 1/4312412341234123412)
9765dfecf96Smrg(bool-test nil #'zerop 0.000003d0)
9775dfecf96Smrg(bool-test t #'zerop 0)
9785dfecf96Smrg(bool-test t #'zerop 0d0)
9795dfecf96Smrg(bool-test t #'zerop #c(0 0d0))
9805dfecf96Smrg
9815dfecf96Smrg(bool-test t #'= 10 #c(10 0d0))
9825dfecf96Smrg
983