X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Ffloat.impure.lisp;h=04609a48cc23f429e17818fd3e902874f46fa90c;hb=78c2361d1d9e680230df412f4d1489725781c6d2;hp=36fdd6f59889a4a759520703006ed3a798b35d1f;hpb=39e38e4c91fdfc368c60220a1b38ffefb86ff403;p=sbcl.git diff --git a/tests/float.impure.lisp b/tests/float.impure.lisp index 36fdd6f..04609a4 100644 --- a/tests/float.impure.lisp +++ b/tests/float.impure.lisp @@ -7,7 +7,7 @@ ;;;; While most of SBCL is derived from the CMU CL system, the test ;;;; files (like this one) were written from scratch after the fork ;;;; from CMU CL. -;;;; +;;;; ;;;; This software is in the public domain and is provided with ;;;; absolutely no warranty. See the COPYING and CREDITS files for ;;;; more information. @@ -24,7 +24,7 @@ ;;; e.g. someone inadvertently ports the bad code. (defun point39 (x y) (make-array 2 - :element-type 'double-float + :element-type 'double-float :initial-contents (list x y))) (declaim (inline point39-x point39-y)) @@ -35,24 +35,87 @@ (declare (type (simple-array double-float (2)) p)) (aref p 1)) (defun order39 (points) - (sort points #'(lambda (p1 p2) - (let* ((y1 (point39-y p1)) - (y2 (point39-y p2))) - (if (= y1 y2) - (< (point39-x p1) - (point39-x p2)) - (< y1 y2)))))) + (sort points (lambda (p1 p2) + (let* ((y1 (point39-y p1)) + (y2 (point39-y p2))) + (if (= y1 y2) + (< (point39-x p1) + (point39-x p2)) + (< y1 y2)))))) (defun test39 () (order39 (make-array 4 - :initial-contents (list (point39 0.0d0 0.0d0) - (point39 1.0d0 1.0d0) - (point39 2.0d0 2.0d0) - (point39 3.0d0 3.0d0))))) + :initial-contents (list (point39 0.0d0 0.0d0) + (point39 1.0d0 1.0d0) + (point39 2.0d0 2.0d0) + (point39 3.0d0 3.0d0))))) (assert (equalp (test39) - #(#(0.0d0 0.0d0) - #(1.0d0 1.0d0) - #(2.0d0 2.0d0) - #(3.0d0 3.0d0)))) + #(#(0.0d0 0.0d0) + #(1.0d0 1.0d0) + #(2.0d0 2.0d0) + #(3.0d0 3.0d0)))) + +(defun complex-double-float-ppc (x y) + (declare (type (complex double-float) x y)) + (declare (optimize speed)) + (+ x y)) +(compile 'complex-double-float-ppc) +(assert (= (complex-double-float-ppc #c(0.0d0 1.0d0) #c(2.0d0 3.0d0)) + #c(2.0d0 4.0d0))) + +(defun single-float-ppc (x) + (declare (type (signed-byte 32) x) (optimize speed)) + (float x 1f0)) +(compile 'single-float-ppc) +(assert (= (single-float-ppc -30) -30f0)) + +;;; constant-folding irrational functions +(declaim (inline df)) +(defun df (x) + ;; do not remove the ECASE here: the bug this checks for indeed + ;; depended on this configuration + (ecase x (1 least-positive-double-float))) +(macrolet ((test (fun) + (let ((name (intern (format nil "TEST-CONSTANT-~A" fun)))) + `(progn + (defun ,name () (,fun (df 1))) + (,name))))) + (test sqrt) + (test log) + (test sin) + (test cos) + (test tan) + (test asin) + (test acos) + (test atan) + (test sinh) + (test cosh) + (test tanh) + (test asinh) + (test acosh) + (test atanh) + (test exp)) + +;;; Broken move-arg-double-float for non-rsp frame pointers on x86-64 +(defun test (y) + (declare (optimize speed)) + (multiple-value-bind (x) + (labels ((aux (x) + (declare (double-float x)) + (etypecase y + (double-float + nil) + (fixnum + (aux x)) + (complex + (format t "y=~s~%" y))) + (values x))) + (aux 2.0d0)) + x)) + +(assert (= (test 1.0d0) 2.0d0)) -;;; success -(quit :unix-status 104) +(deftype myarraytype (&optional (length '*)) + `(simple-array double-float (,length))) +(defun new-pu-label-from-pu-labels (array) + (setf (aref (the myarraytype array) 0) + sb-ext:double-float-positive-infinity))