From a3fceffbc031c60f9158d37ab4411afc7a75a2dd Mon Sep 17 00:00:00 2001 From: pfdietz <pfdietz@localhost> Date: Thu, 12 Feb 2004 01:39:44 +0000 Subject: [PATCH] Added some hyperbolic trig function tests. --- ansi-tests/acosh.lsp | 99 ++++++++++++++++++++++++++++ ansi-tests/asinh.lsp | 96 +++++++++++++++++++++++++++ ansi-tests/atanh.lsp | 126 ++++++++++++++++++++++++++++++++++++ ansi-tests/cos.lsp | 3 + ansi-tests/load-numbers.lsp | 5 +- ansi-tests/numbers-aux.lsp | 2 + ansi-tests/sin.lsp | 3 + ansi-tests/tan.lsp | 3 + ansi-tests/tanh.lsp | 87 +++++++++++++++++++++++++ 9 files changed, 423 insertions(+), 1 deletion(-) create mode 100644 ansi-tests/acosh.lsp create mode 100644 ansi-tests/asinh.lsp create mode 100644 ansi-tests/atanh.lsp create mode 100644 ansi-tests/tanh.lsp diff --git a/ansi-tests/acosh.lsp b/ansi-tests/acosh.lsp new file mode 100644 index 00000000..4173b926 --- /dev/null +++ b/ansi-tests/acosh.lsp @@ -0,0 +1,99 @@ +;-*- Mode: Lisp -*- +;;;; Author: Paul Dietz +;;;; Created: Wed Feb 11 19:20:53 2004 +;;;; Contains: Tests of ACOSH + +(in-package :cl-test) + +(deftest acosh.1 + (let ((result (acosh 1))) + (or (eqlt result 0) + (eqlt result 0.0))) + t) + +(deftest acosh.2 + (loop for type in '(short-float single-float double-float long-float) + for zero = (coerce 0 type) + for one = (coerce 1 type) + unless (equal (multiple-value-list (acosh one)) + (list zero)) + collect type) + nil) + +(deftest acosh.3 + (loop for type in '(short-float single-float double-float long-float) + for zero = (coerce 0 `(complex ,type)) + for one = (coerce 1 `(complex ,type)) + unless (equal (multiple-value-list (acosh one)) + (list zero)) + collect type) + nil) + +(deftest acosh.4 + (loop for den = (1+ (random 10000)) + for num = (random (* 10 den)) + for x = (/ num den) + for rlist = (multiple-value-list (acosh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (numberp y)) + collect (list x rlist)) + nil) + +(deftest acosh.5 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x = (1+ (random (coerce 1000 type))) + for rlist = (multiple-value-list (acosh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y type)) + collect (list x rlist))) + nil) + +(deftest acosh.6 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x1 = (- (random (coerce 20 type)) 10) + for x2 = (- (random (coerce 20 type)) 10) + for rlist = (multiple-value-list (acosh (complex x1 x2))) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y `(complex ,type))) + collect (list x rlist))) + nil) + +;;; FIXME +;;; Add accuracy tests here + +;;; Error tests + +(deftest acosh.error.1 + (signals-error (acosh) program-error) + t) + +(deftest acosh.error.2 + (signals-error (acosh 1.0 1.0) program-error) + t) + +(deftest acosh.error.3 + (loop for x in *mini-universe* + unless (or (numberp x) + (eval `(signals-error (acosh ',x) type-error))) + collect x) + nil) + + + + + + + + + + diff --git a/ansi-tests/asinh.lsp b/ansi-tests/asinh.lsp new file mode 100644 index 00000000..8749f884 --- /dev/null +++ b/ansi-tests/asinh.lsp @@ -0,0 +1,96 @@ +;-*- Mode: Lisp -*- +;;;; Author: Paul Dietz +;;;; Created: Wed Feb 11 19:19:02 2004 +;;;; Contains: Tests of ASINH + +(in-package :cl-test) + +(deftest asinh.1 + (let ((result (asinh 0))) + (or (eqlt result 0) + (eqlt result 0.0))) + t) + +(deftest asinh.2 + (loop for type in '(short-float single-float double-float long-float) + for zero = (coerce 0 type) + unless (equal (multiple-value-list (asinh zero)) + (list zero)) + collect type) + nil) + +(deftest asinh.3 + (loop for type in '(short-float single-float double-float long-float) + for zero = (coerce 0 `(complex ,type)) + unless (equal (multiple-value-list (asinh zero)) + (list zero)) + collect type) + nil) + +(deftest asinh.4 + (loop for den = (1+ (random 10000)) + for num = (random (* 10 den)) + for x = (/ num den) + for rlist = (multiple-value-list (asinh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (numberp y)) + collect (list x rlist)) + nil) + +(deftest asinh.5 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x = (- (random (coerce 20 type)) 10) + for rlist = (multiple-value-list (asinh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y type)) + collect (list x rlist))) + nil) + +(deftest asinh.6 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x1 = (- (random (coerce 20 type)) 10) + for x2 = (- (random (coerce 20 type)) 10) + for rlist = (multiple-value-list (asinh (complex x1 x2))) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y `(complex ,type))) + collect (list x rlist))) + nil) + +;;; FIXME +;;; Add accuracy tests here + +;;; Error tests + +(deftest asinh.error.1 + (signals-error (asinh) program-error) + t) + +(deftest asinh.error.2 + (signals-error (asinh 1.0 1.0) program-error) + t) + +(deftest asinh.error.3 + (loop for x in *mini-universe* + unless (or (numberp x) + (eval `(signals-error (asinh ',x) type-error))) + collect x) + nil) + + + + + + + + + diff --git a/ansi-tests/atanh.lsp b/ansi-tests/atanh.lsp new file mode 100644 index 00000000..c0f3e95d --- /dev/null +++ b/ansi-tests/atanh.lsp @@ -0,0 +1,126 @@ +;-*- Mode: Lisp -*- +;;;; Author: Paul Dietz +;;;; Created: Wed Feb 11 19:26:25 2004 +;;;; Contains: Tests of ATANH + +(in-package :cl-test) + +(deftest atanh.1 + (let ((result (atanh 0))) + (or (eqlt result 0) + (eqlt result 0.0))) + t) + +(deftest atanh.2 + (loop for type in '(short-float single-float double-float long-float) + for zero = (coerce 0 type) + unless (equal (multiple-value-list (atanh zero)) + (list zero)) + collect type) + nil) + +(deftest atanh.3 + (loop for type in '(short-float single-float double-float long-float) + for zero = (coerce 0 `(complex ,type)) + unless (equal (multiple-value-list (atanh zero)) + (list zero)) + collect type) + nil) + +(deftest atanh.4 + (loop for den = (1+ (random 10000)) + for num = (random den) + for x = (/ num den) + for rlist = (multiple-value-list (atanh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (numberp y)) + collect (list x rlist)) + nil) + +(deftest atanh.5 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x = (if (eql (random 2) 0) + (+ 2 (random (coerce 1000 type))) + (- -2 (random (coerce 1000 type)))) + for rlist = (multiple-value-list (atanh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y `(complex ,type))) + collect (list x rlist))) + nil) + +(deftest atanh.5a + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x = (- (random (coerce 1.9998s0 type)) 0.9999s0) + for rlist = (multiple-value-list (atanh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y type)) + collect (list x rlist))) + nil) + +(deftest atanh.6 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x1 = (- (random (coerce 1.9998s0 type)) 0.9999s0) + for rlist = (multiple-value-list (atanh (complex x1 0.0s0))) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y `(complex ,type))) + collect (list x rlist))) + nil) + +(deftest atanh.7 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x1 = (- (random (coerce 1.9998s0 type)) 0.9999s0) + for rlist = (multiple-value-list (atanh (complex 0.0s0 x1))) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y `(complex ,type))) + collect (list x rlist))) + nil) + + + +;;; FIXME +;;; Add accuracy tests here + +;;; Error tests + +(deftest atanh.error.1 + (signals-error (atanh) program-error) + t) + +(deftest atanh.error.2 + (signals-error (atanh 1.0 1.0) program-error) + t) + +(deftest atanh.error.3 + (loop for x in *mini-universe* + unless (or (numberp x) + (eval `(signals-error (atanh ',x) type-error))) + collect x) + nil) + + + + + + + + + + diff --git a/ansi-tests/cos.lsp b/ansi-tests/cos.lsp index 51218338..cec1cf7c 100644 --- a/ansi-tests/cos.lsp +++ b/ansi-tests/cos.lsp @@ -153,6 +153,9 @@ always (numberp y)) t) +;;; FIXME +;;; More accuracy tests here + ;;; Error tests (deftest cos.error.1 diff --git a/ansi-tests/load-numbers.lsp b/ansi-tests/load-numbers.lsp index d0aa2067..a3a64e6e 100644 --- a/ansi-tests/load-numbers.lsp +++ b/ansi-tests/load-numbers.lsp @@ -33,7 +33,10 @@ (load "sinh.lsp") (load "cosh.lsp") - +(load "tanh.lsp") +(load "asinh.lsp") +(load "acosh.lsp") +(load "atanh.lsp") (load "times.lsp") (load "plus.lsp") diff --git a/ansi-tests/numbers-aux.lsp b/ansi-tests/numbers-aux.lsp index 8979984a..cd5bdd5d 100644 --- a/ansi-tests/numbers-aux.lsp +++ b/ansi-tests/numbers-aux.lsp @@ -265,6 +265,7 @@ (defun epsilon (number) (etypecase number + (complex (* 2 (epsilon (realpart number)))) ;; crude (short-float short-float-epsilon) (single-float single-float-epsilon) (double-float double-float-epsilon) @@ -273,6 +274,7 @@ (defun negative-epsilon (number) (etypecase number + (complex (* 2 (negative-epsilon (realpart number)))) ;; crude (short-float short-float-negative-epsilon) (single-float single-float-negative-epsilon) (double-float double-float-negative-epsilon) diff --git a/ansi-tests/sin.lsp b/ansi-tests/sin.lsp index b03c8852..723dc36d 100644 --- a/ansi-tests/sin.lsp +++ b/ansi-tests/sin.lsp @@ -153,6 +153,9 @@ always (numberp y)) t) +;;; FIXME +;;; More accuracy tests here + ;;; Error tests (deftest sin.error.1 diff --git a/ansi-tests/tan.lsp b/ansi-tests/tan.lsp index f6532ff8..fa2764ae 100644 --- a/ansi-tests/tan.lsp +++ b/ansi-tests/tan.lsp @@ -140,6 +140,9 @@ always (numberp y)) t) +;;; FIXME +;;; More accuracy tests here + ;;; Error tests (deftest tan.error.1 diff --git a/ansi-tests/tanh.lsp b/ansi-tests/tanh.lsp new file mode 100644 index 00000000..b9fa3e7e --- /dev/null +++ b/ansi-tests/tanh.lsp @@ -0,0 +1,87 @@ +;-*- Mode: Lisp -*- +;;;; Author: Paul Dietz +;;;; Created: Wed Feb 11 19:16:35 2004 +;;;; Contains: Tests of TANH + +(in-package :cl-test) + +(deftest tanh.1 + (let ((result (tanh 0))) + (or (eqlt result 0) + (eqlt result 0.0))) + t) + +(deftest tanh.2 + (loop for type in '(short-float single-float double-float long-float) + for zero = (coerce 0 type) + unless (equal (multiple-value-list (tanh zero)) + (list zero)) + collect type) + nil) + +(deftest tanh.3 + (loop for type in '(short-float single-float double-float long-float) + for zero = (coerce 0 `(complex ,type)) + unless (equal (multiple-value-list (tanh zero)) + (list zero)) + collect type) + nil) + +(deftest tanh.4 + (loop for den = (1+ (random 10000)) + for num = (random (* 10 den)) + for x = (/ num den) + for rlist = (multiple-value-list (tanh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (numberp y)) + collect (list x rlist)) + nil) + +(deftest tanh.5 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x = (- (random (coerce 20 type)) 10) + for rlist = (multiple-value-list (tanh x)) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y type)) + collect (list x rlist))) + nil) + +(deftest tanh.6 + (loop for type in '(short-float single-float double-float long-float) + nconc + (loop + for x1 = (- (random (coerce 20 type)) 10) + for x2 = (- (random (coerce 20 type)) 10) + for rlist = (multiple-value-list (tanh (complex x1 x2))) + for y = (car rlist) + repeat 1000 + unless (and (null (cdr rlist)) + (typep y `(complex ,type))) + collect (list x rlist))) + nil) + +;;; FIXME +;;; Add accuracy tests here + +;;; Error tests + +(deftest tanh.error.1 + (signals-error (tanh) program-error) + t) + +(deftest tanh.error.2 + (signals-error (tanh 1.0 1.0) program-error) + t) + +(deftest tanh.error.3 + (loop for x in *mini-universe* + unless (or (numberp x) + (eval `(signals-error (tanh ',x) type-error))) + collect x) + nil) -- GitLab