[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] R7RS test suite?



On 08/31/2013 04:34 PM, Alex Shinn wrote:
    Having test-numeric-syntaxes take a long list of tests makes it
    more difficult to deal with individual tests, in terms of
    debugging or marking them as expected failures.


This was adapted largely as-is from Peter Bex's numeric test
suite for R5RS, pruning a lot.  Possibly I overlooked some
tests that are no longer valid, please let me know if you find
any.

Converting to a single test-numeric-syntax macro would
indeed be better.  Patches welcome :)

The attached patch drops test-numeric-syntaxes,
but shouldn't change any actual tests.  Tested under
Chibi and Kawa (with some modifications).
--
	--Per Bothner
per@x   http://per.bothner.com/
--- r7rs-tests.scm.orig	2012-12-04 03:03:52.000000000 -0800
+++ r7rs-tests.scm	2013-09-01 12:37:08.578552672 -0700
@@ -1701,152 +1701,142 @@
        (test expect (values z))
        (test #t (and (member z-str '(str strs ...)) #t))))))
 
-(define-syntax test-numeric-syntaxes
-  (syntax-rules ()
-    ((test-numeric-syntaxes (x ...))
-     (test-numeric-syntax x ...))
-    ((test-numeric-syntaxes (x ...) . rest)
-     (begin (test-numeric-syntax x ...)
-            (test-numeric-syntaxes . rest)))))
-
 ;; Each test is of the form:
 ;;
-;;   (input-str expected-value expected-write-values ...)
+;;   (test-numeric-syntax input-str expected-value expected-write-values ...)
 ;;
 ;; where the input should be eqv? to the expected-value, and the
 ;; written output the same as any of the expected-write-values.  The
 ;; form
 ;;
-;;   (input-str expected-value)
+;;   (test-numeric-syntax input-str expected-value)
 ;;
 ;; is a shorthand for
 ;;
-;;   (input-str expected-value (input-str))
+;;   (test-numeric-syntax input-str expected-value (input-str))
 
-(test-numeric-syntaxes
- ;; Simple
- ("1" 1)
- ("+1" 1 "1")
- ("-1" -1)
- ("#i1" 1.0 "1.0" "1.")
- ("#I1" 1.0 "1.0" "1.")
- ("#i-1" -1.0 "-1.0" "-1.")
- ;; Decimal
- ("1.0" 1.0 "1.0" "1.")
- ("1." 1.0 "1.0" "1.")
- (".1" 0.1 "0.1" "100.0e-3")
- ("-.1" -0.1 "-0.1" "-100.0e-3")
- ;; Some Schemes don't allow negative zero. This is okay with the standard
- ("-.0" -0.0 "-0." "-0.0" "0.0" "0." ".0")
- ("-0." -0.0 "-.0" "-0.0" "0.0" "0." ".0")
- ("#i1.0" 1.0 "1.0" "1.")
- ("#e1.0" 1 "1")
- ("#e-.0" 0 "0")
- ("#e-0." 0 "0")
- ;; Decimal notation with suffix
- ("1e2" 100.0 "100.0" "100.")
- ("1E2" 100.0 "100.0" "100.")
- ("1s2" 100.0 "100.0" "100.")
- ("1S2" 100.0 "100.0" "100.")
- ("1f2" 100.0 "100.0" "100.")
- ("1F2" 100.0 "100.0" "100.")
- ("1d2" 100.0 "100.0" "100.")
- ("1D2" 100.0 "100.0" "100.")
- ("1l2" 100.0 "100.0" "100.")
- ("1L2" 100.0 "100.0" "100.")
- ;; NaN, Inf
- ("+nan.0" +nan.0 "+nan.0" "+NaN.0")
- ("+NAN.0" +nan.0 "+nan.0" "+NaN.0")
- ("+inf.0" +inf.0 "+inf.0" "+Inf.0")
- ("+InF.0" +inf.0 "+inf.0" "+Inf.0")
- ("-inf.0" -inf.0 "-inf.0" "-Inf.0")
- ("-iNF.0" -inf.0 "-inf.0" "-Inf.0")
- ("#i+nan.0" +nan.0 "+nan.0" "+NaN.0")
- ("#i+inf.0" +inf.0 "+inf.0" "+Inf.0")
- ("#i-inf.0" -inf.0 "-inf.0" "-Inf.0")
- ;; Exact ratios
- ("1/2" (/ 1 2))
- ("#e1/2" (/ 1 2) "1/2")
- ("10/2" 5 "5")
- ("-1/2" (- (/ 1 2)))
- ("0/10" 0 "0")
- ("#e0/10" 0 "0")
- ("#i3/2" (/ 3.0 2.0) "1.5")
- ;; Exact complex
- ("1+2i" (make-rectangular 1 2))
- ("1+2I" (make-rectangular 1 2) "1+2i")
- ("1-2i" (make-rectangular 1 -2))
- ("-1+2i" (make-rectangular -1 2))
- ("-1-2i" (make-rectangular -1 -2))
- ("+i" (make-rectangular 0 1) "+i" "+1i" "0+i" "0+1i")
- ("0+i" (make-rectangular 0 1) "+i" "+1i" "0+i" "0+1i")
- ("0+1i" (make-rectangular 0 1) "+i" "+1i" "0+i" "0+1i")
- ("-i" (make-rectangular 0 -1) "-i" "-1i" "0-i" "0-1i")
- ("0-i" (make-rectangular 0 -1) "-i" "-1i" "0-i" "0-1i")
- ("0-1i" (make-rectangular 0 -1) "-i" "-1i" "0-i" "0-1i")
- ("+2i" (make-rectangular 0 2) "2i" "+2i" "0+2i")
- ("-2i" (make-rectangular 0 -2) "-2i" "0-2i")
- ;; Decimal-notation complex numbers (rectangular notation)
- ("1.0+2i" (make-rectangular 1.0 2) "1.0+2.0i" "1.0+2i" "1.+2i" "1.+2.i")
- ("1+2.0i" (make-rectangular 1 2.0) "1.0+2.0i" "1+2.0i" "1.+2.i" "1+2.i")
- ("1e2+1.0i" (make-rectangular 100.0 1.0) "100.0+1.0i" "100.+1.i")
- ("1s2+1.0i" (make-rectangular 100.0 1.0) "100.0+1.0i" "100.+1.i")
- ("1.0+1e2i" (make-rectangular 1.0 100.0) "1.0+100.0i" "1.+100.i")
- ("1.0+1s2i" (make-rectangular 1.0 100.0) "1.0+100.0i" "1.+100.i")
- ;; Fractional complex numbers (rectangular notation)
- ("1/2+3/4i" (make-rectangular (/ 1 2) (/ 3 4)))
- ;; Mixed fractional/decimal notation complex numbers (rectangular notation)
- ("0.5+3/4i" (make-rectangular 0.5 (/ 3 4))
+;; Simple
+(test-numeric-syntax "1" 1)
+(test-numeric-syntax "+1" 1 "1")
+(test-numeric-syntax "-1" -1)
+(test-numeric-syntax "#i1" 1.0 "1.0" "1.")
+(test-numeric-syntax "#I1" 1.0 "1.0" "1.")
+(test-numeric-syntax "#i-1" -1.0 "-1.0" "-1.")
+;; Decimal
+(test-numeric-syntax "1.0" 1.0 "1.0" "1.")
+(test-numeric-syntax "1." 1.0 "1.0" "1.")
+(test-numeric-syntax ".1" 0.1 "0.1" "100.0e-3")
+(test-numeric-syntax "-.1" -0.1 "-0.1" "-100.0e-3")
+;; Some Schemes don't allow negative zero. This is okay with the standard
+(test-numeric-syntax "-.0" -0.0 "-0." "-0.0" "0.0" "0." ".0")
+(test-numeric-syntax "-0." -0.0 "-.0" "-0.0" "0.0" "0." ".0")
+(test-numeric-syntax "#i1.0" 1.0 "1.0" "1.")
+(test-numeric-syntax "#e1.0" 1 "1")
+(test-numeric-syntax "#e-.0" 0 "0")
+(test-numeric-syntax "#e-0." 0 "0")
+;; Decimal notation with suffix
+(test-numeric-syntax "1e2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1E2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1s2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1S2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1f2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1F2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1d2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1D2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1l2" 100.0 "100.0" "100.")
+(test-numeric-syntax "1L2" 100.0 "100.0" "100.")
+;; NaN, Inf
+(test-numeric-syntax "+nan.0" +nan.0 "+nan.0" "+NaN.0")
+(test-numeric-syntax "+NAN.0" +nan.0 "+nan.0" "+NaN.0")
+(test-numeric-syntax "+inf.0" +inf.0 "+inf.0" "+Inf.0")
+(test-numeric-syntax "+InF.0" +inf.0 "+inf.0" "+Inf.0")
+(test-numeric-syntax "-inf.0" -inf.0 "-inf.0" "-Inf.0")
+(test-numeric-syntax "-iNF.0" -inf.0 "-inf.0" "-Inf.0")
+(test-numeric-syntax "#i+nan.0" +nan.0 "+nan.0" "+NaN.0")
+(test-numeric-syntax "#i+inf.0" +inf.0 "+inf.0" "+Inf.0")
+(test-numeric-syntax "#i-inf.0" -inf.0 "-inf.0" "-Inf.0")
+;; Exact ratios
+(test-numeric-syntax "1/2" (/ 1 2))
+(test-numeric-syntax "#e1/2" (/ 1 2) "1/2")
+(test-numeric-syntax "10/2" 5 "5")
+(test-numeric-syntax "-1/2" (- (/ 1 2)))
+(test-numeric-syntax "0/10" 0 "0")
+(test-numeric-syntax "#e0/10" 0 "0")
+(test-numeric-syntax "#i3/2" (/ 3.0 2.0) "1.5")
+;; Exact complex
+(test-numeric-syntax "1+2i" (make-rectangular 1 2))
+(test-numeric-syntax "1+2I" (make-rectangular 1 2) "1+2i")
+(test-numeric-syntax "1-2i" (make-rectangular 1 -2))
+(test-numeric-syntax "-1+2i" (make-rectangular -1 2))
+(test-numeric-syntax "-1-2i" (make-rectangular -1 -2))
+(test-numeric-syntax "+i" (make-rectangular 0 1) "+i" "+1i" "0+i" "0+1i")
+(test-numeric-syntax "0+i" (make-rectangular 0 1) "+i" "+1i" "0+i" "0+1i")
+(test-numeric-syntax "0+1i" (make-rectangular 0 1) "+i" "+1i" "0+i" "0+1i")
+(test-numeric-syntax "-i" (make-rectangular 0 -1) "-i" "-1i" "0-i" "0-1i")
+(test-numeric-syntax "0-i" (make-rectangular 0 -1) "-i" "-1i" "0-i" "0-1i")
+(test-numeric-syntax "0-1i" (make-rectangular 0 -1) "-i" "-1i" "0-i" "0-1i")
+(test-numeric-syntax "+2i" (make-rectangular 0 2) "2i" "+2i" "0+2i")
+(test-numeric-syntax "-2i" (make-rectangular 0 -2) "-2i" "0-2i")
+;; Decimal-notation complex numbers (rectangular notation)
+(test-numeric-syntax "1.0+2i" (make-rectangular 1.0 2) "1.0+2.0i" "1.0+2i" "1.+2i" "1.+2.i")
+(test-numeric-syntax "1+2.0i" (make-rectangular 1 2.0) "1.0+2.0i" "1+2.0i" "1.+2.i" "1+2.i")
+(test-numeric-syntax "1e2+1.0i" (make-rectangular 100.0 1.0) "100.0+1.0i" "100.+1.i")
+(test-numeric-syntax "1s2+1.0i" (make-rectangular 100.0 1.0) "100.0+1.0i" "100.+1.i")
+(test-numeric-syntax "1.0+1e2i" (make-rectangular 1.0 100.0) "1.0+100.0i" "1.+100.i")
+(test-numeric-syntax "1.0+1s2i" (make-rectangular 1.0 100.0) "1.0+100.0i" "1.+100.i")
+;; Fractional complex numbers (rectangular notation)
+(test-numeric-syntax "1/2+3/4i" (make-rectangular (/ 1 2) (/ 3 4)))
+;; Mixed fractional/decimal notation complex numbers (rectangular notation)
+(test-numeric-syntax "0.5+3/4i" (make-rectangular 0.5 (/ 3 4))
   "0.5+0.75i" ".5+.75i" "0.5+3/4i" ".5+3/4i" "500.0e-3+750.0e-3i")
- ;; Complex NaN, Inf (rectangular notation)
- ;; ("+nan.0+nan.0i" (make-rectangular the-nan the-nan) "+NaN.0+NaN.0i")
- ("+inf.0+inf.0i" (make-rectangular +inf.0 +inf.0) "+Inf.0+Inf.0i")
- ("-inf.0+inf.0i" (make-rectangular -inf.0 +inf.0) "-Inf.0+Inf.0i")
- ("-inf.0-inf.0i" (make-rectangular -inf.0 -inf.0) "-Inf.0-Inf.0i")
- ("+inf.0-inf.0i" (make-rectangular +inf.0 -inf.0) "+Inf.0-Inf.0i")
- ;; Complex numbers (polar notation)
- ;; Need to account for imprecision in write output.
- ;; ("1@2" -0.416146836547142+0.909297426825682i "-0.416146836547142+0.909297426825682i")
- ;; Base prefixes
- ("#x11" 17 "17")
- ("#X11" 17 "17")
- ("#d11" 11 "11")
- ("#D11" 11 "11")
- ("#o11" 9 "9")
- ("#O11" 9 "9")
- ("#b11" 3 "3")
- ("#B11" 3 "3")
- ("#o7" 7 "7")
- ("#xa" 10 "10")
- ("#xA" 10 "10")
- ("#xf" 15 "15")
- ("#x-10" -16 "-16")
- ("#d-10" -10 "-10")
- ("#o-10" -8 "-8")
- ("#b-10" -2 "-2")
- ;; Combination of prefixes
- ("#e#x10" 16 "16")
- ("#i#x10" 16.0 "16.0" "16.")
- ;; (Attempted) decimal notation with base prefixes
- ("#d1." 1.0 "1.0" "1.")
- ("#d.1" 0.1 "0.1" ".1" "100.0e-3")
- ("#x1e2" 482 "482")
- ("#d1e2" 100.0 "100.0" "100.")
- ;; Fractions with prefixes
- ("#x10/2" 8 "8")
- ("#x11/2" (/ 17 2) "17/2")
- ("#d11/2" (/ 11 2) "11/2")
- ("#o11/2" (/ 9 2) "9/2")
- ("#b11/10" (/ 3 2) "3/2")
- ;; Complex numbers with prefixes
- ;;("#x10+11i" (make-rectangular 16 17) "16+17i")
- ("#d1.0+1.0i" (make-rectangular 1.0 1.0) "1.0+1.0i" "1.+1.i")
- ("#d10+11i" (make-rectangular 10 11) "10+11i")
- ;;("#o10+11i" (make-rectangular 8 9) "8+9i")
- ;;("#b10+11i" (make-rectangular 2 3) "2+3i")
- ;;("#e1.0+1.0i" (make-rectangular 1 1) "1+1i" "1+i")
- ;;("#i1.0+1.0i" (make-rectangular 1.0 1.0) "1.0+1.0i" "1.+1.i")
- )
+;; Complex NaN, Inf (rectangular notation)
+;;(test-numeric-syntax "+nan.0+nan.0i" (make-rectangular the-nan the-nan) "+NaN.0+NaN.0i") 
+(test-numeric-syntax "+inf.0+inf.0i" (make-rectangular +inf.0 +inf.0) "+Inf.0+Inf.0i")
+(test-numeric-syntax "-inf.0+inf.0i" (make-rectangular -inf.0 +inf.0) "-Inf.0+Inf.0i")
+(test-numeric-syntax "-inf.0-inf.0i" (make-rectangular -inf.0 -inf.0) "-Inf.0-Inf.0i")
+(test-numeric-syntax "+inf.0-inf.0i" (make-rectangular +inf.0 -inf.0) "+Inf.0-Inf.0i")
+;; Complex numbers (polar notation)
+;; Need to account for imprecision in write output.
+;;(test-numeric-syntax "1@2" -0.416146836547142+0.909297426825682i "-0.416146836547142+0.909297426825682i")
+;; Base prefixes
+(test-numeric-syntax "#x11" 17 "17")
+(test-numeric-syntax "#X11" 17 "17")
+(test-numeric-syntax "#d11" 11 "11")
+(test-numeric-syntax "#D11" 11 "11")
+(test-numeric-syntax "#o11" 9 "9")
+(test-numeric-syntax "#O11" 9 "9")
+(test-numeric-syntax "#b11" 3 "3")
+(test-numeric-syntax "#B11" 3 "3")
+(test-numeric-syntax "#o7" 7 "7")
+(test-numeric-syntax "#xa" 10 "10")
+(test-numeric-syntax "#xA" 10 "10")
+(test-numeric-syntax "#xf" 15 "15")
+(test-numeric-syntax "#x-10" -16 "-16")
+(test-numeric-syntax "#d-10" -10 "-10")
+(test-numeric-syntax "#o-10" -8 "-8")
+(test-numeric-syntax "#b-10" -2 "-2")
+;; Combination of prefixes
+(test-numeric-syntax "#e#x10" 16 "16")
+(test-numeric-syntax "#i#x10" 16.0 "16.0" "16.")
+;; (Attempted) decimal notation with base prefixes
+(test-numeric-syntax "#d1." 1.0 "1.0" "1.")
+(test-numeric-syntax "#d.1" 0.1 "0.1" ".1" "100.0e-3")
+(test-numeric-syntax "#x1e2" 482 "482")
+(test-numeric-syntax "#d1e2" 100.0 "100.0" "100.")
+;; Fractions with prefixes
+(test-numeric-syntax "#x10/2" 8 "8")
+(test-numeric-syntax "#x11/2" (/ 17 2) "17/2")
+(test-numeric-syntax "#d11/2" (/ 11 2) "11/2")
+(test-numeric-syntax "#o11/2" (/ 9 2) "9/2")
+(test-numeric-syntax "#b11/10" (/ 3 2) "3/2")
+;; Complex numbers with prefixes
+;;(test-numeric-syntax "#x10+11i" (make-rectangular 16 17) "16+17i")
+(test-numeric-syntax "#d1.0+1.0i" (make-rectangular 1.0 1.0) "1.0+1.0i" "1.+1.i")
+(test-numeric-syntax "#d10+11i" (make-rectangular 10 11) "10+11i")
+;;(test-numeric-syntax "#o10+11i" (make-rectangular 8 9) "8+9i")
+;;(test-numeric-syntax "#b10+11i" (make-rectangular 2 3) "2+3i")
+;;(test-numeric-syntax "#e1.0+1.0i" (make-rectangular 1 1) "1+1i" "1+i")
+;;(test-numeric-syntax "#i1.0+1.0i" (make-rectangular 1.0 1.0) "1.0+1.0i" "1.+1.i")
 
 (test-end)
 
_______________________________________________
Scheme-reports mailing list
Scheme-reports@x
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports