From 0db9bc077c795ed6d9721fa91bae6f5bac7307ce Mon Sep 17 00:00:00 2001 From: "Thomas M. Hermann" Date: Thu, 16 Sep 2010 22:56:15 -0500 Subject: [PATCH] First draft of the literal function bug fix. Convert expand-assert to a macro and then backquote the calls to it in the assertion macros. This requires inserting a comma to explicitly control evaluation of the arguments to expand-assert. This corrects the literal function bug and is more idiomatic of defining macros. --- floating-point.lisp | 10 +++++----- lisp-unit.lisp | 30 +++++++++++++++--------------- rational.lisp | 2 +- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/floating-point.lisp b/floating-point.lisp index e4fd1db..0c0dacf 100644 --- a/floating-point.lisp +++ b/floating-point.lisp @@ -263,7 +263,7 @@ comparison of the relative error is less than epsilon." epsilon))) (defmacro assert-float-equal (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'float-equal)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'float-equal)) ;;; (SUMSQ data) => scale, sumsq (defmethod sumsq ((data list)) @@ -491,7 +491,7 @@ error norm is less than epsilon." epsilon measure))) (defmacro assert-norm-equal (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'norm-equal)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'norm-equal)) ;;; (NORMALIZE-FLOAT significand &optional exponent) => significand,exponent ;;; [NumAlgoC] : Definition 1.7, pg. 4 @@ -577,7 +577,7 @@ comparison is equal to significant figures." significant-figures))) (defmacro assert-sigfig-equal (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'sigfig-equal)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'sigfig-equal)) ;;; (NUMBER-EQUAL number1 number2) => true or false (defun number-equal (number1 number2 &optional (epsilon *epsilon*) type-eq-p) @@ -590,7 +590,7 @@ optionally requiring the types to be identical." epsilon))) (defmacro assert-number-equal (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'number-equal)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'number-equal)) ;;; (NUMERICAL-EQUAL result1 result2) => true or false ;;; @@ -648,7 +648,7 @@ is equal according to :TEST." :displaced-to result2)))) (defmacro assert-numerical-equal (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'numerical-equal)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'numerical-equal)) ;;; FIXME : Audit and move the diagnostic functions to a separate ;;; file. diff --git a/lisp-unit.lisp b/lisp-unit.lisp index 64fdc3c..81fec9b 100644 --- a/lisp-unit.lisp +++ b/lisp-unit.lisp @@ -130,40 +130,40 @@ For more information, see lisp-unit.html. ;;; ASSERT macros (defmacro assert-eq (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'eq)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'eq)) (defmacro assert-eql (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'eql)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'eql)) (defmacro assert-equal (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'equal)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'equal)) (defmacro assert-equalp (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'equalp)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'equalp)) (defmacro assert-error (condition form &rest extras) - (expand-assert :error form (expand-error-form form) - condition extras)) + `(expand-assert :error ,form ,(expand-error-form form) + ,condition ,extras)) (defmacro assert-expands (&environment env expansion form &rest extras) - (expand-assert :macro form - (expand-macro-form form #+lispworks nil #-lispworks env) - expansion extras)) + `(expand-assert :macro ,form + ,(expand-macro-form form #+lispworks nil #-lispworks env) + ,expansion ,extras)) (defmacro assert-false (form &rest extras) - (expand-assert :result form form nil extras)) + `(expand-assert :result ,form ,form nil ,extras)) (defmacro assert-equality (test expected form &rest extras) - (expand-assert :equal form form expected extras :test test)) + `(expand-assert :equal ,form ,form ,expected ,extras :test ,test)) (defmacro assert-prints (output form &rest extras) - (expand-assert :output form (expand-output-form form) - output extras)) + `(expand-assert :output ,form ,(expand-output-form form) + ,output ,extras)) (defmacro assert-true (form &rest extras) - (expand-assert :result form form t extras)) + `(expand-assert :result ,form ,form t ,extras)) -(defun expand-assert (type form body expected extras &key (test '#'eql)) +(defmacro expand-assert (type form body expected extras &key (test '#'eql)) `(internal-assert ,type ',form (lambda () ,body) (lambda () ,expected) diff --git a/rational.lisp b/rational.lisp index 4a8e77d..edba1d2 100644 --- a/rational.lisp +++ b/rational.lisp @@ -87,4 +87,4 @@ equal." :displaced-to data2)))) (defmacro assert-rational-equal (expected form &rest extras) - (expand-assert :equal form form expected extras :test '#'rational-equal)) + `(expand-assert :equal ,form ,form ,expected ,extras :test #'rational-equal)) -- 2.11.4.GIT