2
;;;; Author: Paul Dietz
3
;;;; Created: Mon Sep 1 20:16:42 2003
4
;;;; Contains: Tests of ABS
8
(compile-and-load "numbers-aux.lsp")
11
(signals-error (abs) program-error)
15
(signals-error (abs 0 0) program-error)
19
(signals-error (abs 0 nil nil) program-error)
23
(loop for x in *numbers*
25
always (and (realp a) (not (minusp a))))
29
(loop for x = (random-fixnum)
32
unless (if (plusp x) (eql x a) (eql (- x) a))
37
(let ((bound (ash 1 300)))
38
(loop for x = (random-from-interval bound)
41
unless (if (plusp x) (eql x a) (eql (- x) a))
46
(loop for num = (random-fixnum)
47
for den = (random-fixnum)
48
for den2 = (if (zerop den) 1 den)
52
unless (if (>= r 0) (eql r a) (eql (- r) a))
53
collect (list num den2 r a))
57
(let ((bound (ash 1 210)))
59
for num = (random-from-interval bound)
60
for den = (random-from-interval bound)
61
for den2 = (if (zerop den) 1 den)
65
unless (if (>= r 0) (eql r a) (eql (- r) a))
66
collect (list num den2 r a)))
70
(let ((bound (float (ash 1 11) 1.0s0)))
72
for x = (random-from-interval bound)
82
(let ((bound (float (ash 1 22) 1.0f0)))
84
for x = (random-from-interval bound)
94
(let ((bound (float (ash 1 48) 1.0d0)))
96
for x = (random-from-interval bound)
106
(let ((bound (float (ash 1 48) 1.0l0)))
108
for x = (random-from-interval bound)
111
unless (if (minusp x)
117
;;; The example on the abs page says that (abs -0.0) should be -0,0.
118
;;; However, FABS on the x86 returns 0.0 for that. Since the examples
119
;;; in the hyperspec are not normative, the following four tests
120
;;; have been commented out.
141
(let ((result (abs #c(3 4))))
146
(let ((result (abs #c(-3 4))))
151
(let ((result (abs #c(3 -4))))
156
(let ((result (abs #c(-3 -4))))
161
(abs #c(3.0s0 4.0s0))
165
(abs #c(3.0f0 -4.0f0))
169
(abs #c(-3.0d0 4.0d0))
173
(abs #c(-3.0l0 4.0l0))