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

Last change on this file since 38667 was 38667, checked in by Kon Lovett, 5 months ago

add (not unreasonable) optional arguments for `plot', add tests

File size: 3.8 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;default labels
67(print)
68(print "*** Plot w/ default labels")
69(print)
70
71(time
72  (parameterize (
73    (plot-left-margin #f)
74    (plot-dimensions '(20 55)) )
75    (plot (make-points 40)) ) )
76
77;;
78
79;mathh
80(define-constant PI                                     3.1415926535897932384626433832795028841972)   ; pi
81(define pi        PI)         ; pi
82
83(print)
84(print "*** Plot w/ dimensions <console> (#f)")
85(print)
86
87;test framing
88;ex 2
89(time
90  (parameterize ((plot-dimensions #f))
91    (plot sin 0 (* 2 pi)) ) )
92
93(print)
94(print "*** Plot w/ default range")
95(print)
96
97(time
98  (parameterize (
99    (plot-left-margin #f)
100    (plot-dimensions '(20 55)) )
101    (plot sin) ) )
102
103;;
104
105;srfi-27
106(define-type random-f64-function  (-> float))
107;fortran "real"
108(define-type random-real-function random-f64-function)
109
110;; Knuth's "The Art of Computer Programming", Vol. II, 2nd ed.,
111;; Algorithm P of Section 3.4.1.C.
112;
113;silly experiment
114(: *make-random-normals (number number random-real-function --> random-real-function))
115;
116(define (*make-random-normals mu sigma randoms)
117  (let ((next #f))
118    (lambda ()
119      (if next
120        (let ((result next))
121          (set! next #f)
122          (+ mu (* sigma result)))
123        (let loop ()
124          (let (
125            (v1 (- (* 2 (inexact->exact (randoms))) 1))
126            (v2 (- (* 2 (inexact->exact (randoms))) 1)) )
127            (let (
128              (s (+ (* v1 v1) (* v2 v2))) )
129              ;
130              (if (<= 1 s)
131                (loop)
132                (let (
133                  (scale (inexact->exact (sqrt (/ (* -2 (inexact->exact (log s))) s)))) )
134                  (set! next (* scale v2))
135                  (+ mu (* sigma scale v1)) ) ) ) ) ) ) ) ) )
136
137;SLIB wrapper
138(define random:normal
139  (let (
140    (random-normal
141      (let ()
142        (import (only (chicken random) pseudo-random-real))
143        (*make-random-normals 0 1 pseudo-random-real))) )
144    (lambda ()
145      (random-normal) ) ) )
146
147(define (make-normals n bias)
148  (do ((idx n (+ -1 idx))
149       (lst '() (cons (* bias (random:normal)) lst)))
150      ((negative? idx) lst)))
151
152(print)
153(print "*** Histograph (Normals) w/ dimensions 20x55 & left-margin <minimum> (#f)")
154(print)
155
156;test framing
157;ex 3
158(time
159  (parameterize (
160    (plot-left-margin #f)
161    (plot-dimensions '(20 55)) )
162    (histograph (make-normals 99 .02) "normal") ) )
163
164;;
165
166(test-end "Charplot (SLIB)")
167
168(test-exit)
Note: See TracBrowser for help on using the repository browser.