1 ;;;; This file is for floating-point-related tests which have side
2 ;;;; effects (e.g. executing DEFUN).
4 ;;;; This software is part of the SBCL system. See the README file for
7 ;;;; While most of SBCL is derived from the CMU CL system, the test
8 ;;;; files (like this one) were written from scratch after the fork
11 ;;;; This software is in the public domain and is provided with
12 ;;;; absolutely no warranty. See the COPYING and CREDITS files for
13 ;;;; more information.
15 (cl:in-package
:cl-user
)
17 ;;; Hannu Rummukainen reported a CMU CL bug on cmucl-imp@cons.org 26
18 ;;; Jun 2000. This is the test case for it.
20 ;;; The bug was listed as "39: .. Probably the same bug exists in
21 ;;; SBCL" for a while until Martin Atzmueller showed that it's not
22 ;;; present after all, presumably because the bug was introduced into
23 ;;; CMU CL after the fork. But we'll test for it anyway, in case
24 ;;; e.g. someone inadvertently ports the bad code.
27 :element-type
'double-float
28 :initial-contents
(list x y
)))
30 (declaim (inline point39-x point39-y
))
32 (declare (type (simple-array double-float
(2)) p
))
35 (declare (type (simple-array double-float
(2)) p
))
37 (defun order39 (points)
38 (sort points
(lambda (p1 p2
)
39 (let* ((y1 (point39-y p1
))
46 (order39 (make-array 4
47 :initial-contents
(list (point39 0.0d0
0.0d0
)
50 (point39 3.0d0
3.0d0
)))))
51 (assert (equalp (test39)
57 (defun complex-double-float-ppc (x y
)
58 (declare (type (complex double-float
) x y
))
59 (declare (optimize speed
))
61 (compile 'complex-double-float-ppc
)
62 (assert (= (complex-double-float-ppc #c
(0.0d0
1.0d0
) #c
(2.0d0
3.0d0
))
65 (defun single-float-ppc (x)
66 (declare (type (signed-byte 32) x
) (optimize speed
))
68 (compile 'single-float-ppc
)
69 (assert (= (single-float-ppc -
30) -
30f0
))
71 ;;; constant-folding irrational functions
74 ;; do not remove the ECASE here: the bug this checks for indeed
75 ;; depended on this configuration
76 (ecase x
(1 least-positive-double-float
)))
77 (macrolet ((test (fun)
78 (let ((name (intern (format nil
"TEST-CONSTANT-~A" fun
))))
80 (defun ,name
() (,fun
(df 1)))
98 ;;; Broken move-arg-double-float for non-rsp frame pointers on x86-64
100 (declare (optimize speed
))
101 (multiple-value-bind (x)
103 (declare (double-float x
))
110 (format t
"y=~s~%" y
)))
115 (assert (= (test 1.0d0
) 2.0d0
))
117 (deftype myarraytype
(&optional
(length '*))
118 `(simple-array double-float
(,length
)))
119 (defun new-pu-label-from-pu-labels (array)
120 (setf (aref (the myarraytype array
) 0)
121 sb-ext
:double-float-positive-infinity
))
125 ;;; FIXME: it may be that TYPE-ERROR is wrong, and we should
126 ;;; instead signal an overflow or coerce into an infinity.
128 (loop for n from
(expt 2 1024) upto
(+ 10 (expt 2 1024))
130 (coerce n
'single-float
)
131 (simple-type-error ()
132 (return-from bug-407a
:type-error
)))))
133 (assert (eq :type-error
(bug-407a)))
135 (loop for n from
(expt 2 1024) upto
(+ 10 (expt 2 1024))
137 (format t
"~E~%" (coerce n
'single-float
))
138 (simple-type-error ()
139 (return-from bug-407b
:type-error
)))))
140 (assert (eq :type-error
(bug-407b)))