;-*- Mode:     Lisp -*-
  Author :     
  Created :   Sun Aug   3 15:55:17 2003
  Contains : Tests of MAX





;;; Error tests

(deftest max.error.1
  (signals-error (max) program-error)
  t)

(deftest max.error.2
  (check-type-error #'max #'realp)
  nil)

(deftest max.error.3
  (check-type-error #'(lambda (x) (max 0 x)) #'realp)
  nil)

;;; Non-error tests

(deftest max.1
  (loop for n in *reals*
        when (or (not (eql (max n) n))
                 (not (eql (max n n) n))
                 (not (eql (max n n n) n))
                 (not (eql (apply #'max (make-list
                                         (min 256 (1- call-arguments-limit))
                                         :initial-element n))
                           n)))
        collect n)
  nil)

(deftest max.2
  (max.2-fn)
  nil)

(deftest max.3
  (loop for x = (- (random 60000) 30000)
        for y = (- (random 60000) 30000)
        for m = (max x y)
        for m2 = (if (>= x y) x y)
        repeat 1000
        unless (eql m m2)
        collect (list x y m m2))
  nil)

(deftest max.4
  (loop for x = (- (random 6000000) 3000000)
        for y = (- (random 6000000) 3000000)
        for m = (max x y)
        for m2 = (if (>= x y) x y)
        repeat 1000
        unless (eql m m2)
        collect (list x y m m2))
  nil)

(deftest max.5
  (loop for x = (- (random 1000000000000) 500000000000)
        for y = (- (random 1000000000000) 500000000000)
        for m = (max x y)
        for m2 = (if (>= x y) x y)
        repeat 1000
        unless (eql m m2)
        collect (list x y m m2))
  nil)

(deftest max.6
  (let ((m (max 2 1.0s0)))
    (or (eqlt m 2)
        (eqlt m 2.0s0)))
  t)

(deftest max.7
  (max 0 1.0s0)
  1.0s0)

(deftest max.8
  (let ((m (max 2 1.0f0)))
    (or (eqlt m 2)
        (eqlt m 2.0f0)))
  t)

(deftest max.9
  (max 0 1.0f0)
  1.0f0)

(deftest max.10
  (let ((m (max 2 1.0d0)))
    (or (eqlt m 2)
        (eqlt m 2.0d0)))
  t)

(deftest max.11
  (max 0 1.0d0)
  1.0d0)

(deftest max.12
  (let ((m (max 2 1.0l0)))
    (or (eqlt m 2)
        (eqlt m 2.0l0)))
  t)

(deftest max.13
  (max 0 1.0l0)
  1.0l0)

(deftest max.15
  (let ((m (max 1.0s0 0.0f0)))
    (or (eqlt m 1.0s0)
        (eqlt m 1.0f0)))
  t)

(deftest max.16
  (max 0.0s0 1.0f0)
  1.0f0)

(deftest max.17
  (let ((m (max 1.0s0 0.0d0)))
    (or (eqlt m 1.0s0)
        (eqlt m 1.0d0)))
  t)

(deftest max.18
  (max 0.0s0 1.0d0)
  1.0d0)

(deftest max.19
  (let ((m (max 1.0s0 0.0l0)))
    (or (eqlt m 1.0s0)
        (eqlt m 1.0l0)))
  t)

(deftest max.20
  (max 0.0s0 1.0l0)
  1.0l0)

(deftest max.21
  (let ((m (max 1.0f0 0.0d0)))
    (or (eqlt m 1.0f0)
        (eqlt m 1.0d0)))
  t)

(deftest max.22
  (max 0.0f0 1.0d0)
  1.0d0)

(deftest max.23
  (let ((m (max 1.0f0 0.0l0)))
    (or (eqlt m 1.0f0)
        (eqlt m 1.0l0)))
  t)

(deftest max.24
  (max 0.0f0 1.0l0)
  1.0l0)

(deftest max.25
  (let ((m (max 1.0d0 0.0l0)))
    (or (eqlt m 1.0d0)
        (eqlt m 1.0l0)))
  t)

(deftest max.26
  (max 0.0d0 1.0l0)
  1.0l0)

(deftest max.27
  (loop for i from 1 to (min 256 (1- call-arguments-limit))
        for x = (make-list i :initial-element 0)
        do (setf (elt x (random i)) 1)
        unless (eql (apply #'max x) 1)
        collect x)
  nil)

(deftest max.28
  (let ((m (max 1/3 0.2s0)))
    (or (eqlt m 1/3)
        (eqlt m (float 1/3 0.2s0))))
  t)

(deftest max.29
  (let ((m (max 1.0s0 3 2.0f0)))
    (or (eqlt m 3)
        (eqlt m 3.0f0)))
  t)

(deftest max.30
  (let ((m (max 1.0d0 3 2.0f0)))
    (or (eqlt m 3)
        (eqlt m 3.0d0)))
  t)

(deftest max.31
  (let ((m (max 1.0s0 3 2.0l0)))
    (or (eqlt m 3)
        (eqlt m 3.0l0)))
  t)

(deftest max.32
  (let ((m (max 1.0l0 3 2.0s0)))
    (or (eqlt m 3)
        (eqlt m 3.0l0)))
  t)

(deftest max.33
  (let ((m (max 1.0d0 3 2.0l0)))
    (or (eqlt m 3)
        (eqlt m 3.0l0)))
  t)

(deftest max.34
  (let ((m (max 1.0l0 3 2.0d0)))
    (or (eqlt m 3)
        (eqlt m 3.0l0)))
  t)

(deftest max.order.1
  (let ((i 0) x y)
    (values
     (max (progn (setf x (incf i)) 10)
          (progn (setf y (incf i)) 20))
     i x y))
  20 2 1 2)

(deftest max.order.2
  (let ((i 0) x y z)
    (values
     (max (progn (setf x (incf i)) 10)
          (progn (setf y (incf i)) 20)
          (progn (setf z (incf i)) 30))
     i x y z))
  30 3 1 2 3)

(deftest max.order.3
  (let ((i 0) u v w x y z)
    (values
     (max (progn (setf u (incf i)) 10)
          (progn (setf v (incf i)) 20)
          (progn (setf w (incf i)) 30)
          (progn (setf x (incf i)) 10)
          (progn (setf y (incf i)) 20)
          (progn (setf z (incf i)) 30))
     i u v w x y z))
  30 6 1 2 3 4 5 6)

-*- Mode:     Lisp -*-
 Error tests
 Non-error tests
  Author :     
  Created :   Sun Aug   3 15:55:17 2003
  Contains : Tests of MAX






(deftest max.error.1
  (signals-error (max) program-error)
  t)

(deftest max.error.2
  (check-type-error #'max #'realp)
  nil)

(deftest max.error.3
  (check-type-error #'(lambda (x) (max 0 x)) #'realp)
  nil)


(deftest max.1
  (loop for n in *reals*
        when (or (not (eql (max n) n))
                 (not (eql (max n n) n))
                 (not (eql (max n n n) n))
                 (not (eql (apply #'max (make-list
                                         (min 256 (1- call-arguments-limit))
                                         :initial-element n))
                           n)))
        collect n)
  nil)

(deftest max.2
  (max.2-fn)
  nil)

(deftest max.3
  (loop for x = (- (random 60000) 30000)
        for y = (- (random 60000) 30000)
        for m = (max x y)
        for m2 = (if (>= x y) x y)
        repeat 1000
        unless (eql m m2)
        collect (list x y m m2))
  nil)

(deftest max.4
  (loop for x = (- (random 6000000) 3000000)
        for y = (- (random 6000000) 3000000)
        for m = (max x y)
        for m2 = (if (>= x y) x y)
        repeat 1000
        unless (eql m m2)
        collect (list x y m m2))
  nil)

(deftest max.5
  (loop for x = (- (random 1000000000000) 500000000000)
        for y = (- (random 1000000000000) 500000000000)
        for m = (max x y)
        for m2 = (if (>= x y) x y)
        repeat 1000
        unless (eql m m2)
        collect (list x y m m2))
  nil)

(deftest max.6
  (let ((m (max 2 1.0s0)))
    (or (eqlt m 2)
        (eqlt m 2.0s0)))
  t)

(deftest max.7
  (max 0 1.0s0)
  1.0s0)

(deftest max.8
  (let ((m (max 2 1.0f0)))
    (or (eqlt m 2)
        (eqlt m 2.0f0)))
  t)

(deftest max.9
  (max 0 1.0f0)
  1.0f0)

(deftest max.10
  (let ((m (max 2 1.0d0)))
    (or (eqlt m 2)
        (eqlt m 2.0d0)))
  t)

(deftest max.11
  (max 0 1.0d0)
  1.0d0)

(deftest max.12
  (let ((m (max 2 1.0l0)))
    (or (eqlt m 2)
        (eqlt m 2.0l0)))
  t)

(deftest max.13
  (max 0 1.0l0)
  1.0l0)

(deftest max.15
  (let ((m (max 1.0s0 0.0f0)))
    (or (eqlt m 1.0s0)
        (eqlt m 1.0f0)))
  t)

(deftest max.16
  (max 0.0s0 1.0f0)
  1.0f0)

(deftest max.17
  (let ((m (max 1.0s0 0.0d0)))
    (or (eqlt m 1.0s0)
        (eqlt m 1.0d0)))
  t)

(deftest max.18
  (max 0.0s0 1.0d0)
  1.0d0)

(deftest max.19
  (let ((m (max 1.0s0 0.0l0)))
    (or (eqlt m 1.0s0)
        (eqlt m 1.0l0)))
  t)

(deftest max.20
  (max 0.0s0 1.0l0)
  1.0l0)

(deftest max.21
  (let ((m (max 1.0f0 0.0d0)))
    (or (eqlt m 1.0f0)
        (eqlt m 1.0d0)))
  t)

(deftest max.22
  (max 0.0f0 1.0d0)
  1.0d0)

(deftest max.23
  (let ((m (max 1.0f0 0.0l0)))
    (or (eqlt m 1.0f0)
        (eqlt m 1.0l0)))
  t)

(deftest max.24
  (max 0.0f0 1.0l0)
  1.0l0)

(deftest max.25
  (let ((m (max 1.0d0 0.0l0)))
    (or (eqlt m 1.0d0)
        (eqlt m 1.0l0)))
  t)

(deftest max.26
  (max 0.0d0 1.0l0)
  1.0l0)

(deftest max.27
  (loop for i from 1 to (min 256 (1- call-arguments-limit))
        for x = (make-list i :initial-element 0)
        do (setf (elt x (random i)) 1)
        unless (eql (apply #'max x) 1)
        collect x)
  nil)

(deftest max.28
  (let ((m (max 1/3 0.2s0)))
    (or (eqlt m 1/3)
        (eqlt m (float 1/3 0.2s0))))
  t)

(deftest max.29
  (let ((m (max 1.0s0 3 2.0f0)))
    (or (eqlt m 3)
        (eqlt m 3.0f0)))
  t)

(deftest max.30
  (let ((m (max 1.0d0 3 2.0f0)))
    (or (eqlt m 3)
        (eqlt m 3.0d0)))
  t)

(deftest max.31
  (let ((m (max 1.0s0 3 2.0l0)))
    (or (eqlt m 3)
        (eqlt m 3.0l0)))
  t)

(deftest max.32
  (let ((m (max 1.0l0 3 2.0s0)))
    (or (eqlt m 3)
        (eqlt m 3.0l0)))
  t)

(deftest max.33
  (let ((m (max 1.0d0 3 2.0l0)))
    (or (eqlt m 3)
        (eqlt m 3.0l0)))
  t)

(deftest max.34
  (let ((m (max 1.0l0 3 2.0d0)))
    (or (eqlt m 3)
        (eqlt m 3.0l0)))
  t)

(deftest max.order.1
  (let ((i 0) x y)
    (values
     (max (progn (setf x (incf i)) 10)
          (progn (setf y (incf i)) 20))
     i x y))
  20 2 1 2)

(deftest max.order.2
  (let ((i 0) x y z)
    (values
     (max (progn (setf x (incf i)) 10)
          (progn (setf y (incf i)) 20)
          (progn (setf z (incf i)) 30))
     i x y z))
  30 3 1 2 3)

(deftest max.order.3
  (let ((i 0) u v w x y z)
    (values
     (max (progn (setf u (incf i)) 10)
          (progn (setf v (incf i)) 20)
          (progn (setf w (incf i)) 30)
          (progn (setf x (incf i)) 10)
          (progn (setf y (incf i)) 20)
          (progn (setf z (incf i)) 30))
     i u v w x y z))
  30 6 1 2 3 4 5 6)
