From 75607030ff6fdefe4c9836dc33047cad3b8afadc Mon Sep 17 00:00:00 2001 From: pfdietz <pfdietz@localhost> Date: Tue, 10 Feb 2004 03:10:53 +0000 Subject: [PATCH] Added tests for sin, cos, and tan (more are needed.) --- ansi-tests/cos.lsp | 172 +++++++++++++++++++++++++++++++++++++ ansi-tests/numbers-aux.lsp | 6 ++ ansi-tests/sin.lsp | 171 ++++++++++++++++++++++++++++++++++++ ansi-tests/tan.lsp | 159 ++++++++++++++++++++++++++++++++++ 4 files changed, 508 insertions(+) create mode 100644 ansi-tests/cos.lsp create mode 100644 ansi-tests/sin.lsp create mode 100644 ansi-tests/tan.lsp diff --git a/ansi-tests/cos.lsp b/ansi-tests/cos.lsp new file mode 100644 index 00000000..51218338 --- /dev/null +++ b/ansi-tests/cos.lsp @@ -0,0 +1,172 @@ +;-*- Mode: Lisp -*- +;;;; Author: Paul Dietz +;;;; Created: Mon Feb 9 20:53:42 2004 +;;;; Contains: Tests of COS + +(in-package :cl-test) + +(deftest cos.1 + (loop for i from -1000 to 1000 + for rlist = (multiple-value-list (cos i)) + for y = (car rlist) + always (and (null (cdr rlist)) + (<= -1 y 1) + (or (rationalp y) (typep y 'single-float)))) + t) + +(deftest cos.2 + (loop for x = (- (random 2000.0s0) 1000.0s0) + for rlist = (multiple-value-list (cos x)) + for y = (car rlist) + repeat 1000 + always (and (null (cdr rlist)) + (<= -1 y 1) + (typep y 'short-float))) + t) + +(deftest cos.3 + (loop for x = (- (random 2000.0f0) 1000.0f0) + for rlist = (multiple-value-list (cos x)) + for y = (car rlist) + repeat 1000 + always (and (null (cdr rlist)) + (<= -1 y 1) + (typep y 'single-float))) + t) + +(deftest cos.4 + (loop for x = (- (random 2000.0d0) 1000.0d0) + for rlist = (multiple-value-list (cos x)) + for y = (car rlist) + repeat 1000 + always (and (null (cdr rlist)) + (<= -1 y 1) + (typep y 'double-float))) + t) + +(deftest cos.5 + (loop for x = (- (random 2000.0l0) 1000.0l0) + for rlist = (multiple-value-list (cos x)) + for y = (car rlist) + repeat 1000 + always (and (null (cdr rlist)) + (<= -1 y 1) + (typep y 'long-float))) + t) + +(deftest cos.6 + (let ((r (cos 0))) + (or (eqlt r 1) (eqlt r 1.0))) + t) + +(deftest cos.7 + (cos 0.0s0) + 1.0s0) + +(deftest cos.8 + (cos 0.0) + 1.0) + +(deftest cos.9 + (cos 0.0d0) + 1.0d0) + +(deftest cos.10 + (cos 0.0l0) + 1.0l0) + +(deftest cos.11 + (loop for i from 1 to 100 + unless (approx= (cos i) (cos (coerce i 'single-float))) + collect i) + nil) + +(deftest cos.12 + (approx= (cos (coerce (/ pi 2) 'single-float)) 0.0) + t) + +(deftest cos.13 + (approx= (cos (coerce (/ pi -2) 'single-float)) 0.0) + t) + +(deftest cos.14 + (approx= (cos (coerce (/ pi 2) 'short-float)) 0s0) + t) + +(deftest cos.15 + (approx= (cos (coerce (/ pi -2) 'short-float)) 0s0) + t) + +(deftest cos.16 + (approx= (cos (coerce (/ pi 2) 'double-float)) 0d0) + t) + +(deftest cos.17 + (approx= (cos (coerce (/ pi -2) 'double-float)) 0d0) + t) + +(deftest cos.18 + (approx= (cos (coerce (/ pi 2) 'long-float)) 0l0) + t) + +(deftest cos.19 + (approx= (cos (coerce (/ pi -2) 'long-float)) 0l0) + t) + +(deftest cos.20 + (loop for r = (- (random 2000) 1000) + for i = (- (random 20) 10) + for y = (cos (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest cos.21 + (loop for r = (- (random 2000.0s0) 1000.0s0) + for i = (- (random 20.0s0) 10.0s0) + for y = (cos (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest cos.22 + (loop for r = (- (random 2000.0f0) 1000.0f0) + for i = (- (random 20.0f0) 10.0f0) + for y = (cos (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest cos.23 + (loop for r = (- (random 2000.0d0) 1000.0d0) + for i = (- (random 20.0d0) 10.0d0) + for y = (cos (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest cos.24 + (loop for r = (- (random 2000.0l0) 1000.0l0) + for i = (- (random 20.0l0) 10.0l0) + for y = (cos (complex r i)) + repeat 1000 + always (numberp y)) + t) + +;;; Error tests + +(deftest cos.error.1 + (signals-error (cos) program-error) + t) + +(deftest cos.error.2 + (signals-error (cos 0.0 0.0) program-error) + t) + +(deftest cos.error.3 + (loop for x in *mini-universe* + unless (or (numberp x) + (eval `(signals-error (cos ',x) type-error))) + collect x) + nil) + diff --git a/ansi-tests/numbers-aux.lsp b/ansi-tests/numbers-aux.lsp index eb5c7199..8979984a 100644 --- a/ansi-tests/numbers-aux.lsp +++ b/ansi-tests/numbers-aux.lsp @@ -345,3 +345,9 @@ (min x1 x2) (max x1 x2) (min y1 y2) (max y1 y2) n2)))) +(defun safe-tan (x &optional (default 0.0)) + (handler-case + (let ((result (multiple-value-list (tan x)))) + (assert (null (cdr result))) + (car result)) + (arithmetic-error () default))) diff --git a/ansi-tests/sin.lsp b/ansi-tests/sin.lsp new file mode 100644 index 00000000..b03c8852 --- /dev/null +++ b/ansi-tests/sin.lsp @@ -0,0 +1,171 @@ +;-*- Mode: Lisp -*- +;;;; Author: Paul Dietz +;;;; Created: Mon Feb 9 20:20:46 2004 +;;;; Contains: Tests for SIN + +(in-package :cl-test) + +(deftest sin.1 + (loop for i from -1000 to 1000 + for rlist = (multiple-value-list (sin i)) + for y = (car rlist) + always (and (null (cdr rlist)) + (<= -1 y 1) + (or (rationalp y) (typep y 'single-float)))) + t) + +(deftest sin.2 + (loop for x = (- (random 2000.0s0) 1000.0s0) + for rlist = (multiple-value-list (sin x)) + for y = (car rlist) + repeat 1000 + always (and (null (cdr rlist)) + (<= -1 y 1) + (typep y 'short-float))) + t) + +(deftest sin.3 + (loop for x = (- (random 2000.0f0) 1000.0f0) + for rlist = (multiple-value-list (sin x)) + for y = (car rlist) + repeat 1000 + always (and (null (cdr rlist)) + (<= -1 y 1) + (typep y 'single-float))) + t) + +(deftest sin.4 + (loop for x = (- (random 2000.0d0) 1000.0d0) + for rlist = (multiple-value-list (sin x)) + for y = (car rlist) + repeat 1000 + always (and (null (cdr rlist)) + (<= -1 y 1) + (typep y 'double-float))) + t) + +(deftest sin.5 + (loop for x = (- (random 2000.0l0) 1000.0l0) + for rlist = (multiple-value-list (sin x)) + for y = (car rlist) + repeat 1000 + always (and (null (cdr rlist)) + (<= -1 y 1) + (typep y 'long-float))) + t) + +(deftest sin.6 + (let ((r (sin 0))) + (or (eqlt r 0) (eqlt r 0.0))) + t) + +(deftest sin.7 + (sin 0.0s0) + 0.0s0) + +(deftest sin.8 + (sin 0.0) + 0.0) + +(deftest sin.9 + (sin 0.0d0) + 0.0d0) + +(deftest sin.10 + (sin 0.0l0) + 0.0l0) + +(deftest sin.11 + (loop for i from 1 to 100 + unless (approx= (sin i) (sin (coerce i 'single-float))) + collect i) + nil) + +(deftest sin.12 + (approx= (sin (coerce (/ pi 2) 'single-float)) 1.0) + t) + +(deftest sin.13 + (approx= (sin (coerce (/ pi -2) 'single-float)) -1.0) + t) + +(deftest sin.14 + (approx= (sin (coerce (/ pi 2) 'short-float)) 1.0s0) + t) + +(deftest sin.15 + (approx= (sin (coerce (/ pi -2) 'short-float)) -1.0s0) + t) + +(deftest sin.16 + (approx= (sin (coerce (/ pi 2) 'double-float)) 1.0d0) + t) + +(deftest sin.17 + (approx= (sin (coerce (/ pi -2) 'double-float)) -1.0d0) + t) + +(deftest sin.18 + (approx= (sin (coerce (/ pi 2) 'long-float)) 1.0l0) + t) + +(deftest sin.19 + (approx= (sin (coerce (/ pi -2) 'long-float)) -1.0l0) + t) + +(deftest sin.20 + (loop for r = (- (random 2000) 1000) + for i = (- (random 20) 10) + for y = (sin (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest sin.21 + (loop for r = (- (random 2000.0s0) 1000.0s0) + for i = (- (random 20.0s0) 10.0s0) + for y = (sin (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest sin.22 + (loop for r = (- (random 2000.0f0) 1000.0f0) + for i = (- (random 20.0f0) 10.0f0) + for y = (sin (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest sin.23 + (loop for r = (- (random 2000.0d0) 1000.0d0) + for i = (- (random 20.0d0) 10.0d0) + for y = (sin (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest sin.24 + (loop for r = (- (random 2000.0l0) 1000.0l0) + for i = (- (random 20.0l0) 10.0l0) + for y = (sin (complex r i)) + repeat 1000 + always (numberp y)) + t) + +;;; Error tests + +(deftest sin.error.1 + (signals-error (sin) program-error) + t) + +(deftest sin.error.2 + (signals-error (sin 0.0 0.0) program-error) + t) + +(deftest sin.error.3 + (loop for x in *mini-universe* + unless (or (numberp x) + (eval `(signals-error (sin ',x) type-error))) + collect x) + nil) diff --git a/ansi-tests/tan.lsp b/ansi-tests/tan.lsp new file mode 100644 index 00000000..f6532ff8 --- /dev/null +++ b/ansi-tests/tan.lsp @@ -0,0 +1,159 @@ +;-*- Mode: Lisp -*- +;;;; Author: Paul Dietz +;;;; Created: Mon Feb 9 20:55:40 2004 +;;;; Contains: Tests of TAN + +(in-package :cl-test) + +(deftest tan.1 + (loop for i from -1000 to 1000 + for rlist = (multiple-value-list (tan i)) + for y = (car rlist) + always (and (null (cdr rlist)) + (or (rationalp y) (typep y 'single-float)))) + t) + +(deftest tan.2 + (loop for x = (- (random 2000.0s0) 1000.0s0) + for y = (safe-tan x 0.0s0) + repeat 1000 + always (typep y 'short-float)) + t) + +(deftest tan.3 + (loop for x = (- (random 2000.0f0) 1000.0f0) + for y = (safe-tan x 0.0) + repeat 1000 + always (typep y 'single-float)) + t) + +(deftest tan.4 + (loop for x = (- (random 2000.0d0) 1000.0d0) + for y = (safe-tan x 0.0d0) + repeat 1000 + always (typep y 'double-float)) + t) + +(deftest tan.5 + (loop for x = (- (random 2000.0l0) 1000.0l0) + for y = (safe-tan 0.0l0) + repeat 1000 + always (typep y 'long-float)) + t) + +(deftest tan.6 + (let ((r (tan 0))) + (or (eqlt r 0) (eqlt r 0.0))) + t) + +(deftest tan.7 + (tan 0.0s0) + 0.0s0) + +(deftest tan.8 + (tan 0.0) + 0.0) + +(deftest tan.9 + (tan 0.0d0) + 0.0d0) + +(deftest tan.10 + (tan 0.0l0) + 0.0l0) + +(deftest tan.11 + (loop for i from 1 to 100 + unless (approx= (tan i) (tan (coerce i 'single-float))) + collect i) + nil) + +(deftest tan.12 + (approx= (tan (coerce (/ pi 4) 'single-float)) 1.0) + t) + +(deftest tan.13 + (approx= (tan (coerce (/ pi -4) 'single-float)) -1.0) + t) + +(deftest tan.14 + (approx= (tan (coerce (/ pi 4) 'short-float)) 1s0) + t) + +(deftest tan.15 + (approx= (tan (coerce (/ pi -4) 'short-float)) -1s0) + t) + +(deftest tan.16 + (approx= (tan (coerce (/ pi 4) 'double-float)) 1d0) + t) + +(deftest tan.17 + (approx= (tan (coerce (/ pi -4) 'double-float)) -1d0) + t) + +(deftest tan.18 + (approx= (tan (coerce (/ pi 4) 'long-float)) 1l0) + t) + +(deftest tan.19 + (approx= (tan (coerce (/ pi -4) 'long-float)) -1l0) + t) + +(deftest tan.20 + (loop for r = (- (random 2000) 1000) + for i = (- (random 20) 10) + for y = (safe-tan (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest tan.21 + (loop for r = (- (random 2000.0s0) 1000.0s0) + for i = (- (random 20.0s0) 10.0s0) + for y = (safe-tan (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest tan.22 + (loop for r = (- (random 2000.0f0) 1000.0f0) + for i = (- (random 20.0f0) 10.0f0) + for y = (safe-tan (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest tan.23 + (loop for r = (- (random 2000.0d0) 1000.0d0) + for i = (- (random 20.0d0) 10.0d0) + for y = (safe-tan (complex r i)) + repeat 1000 + always (numberp y)) + t) + +(deftest tan.24 + (loop for r = (- (random 2000.0l0) 1000.0l0) + for i = (- (random 20.0l0) 10.0l0) + for y = (safe-tan (complex r i)) + repeat 1000 + always (numberp y)) + t) + +;;; Error tests + +(deftest tan.error.1 + (signals-error (tan) program-error) + t) + +(deftest tan.error.2 + (signals-error (tan 0.0 0.0) program-error) + t) + +(deftest tan.error.3 + (loop for x in *mini-universe* + unless (or (numberp x) + (eval `(signals-error (tan ',x) type-error))) + collect x) + nil) + -- GitLab