From c26f7f8e22ff68c7304c7e55fcbd273f0eb98f8e Mon Sep 17 00:00:00 2001
From: Liam Healy <liam@thinkpad.local>
Date: Tue, 1 Jun 2010 23:14:08 -0400
Subject: [PATCH] Fix assert-to-tolerance; remaining exponential-function tests
 ported

The macro #'assert-to-tolerance was not correct but now maps to
sf-check-results.  The order of arguments in the sf-frac-diff call in
sf-check-single has reversed to match test_sf_check_result in the GSL
code.  The remaining exponential-function tests have been ported
except for the one involving gsl_sf_exprel_n_CF_e which hasn't been
ported.  All the tests except one pass.
---
 test-unit/augment.lisp           | 16 +++----
 tests/exponential-functions.lisp | 80 +++++++++++++++++++++++++++++---
 tests/gamma.lisp                 |  2 +-
 3 files changed, 81 insertions(+), 17 deletions(-)

diff --git a/test-unit/augment.lisp b/test-unit/augment.lisp
index d2922a6b..bd55b0e4 100644
--- a/test-unit/augment.lisp
+++ b/test-unit/augment.lisp
@@ -1,6 +1,6 @@
 ;; Additional methods for lisp-unit
 ;; Liam Healy 2009-04-15 23:23:30EDT augment.lisp
-;; Time-stamp: <2010-06-01 11:49:45EDT augment.lisp>
+;; Time-stamp: <2010-06-01 22:02:57EDT augment.lisp>
 ;;
 ;; Copyright 2009 Liam M. Healy
 ;; Distributed under the terms of the GNU General Public License
@@ -43,7 +43,7 @@
 
 (defun sf-frac-diff (x1 x2)
   ;; After test_sf_frac_diff in specfunc/test_sf.c.
-  (cond ((and (zerop x1) (zerop x2))(exp-err-scaled 1.0d0 +test-sqrt-tol0+)
+  (cond ((and (zerop x1) (zerop x2))
 	 (coerce 0 (type-of x1)))
 	((zerop x1)
 	 (abs x2))
@@ -58,7 +58,7 @@
   (or (eql result expected-value) ; catch expected inifinity/nan
       (let ((diff (abs (- result expected-value))))
 	(and
-	 (<= (sf-frac-diff result expected-value) (* +test-factor+ tolerance))
+	 (<= (sf-frac-diff expected-value result) (* +test-factor+ tolerance))
 	 (if error-estimate
 	     (and (not (minusp error-estimate)) ; redundant but signalled as separate error in C
 		  (finitep error-estimate)
@@ -83,15 +83,11 @@
 	  (elt result-list (+ ind (length expected-value))))))))
 
 ;; (assert-to-tolerance (tdist-P 0.0d0 1.0d0) 0.5d0 +test-tol6+)
-;; Probably can remove the binding of lisp-unit:*epsilon*, it doesn't
-;; do anything anymore.
 (defmacro assert-to-tolerance (form expected-value tolerance)
   ;; Equivalent of TEST_SF.
-  `(let ((lisp-unit:*epsilon* ,tolerance))
-     (lisp-unit::assert-true
-      ,expected-value
-      (sf-check-results
-       (multiple-value-list ,form) ,expected-value ,tolerance))))
+  `(lisp-unit::assert-true
+    (sf-check-results
+     (multiple-value-list ,form) ,expected-value ,tolerance)))
 
   ;; and TEST_SF becomes assert-to-tolerance.
 (defmacro assert-sf-scale (form expected-value scale result-tol &optional err-tol)
diff --git a/tests/exponential-functions.lisp b/tests/exponential-functions.lisp
index 7151c30d..ead28bec 100644
--- a/tests/exponential-functions.lisp
+++ b/tests/exponential-functions.lisp
@@ -30,10 +30,8 @@
   (assert-sf-scale (exp-scaled 2000.0d0) 3.88118019428363725d0 868 +test-tol3+ +test-tol5+)
   (assert-to-tolerance (exp-err -10.0d0 +test-tol1+) (exp -10.0d0) +test-tol1+)
   (assert-to-tolerance (exp-err 10.0d0 +test-tol1+) (exp 10.0d0) +test-tol1+)
-  ;; This one fails even though it's identical to the GSL test which passes:
-  #+(or)
   (assert-sf-scale
-   (exp-err-scaled 1.0d0 +test-sqrt-tol0+) (exp 1.0d0) 0 +test-tol1+ (* 32 +test-tol0+))
+   (exp-err-scaled 1.0d0 +test-sqrt-tol0+) (exp 1.0d0) 0 +test-tol1+ (* 32 +test-sqrt-tol0+))
   (assert-sf-scale
    (exp-err-scaled 2000.0d0 1.0d-10) 3.88118019428363725d0 868 +test-tol3+ 1.0d-7)
   (assert-to-tolerance (exp-mult -10.0d0 1.0d-06) (* 1.0d-06 (exp -10.0d0)) +test-tol0+)
@@ -52,7 +50,7 @@
   (assert-to-tolerance
    (exp-mult +exp-x+ 1.0d20) (* 1.0d20 (exp +exp-x+)) +test-tol3+)
   (assert-to-tolerance
-   (exp-mult +exp-x+ (* +exp-x+ (exp +ln2+))) 2.0d0 +test-tol4+)
+   (exp-mult +exp-x+ (* (exp (- +exp-x+)) (exp +ln2+))) 2.0d0 +test-tol4+)
   (assert-sf-scale
    (exp-mult-scaled 1.0d0 1.0d0) (exp 1.0d0) 0 +test-tol0+ +test-tol2+)
   (assert-sf-scale
@@ -67,5 +65,75 @@
   (assert-sf-scale
    (exp-mult-scaled 10000.0d0 1.0d0) 8.806818225662921587261496007d0 4342 +test-tol5+)
   (assert-sf-scale
-   (exp-mult-scaled 100.0d0 1.0d0) 2.688117141816135448412625551d43 0 +test-tol2+))
-  
+   (exp-mult-scaled 100.0d0 1.0d0) 2.688117141816135448412625551d43 0 +test-tol2+)
+  (assert-sf-scale
+   (exp-scaled 100.0d0) 2.688117141816135448412625551d43 0 +test-tol2+)
+  (assert-sf-scale
+   (exp-scaled 1000.0d0) 1.970071114017046993888879352d0 434 +test-tol3+)
+  (assert-sf-scale
+   (exp-scaled -100.0d0) 3.720075976020835962959695803d-44 0 +test-tol2+)
+  (assert-sf-scale
+   (exp-scaled -1000.0d0) 5.075958897549456765291809479d0 -435 +test-tol3+)
+  (ASSERT-TO-TOLERANCE (EXPM1 -10.0d0) (1- (EXP -10.0d0)) +test-tol0+)
+  (ASSERT-TO-TOLERANCE (EXPM1 -0.001d0) -0.00099950016662500845d0
+		       +TEST-TOL0+)
+  (assert-to-tolerance (expm1 -1.0d-8) (+ -1.0d-8 0.5d-16) +test-tol0+)
+  (assert-to-tolerance (expm1 1.0d-8) (+ 1.0d-8 0.5d-16) +test-tol0+)
+  (assert-to-tolerance (expm1 0.001d0) 0.0010005001667083417d0 +test-tol0+)
+  (assert-to-tolerance (expm1 10.0d0) (1- (exp 10.0d0)) +test-tol0+)
+  (ASSERT-TO-TOLERANCE (EXPREL -10.0d0) 0.0999954600070237515d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL -0.001d0) 0.9995001666250084d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL -1.0d-8) (- 1.0d0 0.5d-8) +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL 1.0d-8) (+ 1.0d0 0.5d-8) +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL 0.001d0) 1.0005001667083417d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL 10.0d0) 2202.5465794806716517d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-2 -10.0d0) 0.18000090799859524970d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-2 -0.001d0) 0.9996667499833361107d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-2 -1.0d-8) 0.9999999966666666750d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-2 1.0d-8) 1.0000000033333333417d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-2 0.001d0) 1.0003334166833361115d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-2 10.0d0) 440.3093158961343303d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 -1000.0d0) 0.00299400600000000000d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 -100.0d0) 0.02940600000000000000d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 -10.0d0) 0.24599972760042142509d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 -3.0d0) 0.5444917625849191238d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 -0.001d0) 0.9997500499916678570d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 -1.0d-8) 0.9999999975000000050d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 1.0d-8) 1.0000000025000000050d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 0.001d0) 1.0002500500083345240d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 3.0d0) 2.5745637607083706091d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 3.1d0) 2.6772417068460206247d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 10.0d0) 131.79279476884029910d0 +TEST-TOL1+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 3 100.0d0) 1.6128702850896812690d+38 +TEST-TOL2+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 -1000.0d0) 0.04766231609253975959d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 -100.0d0) 0.3348247572345889317d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 -10.0d0) 0.8356287051853286482d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 -3.0d0) 0.9443881609152163615d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 -1.0d0) 0.980762245565660617d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 -1.0d-8) (- 1.0d0 (/ 1.0d-8 51.0d0)) +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 1.0d-8) (+ 1.0d0 (/ 1.0d-8 51.0d0)) +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 1.0d0) 1.01999216583666790d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 3.0d0) 1.0624205757460368307d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 48.0d0) 7.499573876877194416d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 50.1d0) 9.311803306230992272d0 +TEST-TOL4+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 100.0d0) 8.175664432485807634d+07 +TEST-TOL4+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 50 500.0d0) 4.806352370663185330d+146 +TEST-TOL3+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 -1000.0d0) 0.3334815803127619256d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 -100.0d0) 0.8335646217536183909d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 -10.0d0) 0.9804297803131823066d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 -3.0d0) 0.9940475488850672997d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 -1.0d0) 0.9980079602383488808d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 -1.0d-8) (- 1.0d0 (/ 1.0d-8 501.0d0)) +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 1.0d-8) (+ 1.0d0 (/ 1.0d-8 501.0d0)) +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 1.0d0) 1.0019999920160634252d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 3.0d0) 1.0060240236632444934d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 48.0d0) 1.1059355517981272174d0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 100.0d0) 1.2492221464878287204d0 +TEST-TOL1+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 500.0d0) 28.363019877927630858d0 +TEST-TOL2+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 1000.0d0) 2.4037563160335300322d+68 +TEST-TOL4+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 500 1600.0d0) 7.899293535320607403d+226 +TEST-TOL4+)
+  (ASSERT-TO-TOLERANCE (EXPREL-N 1263131 1261282.3637d0)
+		       545.0113107238425900305428360d0 +TEST-TOL4+)
+  ;; Nothing for this ported yet
+  ;; gsl_sf_exprel_n_CF_e, (6.315655e+05, 6.302583168053568806e+05, &r), 385.425369029433473098652465720, TEST_TOL4, GSL_SUCCESS)
+  )
diff --git a/tests/gamma.lisp b/tests/gamma.lisp
index d3ef048a..42810107 100644
--- a/tests/gamma.lisp
+++ b/tests/gamma.lisp
@@ -158,7 +158,7 @@
   (ASSERT-TO-TOLERANCE (RELATIVE-POCHAMMER -5.5d0 -11.0d0) 0.09090909090939652475d0 +TEST-TOL0+)
   (ASSERT-TO-TOLERANCE (POCHAMMER -9.0d0 -4.0d0) #.(/ 17160.0d0) +test-tol0+)
   (ASSERT-TO-TOLERANCE (POCHAMMER -9.0d0 -3.0d0) #.(/ -1320.0d0) +test-tol0+)
-  (ASSERT-TO-TOLERANCE (POCHAMMER -9.0d0 -3.5d0) 0 +TEST-TOL0+)
+  (ASSERT-TO-TOLERANCE (POCHAMMER -9.0d0 -3.5d0) 0.0d0 +TEST-TOL0+)
   (ASSERT-TO-TOLERANCE (POCHAMMER -9.0d0 4.0d0) 3024.0d0 +TEST-TOL0+)
   (ASSERT-TO-TOLERANCE (POCHAMMER -9.0d0 3.0d0) -504.0d0 +TEST-TOL0+)
   (ASSERT-TO-TOLERANCE (POCHAMMER -9.0d0 3.5d0) 0.0d0 +TEST-TOL0+)
-- 
GitLab