From ed0974616bce76622d66da55f7c8ba3306757d55 Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Fri, 9 May 2008 16:12:30 +0000 Subject: [PATCH] plot tests adjusted and passed svn: r9769 --- collects/plot/demos/demo-1.ss | 98 ++++++++-------------- collects/plot/demos/demo-10.ss | 1 + collects/plot/demos/demo-2.ss | 4 +- collects/plot/demos/demo-3.ss | 3 +- collects/plot/demos/demo-4.ss | 6 +- collects/plot/demos/demo-5.ss | 6 +- collects/plot/demos/demo-6.ss | 5 +- collects/plot/demos/demo-7.ss | 7 +- collects/plot/demos/demo-8.ss | 16 ++-- collects/plot/demos/fit-demo-1.ss | 7 +- collects/plot/demos/fit-demo-2.ss | 106 +++++++++++------------ collects/plot/main.ss | 28 ++++--- collects/plot/view.ss | 17 ++-- collects/tests/plot/3d-mesh.png | Bin 8731 -> 10474 bytes collects/tests/plot/contours.png | Bin 3817 -> 4606 bytes collects/tests/plot/dashed-line.png | Bin 2216 -> 2547 bytes collects/tests/plot/mix.png | Bin 7011 -> 8505 bytes collects/tests/plot/red-identity.png | Bin 2572 -> 2984 bytes collects/tests/plot/run-tests.ss | 120 +++++++++++---------------- collects/tests/plot/shade.png | Bin 2943 -> 3570 bytes collects/tests/plot/vector-field.png | Bin 5639 -> 7245 bytes 21 files changed, 188 insertions(+), 236 deletions(-) diff --git a/collects/plot/demos/demo-1.ss b/collects/plot/demos/demo-1.ss index a23d4ece0d..438a284577 100644 --- a/collects/plot/demos/demo-1.ss +++ b/collects/plot/demos/demo-1.ss @@ -61,12 +61,12 @@ 1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0" 1 0 15 #"test-case-box%\0" 2 0 1 6 #"wxloc\0" -00000000000 1 75 0 1 #"\0" +00000000000 1 77 0 1 #"\0" 0 75 1 #"\0" 0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9 #"Standard\0" 0 75 11 #" Monospace\0" -0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 +0 14 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24 @@ -198,7 +198,22 @@ 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 8 24 #"drscheme:text:ports err\0" 0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 0 1 +1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 4 1 +#"\0" +0 71 1 #"\0" +1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 4 1 +#"\0" +0 -1 1 #"\0" +1 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 255 0 0 0 -1 -1 4 1 +#"\0" +0 71 1 #"\0" +1 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 255 0 0 0 -1 -1 4 1 +#"\0" +0 71 1 #"\0" +1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 100 0 0 0 0 -1 -1 0 1 +#"\0" +0 75 11 #" Monospace\0" +0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 1 #"\0" 0 75 1 #"\0" 0 12 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 1 @@ -270,34 +285,16 @@ 1 0 -1 -1 94 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 0 0 0 0 0 -1 -1 4 1 -#"\0" -0 71 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 4 1 +1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 0 0 0 0 0 -1 -1 0 1 #"\0" 0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 255 0 0 0 -1 -1 4 1 -#"\0" -0 71 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 255 0 0 0 -1 -1 4 1 -#"\0" -0 71 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 100 0 0 0 0 -1 -1 -00000000002 0 00000000000 3 00000000000 159 0 22 3 1 #"(" -0 0 14 3 7 #"require" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"lib" -0 0 4 3 1 #" " -0 0 19 3 9 #"\"plot.ss\"" -0 0 4 3 1 #" " -0 0 19 3 6 #"\"plot\"" -0 0 22 3 2 #"))" +1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 0 0 0 0 0 -1 -1 +00000000002 0 00000000000 3 00000000000 125 0 26 3 12 #"#lang scheme" 0 0 4 29 1 #"\n" 0 0 22 3 1 #"(" 0 0 14 3 7 #"require" 0 0 4 3 1 #" " -0 0 14 3 9 #"mzlib/etc" +0 0 14 3 4 #"plot" 0 0 22 3 1 #")" 0 0 4 29 1 #"\n" 0 0 4 29 1 #"\n" @@ -332,6 +329,9 @@ 0 0 14 3 1 #"x" 0 0 22 3 3 #")))" 0 0 4 3 1 #" " +0 0 17 3 25 #"; a random list of points" +0 0 4 29 1 #"\n" +0 0 4 3 7 #" " 0 0 22 3 1 #"(" 0 0 14 3 10 #"build-list" 0 0 4 3 1 #" " @@ -349,43 +349,18 @@ 0 0 4 3 1 #" " 0 0 14 3 1 #"x" 0 0 22 3 5 #")))))" -0 0 4 3 1 #" " -0 0 17 3 1 #";" -0 0 17 3 1 #" " -0 0 17 3 1 #"a" -0 0 17 3 1 #" " -0 0 17 3 1 #"r" -0 0 17 3 1 #"a" -0 0 17 3 1 #"n" -0 0 17 3 1 #"d" -0 0 17 3 1 #"o" -0 0 17 3 1 #"m" -0 0 17 3 1 #" " -0 0 17 3 1 #"l" -0 0 17 3 1 #"i" -0 0 17 3 1 #"s" -0 0 17 3 1 #"t" -0 0 17 3 1 #" " -0 0 17 3 1 #"o" -0 0 17 3 1 #"f" -0 0 17 3 1 #" " -0 0 17 3 1 #"p" -0 0 17 3 1 #"o" -0 0 17 3 1 #"i" -0 0 17 3 3 #"nts" 0 0 4 29 1 #"\n" 0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 5 #"x-max" +0 0 22 3 1 #"#" +0 0 22 3 6 #":x-max" +0 0 4 3 1 #" " +0 0 20 3 2 #"30" +0 0 4 3 1 #" " +0 0 22 3 1 #"#" +0 0 22 3 6 #":y-max" 0 0 4 3 1 #" " 0 0 20 3 2 #"30" 0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 5 #"y-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"30" -0 0 22 3 2 #"))" 0 0 4 29 1 #"\n" 0 0 4 29 1 #"\n" 0 0 17 3 1 #";" @@ -409,8 +384,7 @@ 0 0 17 3 1 #"n" 0 0 17 3 1 #"g" 0 0 17 3 1 #" " -0 0 17 3 1 #"l" -0 0 17 3 1 #"i" +0 0 17 3 2 #"li" 0 0 17 3 1 #"k" 0 0 17 3 1 #"e" 0 0 17 3 1 #" " @@ -436,11 +410,9 @@ 0 0 17 3 1 #"r" 0 0 17 3 1 #"e" 0 0 17 3 1 #" " -0 0 17 3 1 #"r" -0 0 17 3 1 #"a" -0 0 17 3 4 #"ndom" -0 0 4 29 1 #"\n" +0 0 17 3 6 #"random" 0 0 4 29 1 #"\n" +0 0 17 3 1 #";" 0 3 00000000037 4 1 #"\0" 2 -1 -1 0 0 0 00000000013 500 ( diff --git a/collects/plot/demos/demo-10.ss b/collects/plot/demos/demo-10.ss index 361603f583..cfc52e1477 100644 --- a/collects/plot/demos/demo-10.ss +++ b/collects/plot/demos/demo-10.ss @@ -1,3 +1,4 @@ +#lang scheme (require plot) (require mzlib/class plot/plot-extend) diff --git a/collects/plot/demos/demo-2.ss b/collects/plot/demos/demo-2.ss index 04df580927..8fb82521d9 100644 --- a/collects/plot/demos/demo-2.ss +++ b/collects/plot/demos/demo-2.ss @@ -1,4 +1,4 @@ +#lang scheme (require plot) -(require mzlib/etc) -(plot (line identity (color 'red))) +(plot (line (lambda (x) x) #:color 'red)) diff --git a/collects/plot/demos/demo-3.ss b/collects/plot/demos/demo-3.ss index dd095c9e14..130080fe9f 100644 --- a/collects/plot/demos/demo-3.ss +++ b/collects/plot/demos/demo-3.ss @@ -1,3 +1,4 @@ +#lang scheme (require plot) -(plot (line (lambda (x) (sin x)) (color 'red))) +(plot (line sin #:color 'red)) diff --git a/collects/plot/demos/demo-4.ss b/collects/plot/demos/demo-4.ss index e97fede885..942d036319 100644 --- a/collects/plot/demos/demo-4.ss +++ b/collects/plot/demos/demo-4.ss @@ -1,5 +1,5 @@ +#lang scheme (require plot) -(plot - (vector-field (gradient (lambda (x y) (* (sin x) (cos y)))) (samples 25)) - (title "gradient field of F(x,y) = sin(x) * sin(y)")) +(plot (vector-field (gradient (lambda (x y) (* (sin x) (cos y)))) #:samples 25) + #:title "gradient field of F(x,y) = sin(x) * sin(y)") diff --git a/collects/plot/demos/demo-5.ss b/collects/plot/demos/demo-5.ss index 135cba0513..973c03327e 100644 --- a/collects/plot/demos/demo-5.ss +++ b/collects/plot/demos/demo-5.ss @@ -1,7 +1,7 @@ +#lang scheme (require plot) - (define (trig x y) (* (sin x) (sin y))) (plot (shade trig) - (x-min -1.5) (x-max 1.5) (y-min -1.5) (y-max 1.5) - (title "shdade of F(x,y) = sin(x) * sin(y)")) + #:x-min -1.5 #:x-max 1.5 #:y-min -1.5 #:y-max 1.5 + #:title "shdade of F(x,y) = sin(x) * sin(y)") diff --git a/collects/plot/demos/demo-6.ss b/collects/plot/demos/demo-6.ss index d6846ffcb3..9153c84880 100644 --- a/collects/plot/demos/demo-6.ss +++ b/collects/plot/demos/demo-6.ss @@ -1,7 +1,8 @@ +#lang scheme (require plot) (define (trig x y) (* (sin x) (sin y))) (plot (contour trig) - (x-min -1.5) (x-max 1.5) (y-min -1.5) (y-max 1.5) - (title "contours of F(x,y) = sin(x) * sin(y)")) + #:x-min -1.5 #:x-max 1.5 #:y-min -1.5 #:y-max 1.5 + #:title "contours of F(x,y) = sin(x) * sin(y)") diff --git a/collects/plot/demos/demo-7.ss b/collects/plot/demos/demo-7.ss index 200910cd35..49d1623022 100644 --- a/collects/plot/demos/demo-7.ss +++ b/collects/plot/demos/demo-7.ss @@ -1,7 +1,8 @@ +#lang scheme (require plot) (define (trig x y) (* (sin x) (sin y))) -(plot (vector-field (gradient trig) '((samples 25))) - (x-min -1.5) (x-max 1.5) (y-min -1.5) (y-max 1.5) - (title "gradient field of F(x,y) = sin(x) * sin(y)")) +(plot (vector-field (gradient trig) #:samples 25) + #:x-min -1.5 #:x-max 1.5 #:y-min -1.5 #:y-max 1.5 + #:title "gradient field of F(x,y) = sin(x) * sin(y)") diff --git a/collects/plot/demos/demo-8.ss b/collects/plot/demos/demo-8.ss index 120fa236e5..d5b01982ed 100644 --- a/collects/plot/demos/demo-8.ss +++ b/collects/plot/demos/demo-8.ss @@ -1,14 +1,14 @@ +#lang scheme (require plot) (define (trig x y) (* (sin x) (sin y))) - -(plot (mix - (shade trig) - (contour trig) - (vector-field (gradient trig ) (samples 25))) - (x-min -1.5) (x-max 1.5) (y-min -1.5) (y-max 1.5) - (title "gradient field +shdade + contours of F(x,y) = sin(x) * sin(y)")) +(plot (mix (shade trig) + (contour trig) + (vector-field (gradient trig) #:samples 25)) + #:x-min -1.5 #:x-max 1.5 #:y-min -1.5 #:y-max 1.5 + #:title "gradient field +shdade + contours of F(x,y) = sin(x) * sin(y)") (plot3d (mesh3d trig) - (x-min -3.5) (x-max 3.5) (y-min -3.5) (y-max 3.5) (z-min -1.0) (z-max 1.5) (bgcolor '(0 0 0)) (fgcolor '(255 0 0))) + #:x-min -3.5 #:x-max 3.5 #:y-min -3.5 #:y-max 3.5 #:z-min -1.0 #:z-max 1.5 + #:bgcolor '(0 0 0) #:fgcolor '(255 0 0)) diff --git a/collects/plot/demos/fit-demo-1.ss b/collects/plot/demos/fit-demo-1.ss index 01a947fd5a..7462fe27f0 100644 --- a/collects/plot/demos/fit-demo-1.ss +++ b/collects/plot/demos/fit-demo-1.ss @@ -1,3 +1,4 @@ +#lang scheme (require plot) (define x-vals (build-list 15 (lambda (x) x) )) @@ -12,12 +13,12 @@ (define params (fit gues-fun - ((a 1) (b 1)) + '((a 1) (b 1)) (map vector x-vals z-vals errors))) (plot (mix (points (map vector x-vals z-vals)) (line (lambda (x) (apply gues-fun x (fit-result-final-params params))))) - (x-min -1) (x-max 20) - (y-min -1) (y-max 10)) + #:x-min -1 #:x-max 20 + #:y-min -1 #:y-max 10) diff --git a/collects/plot/demos/fit-demo-2.ss b/collects/plot/demos/fit-demo-2.ss index a00cbeea0d..f09802ce1c 100644 --- a/collects/plot/demos/fit-demo-2.ss +++ b/collects/plot/demos/fit-demo-2.ss @@ -1,5 +1,6 @@ -;; This is data from the Cavendish experiment +#lang scheme +;; This is data from the Cavendish experiment (define raw-data '((0.0 -14.7 3.6) (1.0 8.6 3.6) @@ -7,39 +8,39 @@ (3.1 46.7 3.4) (4.2 47.4 3.5) (5.2 36.5 3.4) - (6.2 37.0 10.3) - (7.2 5.1 3.4) - (8.2 -11.2 3.4) - (9.1 -22.4 3.5) - (10.0 -35.5 3.6) - (11.0 -33.6 3.9) - (12.0 -21.1 3.9) - (12.9 -15.0 4.2) - (13.8 -1.6 2.7) - (14.9 19.5 3.2) - (15.9 27.5 2.8) - (17.0 32.6 3.5) - (17.9 27.5 2.7) - (18.9 20.2 3.3) - (20.0 13.8 3.4) - (21.0 -1.3 4.2) - (22.0 -24.5 6.7) - (23.0 -25.0 3.3) - (24.0 -25.0 3.1) - (25.0 -20.2 3.6) - (26.0 -9.9 3.2) - (27.0 5.8 3.2) - (28.0 14.7 3.0) - (29.0 21.8 3.5) - (30.0 29.8 2.7) - (31.0 21.4 4.1) - (32.0 24.6 2.7) - (32.9 25.8 12.0) - (33.8 0.6 2.9) - (34.7 -16.6 3.2) - (35.7 -24.0 3.7) - (36.6 -24.6 3.8) - (37.7 -19.8 3.5))) + (6.2 37.0 10.3) + (7.2 5.1 3.4) + (8.2 -11.2 3.4) + (9.1 -22.4 3.5) + (10.0 -35.5 3.6) + (11.0 -33.6 3.9) + (12.0 -21.1 3.9) + (12.9 -15.0 4.2) + (13.8 -1.6 2.7) + (14.9 19.5 3.2) + (15.9 27.5 2.8) + (17.0 32.6 3.5) + (17.9 27.5 2.7) + (18.9 20.2 3.3) + (20.0 13.8 3.4) + (21.0 -1.3 4.2) + (22.0 -24.5 6.7) + (23.0 -25.0 3.3) + (24.0 -25.0 3.1) + (25.0 -20.2 3.6) + (26.0 -9.9 3.2) + (27.0 5.8 3.2) + (28.0 14.7 3.0) + (29.0 21.8 3.5) + (30.0 29.8 2.7) + (31.0 21.4 4.1) + (32.0 24.6 2.7) + (32.9 25.8 12.0) + (33.8 0.6 2.9) + (34.7 -16.6 3.2) + (35.7 -24.0 3.7) + (36.6 -24.6 3.8) + (37.7 -19.8 3.5))) ; first column is time data, second is result, third is error. to parse them out... (require mzlib/math) @@ -55,33 +56,24 @@ (require plot) -(plot (mix (points experemental-data (symbol 'circle)) +(plot (mix (points experemental-data #:sym 'circle) (error-bars experemental-data)) - (x-min 0) (x-max 40) - (y-min -40) (y-max 50) - (width 400) (height 300)) + #:x-min 0 #:x-max 40 + #:y-min -40 #:y-max 50 + #:width 400 #:height 300) -(define - (theta x a tau phi T theta0) - (+ - theta0 - (* a - (exp (/ x tau -1)) - (sin (+ phi (/ (* 2 pi x) T)))))) +(define (theta x a tau phi T theta0) + (+ theta0 + (* a (exp (/ x tau -1)) (sin (+ phi (/ (* 2 pi x) T)))))) (define result - (fit - theta - ((a 40) (tau 15) (phi -0.5) (T 15) (theta0 10)) - experemental-data)) - - -(plot (mix - (points (map vector times vals) (symobol 'square) (color 'black)) - (error-bars experemental-data) - (line (fit-result-function result) (color 'green))) - (x-min -5) (x-max 40) - (y-min -40) (y-max 50)) + (fit theta '((a 40) (tau 15) (phi -0.5) (T 15) (theta0 10)) experemental-data)) + +(plot (mix (points (map vector times vals) #:sym 'square #:color 'black) + (error-bars experemental-data) + (line (fit-result-function result) #:color 'green)) + #:x-min -5 #:x-max 40 + #:y-min -40 #:y-max 50) (fit-result-final-params result) ;(pretty-print result) diff --git a/collects/plot/main.ss b/collects/plot/main.ss index cad6eaf5e9..0652eee6d3 100644 --- a/collects/plot/main.ss +++ b/collects/plot/main.ss @@ -8,7 +8,8 @@ shade surface)) (only-in "plot.ss" mix - derivative gradient make-vec) + derivative gradient make-vec + mesh3d) (only-in "fit.ss" fit-int)) (provide plot @@ -25,7 +26,8 @@ mix derivative gradient - make-vec) + make-vec + mesh3d) (define-syntax-rule (out-fit-struct) (begin @@ -50,8 +52,9 @@ #:fgcolor [fgcolor '(0 0 0)] #:bgcolor [bgcolor '(255 255 255)] #:lncolor [lncolor '(255 0 0)] + #:out-file [out-file #f] arg-extra ...) - (orig:plot data + (orig:plot data [width width] [height height] [x-min x-min] @@ -64,16 +67,17 @@ [fgcolor fgcolor] [bgcolor bgcolor] [lncolor lncolor] + [out-file out-file] init-extra ...))) (define-plot plot orig:plot [] []) (define-plot plot3d orig:plot3d [#:z-min [z-min -5] - #:z-max [z-max 5] - #:z-label [z-label "Z axis"] - #:alt [alt 30] - #:az [az 45]] + #:z-max [z-max 5] + #:z-label [z-label "Z axis"] + #:alt [alt 30] + #:az [az 45]] [[z-min z-min] [z-max z-max] [z-label z-label] @@ -82,8 +86,8 @@ (define (plot-color? v) (memq v '(white black yellow green aqua pink - wheat grey blown blue violet cyan - turquoise magenta salmon red))) + wheat grey blown blue violet cyan + turquoise magenta salmon red))) (define (points vecs #:sym [sym 'square] @@ -114,11 +118,13 @@ (define (vector-field f #:width [width 1] #:color [color 'red] - #:style [style 'scaled]) + #:style [style 'scaled] + #:samples [samples 20]) (orig:vector-field f [width width] [color color] - [style style])) + [style style] + [samples samples])) (define (contour f #:samples [samples 50] diff --git a/collects/plot/view.ss b/collects/plot/view.ss index 8c29dd7587..beda946401 100644 --- a/collects/plot/view.ss +++ b/collects/plot/view.ss @@ -156,24 +156,23 @@ ; (begin0 ; (send bmdc get-bitmap) ; (send bmdc set-bitmap #f)))) - + (super-instantiate ()))) - + ;; a 2d plot view - (define 2d-view% + (define 2d-view% (class* plot-view% () - (public - set-labels + (public + set-labels plot-y-errors plot-vector - plot-vectors + plot-vectors plot-points plot-line plot-contours plot-shades - fill - ) - + fill) + ; set-labels : string string string -> nothing ; sets the x, y and title lables (define (set-labels x-label y-label title) diff --git a/collects/tests/plot/3d-mesh.png b/collects/tests/plot/3d-mesh.png index 8346f70d7a612b6eceab4e8271f89b1439419b92..301c594ab8ddd9d939ecaa6e9cd129e3767f3e9b 100644 GIT binary patch delta 9757 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 A6951J delta 8000 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 diff --git a/collects/tests/plot/contours.png b/collects/tests/plot/contours.png index c1d2dc736bc08d64e5b9d9b676ce742f1c4e252d..82db0d47f1367da2e0483bb958258fa1e38cfddb 100644 GIT binary patch delta 4181 zcmZXYc{J1y+s4g|;cJ~iSxS8E`(82D?=bzwD3vTBOO`^G>}#1Bi6Jr8>{Qm8wh`Ht zEQ2CKBue(OWS2ot&-=XZdEay1zpj7ob3WHO_c`~uu6yCwffQAUlL{bMSXf@UbR4{p zXoeBd90VNJDm;Iw;7)FdJooLHedkDzhR5|o#$7Y{=*9f&VP$34i!w z#mxUFUW5~qC+%c(Pd^-eIONNTWxl+lhWN-;)yZNZI}nZPQggIXfBMQ1TdUoq8O6yr z1*|exAHl8Lmu8O=KP#pw8{Og+hN5GLQak1kkL9|5a*~_sE4#)VAFK0f(XQV96VmsqfL@V4Qy zUSW-M`GKdHx1)xD{IVv zRa*j)vCA_l0;$H)*8eOuu5@nkG71+vT_(8Pf3l3Cj6Kxich2>5ACnzof(Gx;hgQ*i ziCzJ^C~;!1@YwPcJ}U7a+7vaUB*JC)=$Fdr2ghPdLw9|2o%*KII(&wBjX%y+&=>N` zjm#3>J-U@2GA}hewHYKSp{1p#{J-n)sLXWdL=5~M92*-SUQP@-89J;O`DwH%<=Df* zTMZ=kJIdQ*oQ%z7xaLb+1R#5{W+S?Os`t{^ov&cJJ(KgMb5hPAarU+^_Zzn@ zppu##^1L-vavR1+u=vG-KYB5`FiWQP?MP#TYnm8_Bq`e6kgm;5)N5l_#%EIdQ>bT1dPvVz{Z392|} z{}`Wk zHPB!AvWaj&&O7NZH-c=+J%E@j;o*~_H%P)Dc}Hm#^aXYcM8dM99oe*uSawT@12=f; zWx~(IvC<%E#U@s?*(@;mwq8X55v%Sw!}{H5jUOgal1%MLr7dbgKpo-`7p?{_1OIN6 zpp1$g#lD7q;rQWvSq>b4VN^?7GN=#-Ba#IO?5vh&Llc`1;JpL?vAnPZyyq8}F4#u{C8{4VnbI=p11Tnox1YAvw~p2T86(FYwkI z5P{w>ul5IjAi53pzq9H_eX)@lDS|T`2dc=zXI-a$=LU;&15}0sScbV>9+JCr^xaG; z;pc8wAk>xo8Di&g2|=$w5Y@IZj62!Z-HAV|ai z{XnTKaA+RU+>B~1>#*lN<+1e zN9FrFmEKYxBH`S(FN@5W`eg&Axcajq$KDifFJ+!b^rK(M`e<vkAD z!8T{mRFgdEG~SDpG*?5RnMSYt47X^|yC+%SFV@2G&Fs;oSrC|9{np~qIywA$8s_u) zny#7Z>o>NiJkPa10##2oAZ*c$(DZG6u(+rz%Kih4*!I<5=yxY9BI--lT;ib9BOND z+lFt7vf8bsgMO_PDhO-+otk~6Z=^uW@?Hp4$~pNBls{R<{=L~F$jx_5W|eTGRNCw$ z{!8BSaWKzd?H#19c3)~yAX3&)kc%2Rk0p*fHWw0j4)(bzK{p35QGn{xvB+A3X~+J> zDC$}Kh@9H8x8}zSZ1=kq1kkOP>I$UBAD0#u!iEJ1w-k@n`tVOPNCz5 z{MsdAr%kyQ+2(it5 z!hKNlpXM~F+gd&vNn#wVO=nUywn9WToZR?yd<=Mjg;Q!SriE;{SKa57d_Gl?&aW7> z1*fsY`qlI*de~nMTavN`$s4kJ)ny(m8Yk1c5|gH3&?5dxfAVMZ0mBf~8)ZKibln9kSwT2U50vT_kzHO^IfLhcp8R-y~G9j$1Z{++3wJJR>#rBs>O$GOKd8 z4pNpVYbEF!-7~RWWdD`@D%m4Xf9H+0Jm^WlUAG2|T zp4@VLhjf9E@N#dZO5ry$@ARC?=iOYDN#zx?f%}Q~5wlg-o@z#dMT29jDLn(NzQotZ zU8^fd@--1rjBjR5B+pk8y%KbZ$I=2Me1Qq63@M$X5W)Ci9(BphGa@yr)Rih@4MTV4l z+(fnVi>4>qBE|zdlf!=9aC)$0W!o&}PMk%hwkzYiD@6(}=o69+Nc610k|(O67vB_H zPi1~9@$=_06Sv@~pXxA=GDwcxd@n9mlhM*zu)yGIcYBxX)dnNFyw9Lj@6HlkY{u6DQuQyR}wxN)db!cP~Ri-Zp zR8(ul@dO_FL+vAe_*nZoJ+FK!YRk=VV*hN&QP(wU`^y1o{$&~ATSK(`pyk;^;wDq5J?9&bENeOlDU3g5I@Ke;S*LaOO+7})Q8hZi^>ytgLyJ64A-RDf9Vi0p)IDRQCG(`ZsZ_Cv}&Nh~h3y$=EYD8L(jek%XN{ir(6t zJ&z)j?-MU#k>8t9NT*$GoPV9vkHYe4&!hz+7^cw2PLIH=F|oevt~{anUYy`F{tnxc zPzY=@6@UeR8d-Gsi`xo4s)x}(Ij$hVt>`mpd%<2n*GTdd5ASt+dhNpTH++l9-zum) z6p4Dwr#}!r|6-~+oPTdQEKN#6_h?z%aKHH~{H~h1;;iT*~&&eHOQC-41jp;-Bi>DlQvY`E!E-8^r2+%|@r+ zny?=&=@#Sf#|{hAr)O`us)9rb{VZ5ao%I{`wfJa36>rp#pFWxx^c2C0Z9_=Mb(%qF z^MSUn!V@y~96+)8A`}yT2%UGOg<%h&CpmwBu+(3|LLxSNQ7#n!Ifn@lzFNLDq}y+j zwXF^G#t}H(KPg)FN(@>*AwUjFw%L&xPUkeTk2U0WaK?5{ec@jxUbUNj(No37fV*~= z=-ucm*a{STBKT@?Q>dgzDZTmq;!m`Rb_6Rm!N}`quh=)#S_i_y!~f%v?nf{A&F3<( z$|%+mK{mqdCtJx$D0s5(;O_nT7`Y@02av^1*R1T@N3bqEU;2!jdELkqHcxkyM2!7f zUgX=j#q#mMh68JF(bl$sB*+&iB``eunYonsJhIu-$dVGspy$zcnVN4L6~ zUI3Rr36#Os$|u;|y_8hYYAFGHX}S^0UtnW#`6UnLuB|yHO8Rj<S4oer{ ztNF%aM8MrMQv{H6%Ql^?#Ak2;cK^^epvCw}AFxDx@r`>hD|;Z8%;NrB+*@$Y^YT4G zK*2fR7Ur}phmZ)N!X?#IzDRsYsksvrD^_I%wc=@TNmbSz*|@sAR29tJ`S52%;|HdeEBy8E=u5D=2}elv)nRm_J)ukqpO#!2?VO=NRW zdF>Z2(R??yBEMZhs@?B->>qQFy^gp{)Ac467-Xgu+_<>2{bb)kEP8*lv3+e?_jq{J&Fk#4L2%~d&xqfcc5zaM z@eq=3Vr1!NLrZQd_AM8q`wpFU-Gr6&N?3+8tJCak{%_Zp$v!~f*AFK~w5o^veIKw8 MPMyU)HNG74FVZrZB>(^b delta 3386 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 QX#fBK07*qoM6N<$f~hV{7XSbN diff --git a/collects/tests/plot/dashed-line.png b/collects/tests/plot/dashed-line.png index dc98cbf42e7ee72e589efe7c5385d0d732cb6fae..78a4c0bf5e2052a89b09e5cf1e9ad4f568f0ac34 100644 GIT binary patch delta 2088 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 diff --git a/collects/tests/plot/mix.png b/collects/tests/plot/mix.png index d189606c9a5198568a177534a04f4aa86c009569..730ac2e795bbf3153f0d04bd885559bc773b3c1e 100644 GIT binary patch delta 8111 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 delta 6605 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 diff --git a/collects/tests/plot/red-identity.png b/collects/tests/plot/red-identity.png index ad8c4f6c4ea537913ac7b739d59948ae4e1a9c0b..9e2b9f9e27bdb488b44ce3e399c714ed567c61ba 100644 GIT binary patch delta 2529 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 ZZG)>qwAzLG%If0v0MEveQwJYC_g`N`W`h6# delta 2111 zcmV-F2*CHK7mO5;7YZy00{{R3+G!Q=u_3+zEC?4#L_t(|ob8=af}bbr@5~vK)L|lastN3BdMY5Fzd?yN7dxc=I+^Vk+c6hS_(s4u2YX zm*SUw^RO*flxzMZOv#pyu|$M;axk=u5J!%N+7aT$XSm8B#EZf=Q3!FO^v$46(UM`_ z8n~D2I9z2+ik1*kr}D))LL8_~WUwe&B4pJlhpUXKkWgb3zig-6xD=p#_pmC|E8k!$ zHu#mS-aH=kvIcWL4GtkAX_%JCgMZ;TPQz6OA;V~!wTqBZG|r+%$QYW!RR$qLXn)B7 zAtSi((g#B9X%1HzgqU;fohYUOS#zm*Fb&9>OW`Vm5L2$d!if+|I$o(oh#i;1RR$qu z^u2M85Gy)Y06>ThUEwN&5EJ?r$Uuk%f(1(uVt`};8HP^u5yUHoPW0)%oqw+&L>HkB zgeW6leheXsh?~a)A)2VH&W8{+bXH45h!Ps%DuWOm)D{y(hzfd(yCOsZt#Fk=h#b|m zj~UAnquD$d%Mzm*t}+Obp}tf*LPY2dmOw~1HamS-RNAxic5fj@ zJFgg2TDEb2Ayzx#SO|ICUw??j?R>?k(rzxqaHA-jN?UWi?P@?qw{yGdO1r-TA}X0( zxXPIHvJCUqK~OSV9Y(#Z8?TpTtb+%`Ygjjr2SP4kuLB`h7~umU%?t=v8H6-4Mh8M# z8RY{ZO$-WG8H6-2P6yL~S{T?ombWF`n>niRZGVg&2iNriYDnliam`2EMtRz&)_H-4k zF_B;(K%HItkbewOn9^OYwq$Xx`Td)yI3@d_|4IGaW|+(V_$De$$v){UT2m8=a@n8X z3`Qy00i7YsFmG*+zBrFjvO`R7>OFaDbNI!1h>{(1_ipd;M1}|@D{yZirFlO7B`b1k zA;oztU~-ojDPAn?l+dzn7v`%RZb^ShqSSB zMpM{h8AJ0sY6uy@g;zKcGJq?u zaLy`Z`^C=LoUo@(KV5v7}>x41^fcvp@zy?C4ss1R++q ztmk8jMSsysuSM(Qv!0JB21QHHY|Ssbd-<`sguJpfzHGs2iPH&5hI#)YTD)=!A)Cc) z(#OB3(;uzm3-1_VSE%&%w?5LfU4yCE@|8lwYl+S!s&&t^Hx}E7a@vh ztbL3SHFTD0M~D_mOM@ds39Y5t5u$?L&JqaGK!0&3gIR^B4g~1=h&XPt@A-Rm&RK;>MrI6sFqYMU?IyJ$ZL9Iggl85t}+N&38G_OA#Vc#QG7%kH(41v4Jb;u%7nDBGE7Jy z9SC^@^MQ~^;VLt`kYGBd7gF#cJGCgaD5C8xGm&!^ILb3Z% zf@}MkY2TIb^+#`NNu9>-*e1cXb=Qom5Xlt}Kw3NpA;QEVg}k0gdxFmPfwuD&(w}sb zL3h%CLY_zm3p!Iug$O$Y!G}j2DtJaHL|UDpb%-ja`#+nkSxWzp2NwbW0Id+veJDO& zBgBc256CmK6Y?A-`2E+|4{CQM?S6dO=p4TRF=_Wx+WbHR@n93O-i4sVgS2lVge+%v p-QKjnsYf4v1poj50001Z;~#py8@xZ1$7TQk002ovPDHLkV1nL4w#oni diff --git a/collects/tests/plot/run-tests.ss b/collects/tests/plot/run-tests.ss index ca1da9a7c5..c57b2bd5c7 100755 --- a/collects/tests/plot/run-tests.ss +++ b/collects/tests/plot/run-tests.ss @@ -1,24 +1,19 @@ #!/bin/sh -#| -exec mred -u "$0" "$@" +#| -*- scheme -*- +exec mred "$0" "$@" |# -(module run-tests mzscheme +#lang scheme +(require plot mzlib/md5) -(require plot - mzlib/md5 - mzlib/pretty) - - -;; thisi should be big enough to read thse files (define (read-file file) - (with-input-from-file file (lambda () (read-bytes 100000)))) + (with-input-from-file file (lambda () (read-bytes (file-size file))))) (define-syntax run-test (syntax-rules () [(_ description (plot args ...) file-name) (let* ([result-file-name (string-append file-name "-out.png")] [expected-file-name (string-append file-name ".png")]) - (plot args ... (out-file result-file-name)) + (plot args ... #:out-file result-file-name) ;; WILL COMPARE by MD5 hash. (printf "testing \"~a\" ... " description) (if (equal? (md5 (read-file result-file-name)) @@ -28,72 +23,59 @@ exec mred -u "$0" "$@" expected-file-name result-file-name)))])) - (run-test "Line" - (plot - (line (lambda (x) x) (color 'red))) + (plot (line (lambda (x) x) #:color 'red)) "red-identity") - - -(run-test - "Vector Field" - (plot - (vector-field - (gradient (lambda (x y) (* (sin x) (cos y)))) - (samples 25)) - (title "gradient field of F(x,y) = sin(x) * sin(y)")) - "vector-field") +(run-test "Vector Field" + (plot (vector-field (gradient (lambda (x y) (* (sin x) (cos y)))) + #:samples 25) + #:title "gradient field of F(x,y) = sin(x) * sin(y)") + "vector-field") (define (trig x y) (* (sin x) (sin y))) -(run-test - "Shading" - (plot (shade trig) - (x-min -1.5) (x-max 1.5) (y-min -1.5) (y-max 1.5) - (title "shdade of F(x,y) = sin(x) * sin(y)")) - "shade") +(run-test "Shading" + (plot (shade trig) + #:x-min -1.5 #:x-max 1.5 #:y-min -1.5 #:y-max 1.5 + #:title "shdade of F(x,y) = sin(x) * sin(y)") + "shade") -(run-test - "Contours" - (plot (contour trig) - (x-min -1.5) (x-max 1.5) (y-min -1.5) (y-max 1.5) - (title "contours of F(x,y) = sin(x) * sin(y)")) - "contours") +(run-test "Contours" + (plot (contour trig) + #:x-min -1.5 #:x-max 1.5 #:y-min -1.5 #:y-max 1.5 + #:title "contours of F(x,y) = sin(x) * sin(y)") + "contours") -(run-test - "Mix of all three" - (plot (mix - (shade trig) - (contour trig) - (vector-field (gradient trig ) (samples 25))) - (x-min -1.5) (x-max 1.5) (y-min -1.5) (y-max 1.5) - (title - "gradient field +shdade + contours of F(x,y) = sin(x) * sin(y)")) - "mix") +(run-test "Mix of all three" + (plot (mix (shade trig) + (contour trig) + (vector-field (gradient trig) #:samples 25)) + #:x-min -1.5 #:x-max 1.5 #:y-min -1.5 #:y-max 1.5 + #:title "gradient field & shade & contours") + "mix") -(run-test - "3d mesg" - (plot3d (mesh3d trig) - (x-min -3.5) (x-max 3.5) (y-min -3.5) (y-max 3.5) (z-min -1.0) (z-max 1.5) (bgcolor '(0 0 0)) (fgcolor '(255 0 0))) - "3d-mesh") - -(require mzlib/class - (lib "plot-extend.ss" "plot") - mzlib/etc) +(run-test "3d mesg" + (plot3d (mesh3d trig) + #:x-min -3.5 #:x-max 3.5 + #:y-min -3.5 #:y-max 3.5 + #:z-min -1.0 #:z-max 1.5 + #:bgcolor '(0 0 0) #:fgcolor '(255 0 0)) + "3d-mesh") +(require plot/plot-extend) ; (number -> number) mumbo-jumbo -> 2d-renderer (define-plot-type dashed-line - fun 2dview (x-min x-max) ((samples 100) (segments 20) (color 'red) (width 1)) + fun 2dview (x-min x-max) ((samples 100) (segments 20) (color 'red) (width 1)) (let* ((dash-size (/ (- x-max x-min) segments)) - (x-lists (build-list (/ segments 2) - (lambda (index) - (x-values - (/ samples segments) + (x-lists (build-list (/ segments 2) + (lambda (index) + (x-values + (/ samples segments) (+ x-min (* 2 index dash-size)) (+ x-min (* (add1 ( * 2 index)) dash-size))))))) - (send* 2dview + (send* 2dview (set-line-color color) (set-line-width width)) (for-each (lambda (dash) @@ -101,14 +83,10 @@ exec mred -u "$0" "$@" (map (lambda (x) (vector x (fun x))) dash))) x-lists))) -(run-test - "Simple plot-extend" - (plot (dashed-line (lambda (x) x) (color 'red))) - "dashed-line") +(run-test "Simple plot-extend" + (plot (dashed-line (lambda (x) x) [color 'red])) + "dashed-line") -(run-test - "canvas sizing" - (plot (line sin) (height 100) (width 100)) - "size") - -) +(run-test "canvas sizing" + (plot (line sin) #:height 100 #:width 100) + "size") diff --git a/collects/tests/plot/shade.png b/collects/tests/plot/shade.png index 90edcc53efb13978a33f0336f421130d8b119643..a7de045e168c6f986c1f867c953afb2646431720 100644 GIT binary patch delta 3137 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 G*8B&qg&m&& delta 2505 zcmYjTYfux17S1MtBs^p{Je8O(%Zg$x6$})R;3h7x0csVk!WFp|Ddi=vVnIPS2~h(I z*#wG;)&~TqDu_@jGAKfcJQP$?t6ZPF6qR?l3W&(1b7$_{Kj+Mu@BI1BoO8aytx9jNtg^rdt=7Y0=>0OC8qx*aGLqB(R_D_5Y zIDB${#O11){)wNOZq9wUfITl7i22P@T{`lro|j1CRPFZG!xf4c< z%bBFFwnZdmCT5Y7LvJ6|w~oynYz5wb);B0g%)Dw}S)cVw>4Du>XS5Nj^xsF*4KqVS z&qinWsK{ev>=bL@J*r}?PM-5MgYC8uFhBx6h12fk3$GXeAyT8#bikeNF ze0k%h?+KE6!i#zuarH%Z*8Y6kku>#=pBWIR9{GW=gjv&N~(x${^4vFj`8*xH8O4JV&>CWJq5 zEa~LTpO2{c>iOizmqOT~^Dxm+nRe{lI_7^Tw~D-;)X+eVs$xn0)T0#gv#EPE?nzhIg zd54gOg(Jt|d|;vXvPJ4!U{N0wW{KY2WukXSlgEf$hAz4C&QaB_4WvvM853L3(1FVVDY|(jG=qNYR3_|7_Cpi=84K>k;=}c}9 zz$&qA0@QmOrBOMJ(zLxGBuH+0K4Ymbw(`*H;TQ39{6Xi;U z7Q$P5?I{6R*5)O#Rc>`m!hExtsT_wbX@M2L7xvX`{@DhsJS2By=sq`eX-#yyso`^$69vILxFWInQC=7< zA`zA+69D$s@Ra%MN6%TeBVlHE`?-nxa#X#_sO05+*=s*H;vvu#ze2bQnQ*!z4fR=x zl}Ky=*OV9`jBlk?#XgWJiW{?!yPNSBsaIPjgRB5|0_3pDm}ox7s<9h+H2)nqF+X9y$x9(d%zURDQG0xlHv1yLe` z11`2L4nl~|w?8Bg9O>BO!s7OC3aTE7gTLeNKp)X_24c8%R>YNnBW-)IKiu~bm+6}3 zuAQmo6rLZaF_oh6Rwv6Bg_LZHjodLZG5t@mx5&i(cJMI2HkwK$^Ojh$+D^3HLf=Eo zLy`7iTU`K1Ock4oY3j87Ii=p%UH@j9{>ITR>+FvicV`_TV(RhPLN-#KX;jo<;&wWT z%{>X>I?s+_%Cu~^iIutRfT zGW|vEvO7%mUpMG0o{^1@Ee!T{v7h$HzArmC-`2FKT5u%#T{gyCcPf___I0asFEBIx z>^TqISY*dsr;Ne5m^8G{nFm+1)B-Bv*eVW-=*lL&OC;5YAUqTxDkKdp*4V}1K!FQg zlN3^xvXt7Q5$BuAqSS?P;ihP_wzxkI?n2)2w=r^-#g1R&6Q>APz{<8yzcY_HzM1%y zap6JOq5htO+cPnJShDbLMCUb2w7`g3Z}5J>h9w>Z-^~Q0HgcI@9@B|{gDMZp=%gLm zqP^E#4w!Mj)A#pwH5yM`+LGz{MG-AU{XmWdSQ}_hl=!bznwD|UJi3uCk-Jhe?C>WBR22)P193E2 zcW@uh6$%!v+omv*N-*~U-6hV1hcT)wLJ9PFvku^tpd5fRwK`QQe@*0KD+S3SxgQn@@bY|ZGjRh5Gv&k(fjoE}`HAeRt7eyiM@b|pWrB+JX z-f|kkjb(8RZOoZ5zCy{;>PzXU^wyUevp%=!s}*LtAM_l}(8NetAgIdOhAwQrpc-qj z(lzOgG|efPn&oyEOT~+^NTD0n@_pEdv1C!y(v$7cB6)XxhmHq0~ zgK_=jB8?BpHUQdPSP%9T@q@$o88BDvjs^3j@CNk~N}w8&1^Yd;193_Vh3&#%5fd4Q zw_3BSKTG90XR-ay0zBW?Cu_m7(IkEw@XO+z^8WyDs3}eW diff --git a/collects/tests/plot/vector-field.png b/collects/tests/plot/vector-field.png index cb9d32e123a3710b6767bc3abff67334a63a31d5..5be95e136409b8e789241b7e067d11237cc4ffac 100644 GIT binary patch delta 6841 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 B(_sJr delta 5222 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 MS6xr724x%hKZ*p$B>(^b