Support RETURN-FROM in DEF%TR forms
[maxima.git] / share / draw / rtest_draw.mac
blob2ca70b03a8e7b0a850e43722ed66a0e39c12cd95
2     file_name_base:sconcat("test_",random(10^10)),
3     file_name_svg:sconcat(maxima_tempdir,"/",file_name_base),
4     file_name_gnuplot:sconcat(file_name_base,".gnuplot"),
5     file_name_data:sconcat(maxima_tempdir,"/",file_name_base,".data"),
6     file_name_data_gnuplot:sconcat(file_name_base,".data"),
7     /* Define a function that tests if the gnuplot file created by draw contains
8        a set of lines.
9        */
10     gnuplot_contains([x]):=block(
11         [
12             infile:openr(sconcat(maxima_tempdir,"/",file_name_gnuplot)),
13             line,
14             retval,
15             lines:[]
16         ],
17         while(stringp(line:readline(infile))) do
18             push(line,lines),
19         retval:emptyp(
20             setdifference(
21                 setify(x),
22                 setify(lines)
23             )
24         ),
25         close(infile),
26         return(retval)
27     ),
28     /* Define a function that tests if the gnuplot file created by draw contains
29        a string.
30        */
31     gnuplot_contains_string(x):=block(
32         [
33             infile:openr(sconcat(maxima_tempdir,"/",file_name_gnuplot)),
34             line,retval:false
35         ],
36         while(stringp(line:readline(infile))) do
37             if numberp(ssearch(x,line)) then retval:true,
38         close(infile),
39         return(retval)
40     ),
41     0
45 /* Test if "title=" affects the gnuplot file. */
46 (draw2d(
47     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
48     explicit(sin(x),x,1,10)
49 ),0);
51 gnuplot_contains("set title ''");
52 true$
54 (draw2d(
55     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
56     title="Test",
57     explicit(sin(x),x,1,10)
58 ),0);
60 gnuplot_contains("set title 'Test'");
61 true$
63 /* Test "contour=". */
64 (draw3d(
65     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
66     contour='none,
67     explicit(sin(x*y),x,1,10,y,1,10)
68 ),0);
70 (draw3d(
71     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
72     contour='base,
73     explicit(sin(x*y),x,1,10,y,1,10)
74 ),0);
76 gnuplot_contains("set contour base");
77 true$
78 (draw3d(
79     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
80     contour='both,
81     explicit(sin(x*y),x,1,10,y,1,10)
82 ),0);
84 gnuplot_contains("set contour both");
85 true$
86 (draw3d(
87     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
88     contour='surface,
89     explicit(sin(x*y),x,1,10,y,1,10)
90 ),0);
92 gnuplot_contains("set contour surface");
93 true$
94 (draw3d(
95     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
96     contour='map,
97     explicit(sin(x*y),x,1,10,y,1,10)
98 ),0);
100 gnuplot_contains("set contour base","unset surface");
101 true$
103 /* Test "axis_3d=". */
104 (draw3d(
105     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
106     axis_3d=false,
107     explicit(sin(x*y),x,1,10,y,1,10)
108 ),0);
110 gnuplot_contains("unset xtics", "unset ytics", "unset ztics", "set border 0");
111 true$
112 (draw3d(
113     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
114     axis_3d=true,
115     explicit(sin(x*y),x,1,10,y,1,10)
116 ),0);
118 gnuplot_contains("unset xtics");
119 false$
120 gnuplot_contains("unset ytics");
121 false$
122 gnuplot_contains("unset ztics");
123 false$
124 gnuplot_contains("set border 0");
125 false$
127 /* test the other axis_* commands */
128 (draw2d(
129     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
130     axis_bottom = false,
131     explicit(sin(x),x,1,10)
132 ),0);
134 gnuplot_contains("set border 14");
135 true$
136 (draw2d(
137     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
138     axis_top = false,
139     explicit(sin(x),x,1,10)
140 ),0);
142 gnuplot_contains("set border 11");
143 true$
144 (draw2d(
145     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
146     axis_left = false,
147     explicit(sin(x),x,1,10)
148 ),0);
150 gnuplot_contains("set border 13");
151 true$
152 (draw2d(
153     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
154     axis_right = false,
155     explicit(sin(x),x,1,10)
156 ),0);
158 gnuplot_contains("set border 7");
159 true$
162 /* test all combination of border and transparent */
163 (draw2d(
164     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
165     border = true, transparent = true,
166     polygon([[3,2],[7,2],[5,5]])
167 ),0);
169 gnuplot_contains_string("lt ");
170 true$
171 gnuplot_contains_string("filledcurves ");
172 false$
173 (draw2d(
174     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
175     border = false, transparent = false,
176     polygon([[3,2],[7,2],[5,5]])
177 ),0);
179 gnuplot_contains_string("lt ");
180 false$
181 gnuplot_contains_string("filledcurves ");
182 true$
183 (draw2d(
184     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
185     border = true, transparent = false,
186     polygon([[3,2],[7,2],[5,5]])
187 ),0);
189 gnuplot_contains_string("lt ");
190 true$
191 gnuplot_contains_string("filledcurves ");
192 true$
194 /* test background_color */
195 (draw2d(
196     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
197     line_width=50,
198     background_color="#FF0000",
199     explicit(sin(x),x,0,10)
200 ),0);
202 gnuplot_contains_string("obj 1 fc rgb '#ff0000'");
203 true$
204 (draw2d(
205     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
206     line_width=50,
207     background_color="#00FF0080",
208     explicit(sin(x),x,0,10)
209 ),0);
211 gnuplot_contains_string("obj 1 fc rgb '#00ff0080'");
212 true$
213 (draw2d(
214     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
215     line_width=50,
216     background_color='yellow,
217     explicit(sin(x),x,0,10)
218 ),0);
220 gnuplot_contains_string("obj 1 fc rgb '#FFFF00'");
221 true$
223 /* test line_width and line colors including semi-transparent ones */
224 (draw2d(
225     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
226     line_width=50,
227     color="#FF0000",
228     explicit(sin(x),x,0,10),
229     color="#0000FF80",
230     explicit(cos(x),x,0,10)
231 ),0);
233 gnuplot_contains_string("lw 50");
234 true$
235 gnuplot_contains_string("lw 50");
236 true$
237 gnuplot_contains_string("lc rgb '#800000ff'");
238 true$
239 gnuplot_contains_string("lc rgb '#ff0000'");
240 true$
241 (draw2d(
242     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
243     line_width=50,
244     color='red,
245     explicit(sin(x),x,0,10),
246     color='blue,
247     explicit(cos(x),x,0,10)
248 ),0);
250 gnuplot_contains_string("lc rgb '#FF0000'");
251 true$
252 gnuplot_contains_string("lc rgb '#0000FF'");
253 true$
255 /* test colorbox */
256 (draw(
257     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
258     gr2d(image(apply('matrix,
259         makelist(makelist(random(200),i,1,30),i,1,30)),0,0,30,30))
260 ),0);
262 gnuplot_contains("set colorbox");
263 true$
264 gnuplot_contains("unset colorbox");
265 false$
266 (draw(
267     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
268     gr2d(colorbox = false, image(apply('matrix,
269         makelist(makelist(random(200),i,1,30),i,1,30)),0,0,30,30))
270 ),0);
272 gnuplot_contains("set colorbox");
273 false$
274 gnuplot_contains("unset colorbox");
275 true$
277 /* test "columns=" */
278 (draw(
279     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
280     gr2d(nticks=30,
281         parametric(2*cos(t),5*sin(t),t,0,2*%pi)),
282     gr2d(polygon([4,5,7],[6,4,2])),
283     columns=2),
284     0
287 gnuplot_contains("set size 1.0, 0.5");
288 false$
289 gnuplot_contains("set size 0.5, 1.0");
290 true$
291 (draw(
292     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
293     gr2d(title="Ellipse",
294         nticks=30,
295         parametric(2*cos(t),5*sin(t),t,0,2*%pi)),
296     gr2d(title="Triangle",
297         polygon([4,5,7],[6,4,2])),
298     columns=1),
299     0
302 gnuplot_contains("set size 1.0, 0.5");
303 true$
304 gnuplot_contains("set size 0.5, 1.0");
305 false$
306 gnuplot_contains("set title 'Ellipse'");
307 true$
308 gnuplot_contains("set title 'Triangle'");
309 true$
311 /* test "allocation=" */
312 (draw(
313     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
314     dimensions=[1123,1124],
315     gr2d(
316         explicit(x^2,x,-1,1)),
317     gr2d(
318         allocation = [[1/4, 1/4],[1/2, 1/2]],
319         explicit(x^3,x,-1,1),
320         grid = true)
321     ),
322     0
325 gnuplot_contains("set size 0.5, 0.5");
326 true$
327 gnuplot_contains("set origin 0.25, 0.25");
328 true$
329 gnuplot_contains_string("size 1123, 1124");
330 true$
332 /* test "delay=" */
333 (draw(
334     terminal='animated_gif,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
335     delay     = 100,
336     gr2d(explicit(x^2,x,-1,1)),
337     gr2d(explicit(x^3,x,-1,1)),
338     gr2d(explicit(x^4,x,-1,1))),0);
340 gnuplot_contains_string("delay 100");
341 true$
342 gnuplot_contains_string("set terminal gif enhanced animate");
343 true$
345 /* test "enhanced3d=". In this instance we don't look at the .gnuplot file
346    but at the data this file causes gnuplot to plot instead.
348 (draw3d(
349     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
350     enhanced3d='none,data_file_name=file_name_data_gnuplot,
351     points([1,2,3,4],[3,5,3,1],[1,7,5,3])),
354 read_nested_list(file_name_data);
355 [[1.0,3.0,1.0],[2.0,5.0,7.0],[3.0,3.0,5.0],[4.0,1.0,3.0],[],[]]$
356 (draw3d(
357     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
358     enhanced3d=false,data_file_name=file_name_data_gnuplot,
359     points([1,2,3,4],[3,5,3,1],[1,7,5,3])),
362 read_nested_list(file_name_data);
363 [[1.0,3.0,1.0],[2.0,5.0,7.0],[3.0,3.0,5.0],[4.0,1.0,3.0],[],[]]$
364 (draw3d(
365     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
366     enhanced3d = [x-z/10,x,y,z],data_file_name=file_name_data_gnuplot,
367     points([1,2,3,4],[3,5,3,1],[1,7,5,3])),
370 read_nested_list(file_name_data);
371 [[1.0,3.0,1.0,0.9],[2.0,5.0,7.0,1.3],[3.0,3.0,5.0,2.5],[4.0,1.0,3.0,3.7],[],[]]$
372 (draw3d(
373     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
374     enhanced3d=true,data_file_name=file_name_data_gnuplot,
375     points([1,2,3,4],[3,5,3,1],[1,7,5,3])),
378 read_nested_list(file_name_data);
379 [[1.0,3.0,1.0,1.0],[2.0,5.0,7.0,7.0],[3.0,3.0,5.0,5.0],[4.0,1.0,3.0,3.0],[],[]]$
380 (draw3d(
381     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
382     enhanced3d = [sin(r*s),r,s],data_file_name=file_name_data_gnuplot,
383     explicit(sin(x)*sin(y),x,-2,2,y,-2,2)),
387 /* For the errors object we can at least test if using any of its variants
388    causes an error. */
389 (draw2d(
390     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
391     error_type = 'y,
392     errors([[1,2,1], [3,5,3], [10,3,1], [17,6,2]])),0);
394 (draw2d(
395     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
396     error_type = 'x,
397     errors([[1,2,1], [3,5,3], [10,3,1], [17,6,2]])),0);
399 (draw2d(
400     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
401     error_type = 'y,
402     errors([[1,2,1,1], [3,5,3,2], [10,3,1,1], [17,6,2,2]])),0);
404 (draw2d(
405     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
406     error_type = 'x,
407     errors([[1,2,1,1], [3,5,3,2], [10,3,1,1], [17,6,2,2]])),0);
409 (draw2d(
410     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
411     error_type = 'xy,
412     errors([[1,2,1,1], [3,5,3,3], [10,3,1,2], [17,6,2,1]])),0);
414 (draw2d(
415     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
416     error_type = 'boxes,
417     errors([[1,2,1,1], [3,5,3,3], [10,3,1,2], [17,6,2,1]])),0);
419 (draw2d(
420     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
421     error_type = 'xy,
422     errors([[1,2,1,1,1,1], [3,5,3,3,1,1], [10,3,1,2,2,2], [17,6,2,1,2,1]])),0);
424 (draw2d(
425     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
426     error_type = 'boxes,
427     errors([[1,2,1,1,2,2], [3,5,3,3,1,1], [10,3,1,2,2,2], [17,6,2,1,2,1]])),0);
430 /* fill_color and filled_func */
431 (draw2d(
432     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
433     line_width=50,
434     fill_color="#FF0000",
435     filled_func=x,
436     explicit(sin(x),x,0,10),
437     fill_color="#0000FF80",
438     explicit(cos(x),x,0,10)
439 ),0);
441 gnuplot_contains_string("lc rgb '#800000ff'");
442 true$
443 gnuplot_contains_string("lc rgb '#ff0000'");
444 true$
445 (draw2d(
446     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
447     line_width=50,
448     fill_color='red,
449     filled_func=1,
450     explicit(sin(x),x,0,10),
451     fill_color='green,
452     explicit(cos(x),x,0,10)
453 ),0);
455 gnuplot_contains_string("lc rgb '#FF0000'");
456 true$
457 gnuplot_contains_string("lc rgb '#00FF00'");
458 true$
460 /* Test if drawing a grid works */
461 (draw2d(
462     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
463     explicit(sin(x),x,0,10),
464     grid=true
465 ),0);
467 gnuplot_contains("set grid xtics ytics mxtics mytics");
468 true$
469 gnuplot_contains("set mxtics 1");
470 true$
471 gnuplot_contains("set mytics 1");
472 true$
473 (draw2d(
474     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
475     explicit(sin(x),x,0,10),
476     grid=[10,1]
477 ),0);
479 gnuplot_contains("set grid xtics ytics mxtics mytics");
480 true$
481 gnuplot_contains("set mxtics 10");
482 true$
483 gnuplot_contains("set mytics 1");
484 true$
485 (draw2d(
486     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
487     explicit(sin(x),x,0,10),
488     grid=[1,10]
489 ),0);
491 gnuplot_contains("set grid xtics ytics mxtics mytics");
492 true$
493 gnuplot_contains("set mxtics 1");
494 true$
495 gnuplot_contains("set mytics 10");
496 true$
497 (draw2d(
498     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
499     explicit(sin(x),x,0,10),
500     grid=[1.2,10.6]
501 ),0);
503 gnuplot_contains("set grid xtics ytics mxtics mytics");
504 true$
505 gnuplot_contains("set mxtics 1");
506 true$
507 gnuplot_contains("set mytics 11");
508 true$
509 (draw2d(
510     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
511     explicit(sin(x),x,0,10),
512     grid=[1.6,10.4]
513 ),0);
515 gnuplot_contains("set grid xtics ytics mxtics mytics");
516 true$
517 gnuplot_contains("set mxtics 2");
518 true$
519 gnuplot_contains("set mytics 10");
520 true$
521 (draw2d(
522     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
523     explicit(sin(x),x,0,10),
524     grid=false
525 ),0);
527 gnuplot_contains("unset grid");
528 true$
530 /* Tests for head_length, head_angle, head_both and head_type */
531 (draw2d(
532     terminal='svg,file_name=file_name_svg,gnuplot_file_name=file_name_gnuplot,
533     xrange      = [0,10],
534     yrange      = [0,9],
535     head_length = 0.7,
536     head_angle  = 10,
537     head_both   = false,
538     vector([1,1],[0,6]),
539     head_angle  = 20,
540     vector([2,1],[0,6]),
541     head_angle  = 30,
542     vector([3,1],[0,6]),
543     head_angle  = 40,
544     vector([4,1],[0,6]),
545     head_angle  = 60,
546     vector([5,1],[0,6]),
547     head_angle  = 90,
548     head_both   = true,
549     vector([6,1],[0,6]),
550     head_angle  = 120,
551     head_type='filled,
552     vector([7,1],[0,6]),
553     head_angle  = 160,
554     head_type='empty,
555     vector([8,1],[0,6]),
556     head_angle  = 180,
557     head_length = 0.3,
558     head_type='nofilled,
559     vector([9,1],[0,6]) ),0);
561 gnuplot_contains_string("vect head size 0.7, 10.0");
562 true$
563 gnuplot_contains_string("vect head size 0.7, 20.0");
564 true$
565 gnuplot_contains_string("vect head size 0.7, 30.0");
566 true$
567 gnuplot_contains_string("vect head size 0.7, 40.0");
568 true$
569 gnuplot_contains_string("vect head size 0.7, 60.0");
570 true$
571 gnuplot_contains_string("vect heads size 0.7, 90.0");
572 true$
573 gnuplot_contains_string("vect heads size 0.7, 120.0 filled");
574 true$
575 gnuplot_contains_string("vect heads size 0.7, 160.0 empty");
576 true$
577 gnuplot_contains_string("vect heads size 0.3, 180.0 nofilled");
578 true$
580 /* Clean up.*/
581 (load("operatingsystem"),0);
583 (delete_file(sconcat(file_name_svg,".svg")),0);
585 (delete_file(sconcat(file_name_svg,".gif")),0);
587 kill(file_name_base, file_name_data, file_name_data_gnuplot, file_name_svg, file_name_gnuplot, file_name_svg, gnuplot_contains, gnuplot_contains_string);
588 done$