1.0.3.39: larger heap size for x86-64/darwin
[sbcl.git] / tests / float.impure.lisp
index 36fdd6f..04609a4 100644 (file)
@@ -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))
   (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))