File: numerical-test-env.thb

package info (click to toggle)
theme-d 7.2.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,036 kB
  • sloc: lisp: 9,625; sh: 5,321; makefile: 715; ansic: 477
file content (71 lines) | stat: -rw-r--r-- 2,047 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
;; -*-theme-d-*-

;; Copyright (C) 2014  Tommi Höynälänmaa
;; Distributed under GNU General Public License version 3,
;; see file doc/GPL-3.

(define-body (tests numerical-test-env)

  (import (standard-library console-io))

  (define-simple-method approx-equal?
      (((nr1 <number>) (nr2 <number>)) <boolean> pure)
    (< (abs (- nr1 nr2)) 1e-12))

  (define-simple-virtual-method my-equal?
      (((nr1 <number>) (nr2 <number>)) <boolean> pure)
    #f)

  (define-simple-virtual-method my-equal?
      (((i1 <integer>) (i2 <integer>)) <boolean> pure)
    (equal? i1 i2))

  (define-simple-virtual-method my-equal?
      (((rat1 <rational>) (rat2 <rational>)) <boolean> pure)
    (equal? rat1 rat2))

  (define-simple-virtual-method my-equal?
      (((r1 <real>) (r2 <real>)) <boolean> pure)
    (cond
     ((or (nan? r1) (nan? r2))
      (and (nan? r1) (nan? r2)))      
     ((or (infinite? r1) (infinite? r2))
      (equal? r1 r2))
     (else
      (approx-equal? r1 r2))))

  (define-simple-virtual-method my-equal?
      (((cx1 <complex>) (cx2 <complex>)) <boolean> pure)
    (approx-equal? cx1 cx2))

  (define-simple-method do-report-test
      (((x-expr <object>) (nr-result <number>) (nr-correct <number>))
       <none> nonpure)
    (console-write x-expr)
    (console-display " = ")
    (console-write nr-result)
    (console-display "  ")
    (if (my-equal? nr-result nr-correct)
	(console-display "OK")
	(console-display "FAIL"))
    (console-newline))

  (define-simple-method do-report-boolean-test
      (((x-expr <object>) (b-result <boolean>) (b-correct <boolean>))
       <none> nonpure)
    (console-write x-expr)
    (console-display " = ")
    (console-write b-result)
    (console-display "  ")
    (if (equal? b-result b-correct)
	(console-display "OK")
	(console-display "FAIL"))
    (console-newline))

  (define-simple-method do-report-result (((x-expr <object>) (x-result <object>))
					<none> nonpure)
    (console-write x-expr)
    (console-display " = ")
    (console-write x-result)
    (console-newline)))