source: project/release/5/slib-charplot/trunk/tests/slib-charplot-test.scm @ 38526

Last change on this file since 38526 was 38526, checked in by Kon Lovett, 6 months ago

*-test runner, user parameterize

File size: 3.3 KB
Line 
1;;;; slib-charplot-test.scm
2;;;; Kon Lovett, Mar '20
3
4(import test)
5
6(test-begin "Charplot (SLIB)")
7
8;;;
9
10(import slib-charplot)
11
12(import (chicken base))
13(import (chicken type))
14(import (srfi 63))
15
16;;
17
18#; ;Pass - Argument #1 to procedure `plot' has an invalid type:...
19(plot "FAILS" "" "")
20
21(define (make-points n)
22  (if (zero? n)
23    '()
24    (cons (list (/ n 6) (sin (/ n 6))) (make-points (sub1 n)))))
25
26(print)
27(print "*** Plot w/ dimensions 4x5+2 (minimum safe @ minimum left-margin)")
28(print)
29
30;Fail - infinite loop forall H, W : H < 4, W < (5 + LM)
31(time
32  (parameterize ((plot-left-margin #f))
33    (parameterize ((plot-dimensions `(4 ,(+ 5 (plot-left-margin)))))
34      (plot (list->array 2 '#() (make-points 40)) "x" "Sin(x)") ) ) )
35
36(print)
37
38(time
39  (let ((hlabel "x") (vlabel "Sin(x)"))
40    (parameterize ((plot-left-margin (+ 2 (max (string-length hlabel) (string-length vlabel)))))
41      (parameterize ((plot-dimensions `(24 ,(+ 54 (plot-left-margin)))))
42        (plot (list->array 2 '#() (make-points 40)) hlabel vlabel) ) ) ) )
43
44;;;"Tests" (examples) from http://people.csail.mit.edu/jaffer/slib_5.html#SEC125
45
46;;
47
48(print)
49(print "*** Plot w/ dimensions 20x55")
50(print)
51
52;ex 1
53(time
54  (parameterize ((plot-dimensions '(20 55)))
55    (plot (make-points 40) "x" "Sin(x)") ) )
56
57;checkout the, undocumented, histogram? switch
58(print)
59(print "*** Histogram w/ dimensions 20x55 (NOTE undocumented by SLIB site)")
60(print)
61
62(time
63  (parameterize ((plot-dimensions '(20 55)))
64    (plot (make-points 40) "x" "Sin(x)" #t) ) )
65
66;;
67
68;mathh
69(define-constant PI                                     3.1415926535897932384626433832795028841972)   ; pi
70(define pi        PI)         ; pi
71
72(print)
73(print "*** Plot w/ dimensions <console> (#f)")
74(print)
75
76;test framing
77;ex 2
78(time
79  (parameterize ((plot-dimensions #f))
80    (plot sin 0 (* 2 pi)) ) )
81
82;;
83
84;srfi-27
85(define-type random-f64-function  (-> float))
86
87;fortran "real"
88(define-type random-real-function random-f64-function)
89
90;; Knuth's "The Art of Computer Programming", Vol. II, 2nd ed.,
91;; Algorithm P of Section 3.4.1.C.
92(: *make-random-normals (float float random-real-function --> random-real-function))
93;
94(define (*make-random-normals mu sigma randoms)
95  (let ((next #f))
96    (lambda ()
97      (if next
98        (let ((result next))
99          (set! next #f)
100          (+ mu (* sigma result)))
101        (let loop ()
102          (let* (
103            (v1 (- (* 2.0 (randoms)) 1.0) )
104            (v2 (- (* 2.0 (randoms)) 1.0) )
105            (s (+ (* v1 v1) (* v2 v2)) ) )
106            ;
107            (if (<= 1.0 s)
108              (loop)
109              (let ((scale (sqrt (/ (* -2.0 (log s)) s))))
110                (set! next (* scale v2))
111                (+ mu (* sigma scale v1))))))))) )
112
113;SLIB wrapper
114(define random:normal
115  (let (
116    (random-normal
117      (let ()
118        (import (only (chicken random) pseudo-random-real))
119        (*make-random-normals 0.0 1.0 pseudo-random-real))) )
120    (lambda ()
121      (random-normal) ) ) )
122
123(define (make-normals n bias)
124  (do ((idx n (+ -1 idx))
125       (lst '() (cons (* bias (random:normal)) lst)))
126      ((negative? idx) lst)))
127
128(print)
129(print "*** Histograph (Random) w/ dimensions 20x55 & left-margin <minimum> (#f)")
130(print)
131
132;test framing
133;ex 3
134(time
135  (parameterize (
136    (plot-left-margin #f)
137    (plot-dimensions '(20 55)) )
138    (histograph (make-normals 99 .02) "normal") ) )
139
140;;
141
142(test-end "Charplot (SLIB)")
143
144(test-exit)
Note: See TracBrowser for help on using the repository browser.