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

Last change on this file since 38793 was 38793, checked in by Kon Lovett, 11 months ago

test reflow

File size: 4.0 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;NOTE must be proper list 4 `list->array', otherwise cons ok
22(define (make-point n) (let ((i (/ n 6))) `(,i ,(sin i))))
23
24#; ;test dep
25(define (unfold/count f n)
26  (import (srfi 1))
27  (unfold-right zero? f sub1 n) )
28
29#; ;test dep
30(define (make-points n) (unfold/count make-point n))
31
32(define (make-points n)
33  (if (zero? n)
34    '()
35    (cons (make-point n) (make-points (sub1 n)))) )
36
37(print)
38(print "*** Plot w/ dimensions 4x5+2 (minimum safe @ minimum left-margin)")
39(print)
40
41;Fail - infinite loop forall H, W : H < 4, W < (5 + LM)
42(time
43  (parameterize (
44    (plot-left-margin #f)
45    (plot-dimensions `(4 ,(+ 5 (plot-left-margin)))) )
46    (plot (list->array 2 '#() (make-points 40)) "x" "Sin(x)") ) )
47
48(print)
49
50(time
51  (let ((hlabel "x") (vlabel "Sin(x)"))
52    (parameterize (
53      (plot-left-margin (+ 2 (max (string-length hlabel) (string-length vlabel))))
54      (plot-dimensions `(24 ,(+ 54 (plot-left-margin)))) )
55      (plot (list->array 2 '#() (make-points 40)) hlabel vlabel) ) ) )
56
57;;;"Tests" (examples) from http://people.csail.mit.edu/jaffer/slib_5.html#SEC125
58
59;;
60
61(print)
62(print "*** Plot w/ dimensions 20x55")
63(print)
64
65;ex 1
66(time
67  (parameterize ((plot-dimensions '(20 55)))
68    (plot (make-points 40) "x" "Sin(x)") ) )
69
70;checkout the, undocumented, histogram? switch
71(print)
72(print "*** Histogram w/ dimensions 20x55 (NOTE undocumented by SLIB site)")
73(print)
74
75(time
76  (parameterize ((plot-dimensions '(20 55)))
77    (plot (make-points 40) "x" "Sin(x)" #t) ) )
78
79;default labels
80(print)
81(print "*** Plot w/ default labels")
82(print)
83
84(time
85  (parameterize (
86    (plot-left-margin #f)
87    (plot-dimensions '(20 55)) )
88    (plot (make-points 40)) ) )
89
90;;
91
92;mathh
93(define-constant PI                                     3.1415926535897932384626433832795028841972)   ; pi
94(define pi        PI)         ; pi
95
96(print)
97(print "*** Plot w/ dimensions <console> (#f)")
98(print)
99
100;test framing
101;ex 2
102(time
103  (parameterize ((plot-dimensions #f))
104    (plot sin 0 (* 2 pi)) ) )
105
106(print)
107(print "*** Plot w/ default range")
108(print)
109
110(time
111  (parameterize (
112    (plot-left-margin #f)
113    (plot-dimensions '(20 55)) )
114    (plot sin) ) )
115
116;;
117
118;srfi-27
119(define-type random-f64-function  (-> float))
120;fortran "real"
121(define-type random-real-function random-f64-function)
122
123;; Knuth's "The Art of Computer Programming", Vol. II, 2nd ed.,
124;; Algorithm P of Section 3.4.1.C.
125;
126;silly experiment
127(: *make-random-normals (number number random-real-function --> random-real-function))
128;
129(define (*make-random-normals mu sigma randoms)
130  (let ((next #f))
131    (lambda ()
132      (if next
133        (let ((result next))
134          (set! next #f)
135          (+ mu (* sigma result)))
136        (let loop ()
137          (let (
138            (v1 (- (* 2 (inexact->exact (randoms))) 1))
139            (v2 (- (* 2 (inexact->exact (randoms))) 1)) )
140            (let (
141              (s (+ (* v1 v1) (* v2 v2))) )
142              ;
143              (if (<= 1 s)
144                (loop)
145                (let (
146                  (scale (inexact->exact (sqrt (/ (* -2 (inexact->exact (log s))) s)))) )
147                  (set! next (* scale v2))
148                  (+ mu (* sigma scale v1)) ) ) ) ) ) ) ) ) )
149
150;SLIB wrapper
151(define random:normal
152  (let (
153    (random-normal
154      (let ()
155        (import (only (chicken random) pseudo-random-real))
156        (*make-random-normals 0 1 pseudo-random-real))) )
157    (lambda ()
158      (random-normal) ) ) )
159
160(define (make-normals n bias)
161  (do ((idx n (+ -1 idx))
162       (lst '() (cons (* bias (random:normal)) lst)))
163      ((negative? idx) lst)))
164
165(print)
166(print "*** Histograph (Normals) w/ dimensions 20x55 & left-margin <minimum> (#f)")
167(print)
168
169;test framing
170;ex 3
171(time
172  (parameterize (
173    (plot-left-margin #f)
174    (plot-dimensions '(20 55)) )
175    (histograph (make-normals 99 .02) "normal") ) )
176
177;;
178
179(test-end "Charplot (SLIB)")
180
181(test-exit)
Note: See TracBrowser for help on using the repository browser.