transl: do not assume a catch's mode based on the last body form
[maxima.git] / tests / rtest_maxmin.mac
blob2a0a17a86dbe1ec2a767a46f59155278630c9a6a
1 /* The file rtest_allnummod.mac has tests for max & min.  Here is a file for new max & min tests.*/
2 (reset(maxmin_effort),0);
3 0$
5 /* #3769 max or min called on CRE expressions */
6 max(a,b) - max(rat(a), b);
7 0$
9 /* #3764 limit of min works with assume but not with asksign */
10 /* I can't figure out how to test for the asksign version of this bug. Here
11 is an assume version, but this wasn't the bug.*/
12 (assume(x>1),0);
15 limit(min(x^a,x^(2*a))-x^a,a,inf);
18 (forget(x>1),0)$
21 /* #3765 min(und,...) gives error with trylevel > 1 */
22 block([maxmin_effort : 1], min(und,%pi));
23 min(und,%pi)$
25 block([maxmin_effort : 2], min(und,%pi));
26 min(und,%pi)$
28 block([maxmin_effort : 3], min(und,%pi));
29 min(und,%pi)$
31 block([maxmin_effort : 10], min(und,%pi));
32 min(und,%pi)$
34 block([maxmin_effort : 1], max(und,%pi));
35 max(und,%pi)$
37 block([maxmin_effort : 2], max(und,%pi));
38 max(und,%pi)$
40 block([maxmin_effort : 3], max(und,%pi));
41 max(und,%pi)$
43 block([maxmin_effort : 10], max(und,%pi));
44 max(und,%pi)$
46 /* #3736 Quoting either min or max inhibits simplification */
47 'max(1,1);
50 'max(107,46);
51 107$
53 /* #3508 max(zeroa,zerob) gives zerob */
54  max(zeroa,zerob);
55  zeroa$
57  min(zeroa,zerob);
58  zerob$
60 /* #3146 max() runs out of memory when comparing exponential functions */
61 max(2.103-7.053*%e^(-4.0681*10^5*t), 2.0325-6.9825*%e^(-4.9238*10^5*t));
62 max(2.0325-6.9825*%e^(-492380.0*t),2.103-7.053*%e^(-406810.0*t))$
64 /* #1498 min and max of imaginary and real numbers */
65 min(%i*inf,inf);
66 min(%i*inf,inf)$
68 min(%i*minf,minf);
69 min(%i*minf,minf)$
71 min(%i*inf,inf);
72 min(%i*inf,inf)$
74 min(%i*minf,minf);
75 min(%i*minf,minf)$
77 min(%i*-inf,-inf);
78 min(%i*-inf,-inf)$
80 min(%i*-inf,minf);
81 min(%i*-inf,minf)$
83 min(%i*minf,-inf);
84 min(%i*minf,-inf)$
86 max(%i*minf,inf);
87 max(%i*minf,inf)$
89 max(%i*minf,minf);
90 max(%i*minf,minf)$
92 max(%i*inf,inf);
93 max(%i*inf,inf)$
95 min(%i*inf,inf);
96 min(%i*inf,inf)$
98 max(%i*-inf,-inf);
99 max(%i*-inf,-inf)$
101 max(%i*minf,minf);
102 max(%i*minf,minf)$
104 max(7*%i*inf+4*inf,4*%i*inf+3);
105 max(7*%i*inf+4*inf,4*%i*inf+3)$
107 min(7*%i*inf+4*inf,4*%i*inf+3);
108 min(7*%i*inf+4*inf,4*%i*inf+3)$
110 min(7*%i*minf+4*inf,4*%i*minf+3);
111 min(7*%i*minf+4*inf,4*%i*minf+3)$
113 min(7*%i*minf+4*inf,4*%i*-inf+3);
114 min(7*%i*minf+4*inf,4*%i*-inf+3)$
116 min(-inf,minf);
117 minf$
119 max(-inf,minf);
120 -inf$
122 /* #1460 compare(max(1,%i)-%i,0) / FIX */
123 compare(max(1,%i)-%i,0);
124 notcomparable$
126  is(equal(max(1,%i),0));
127  false$
129  /* #1436 sign(max(7,x) - max(6,x)) --> error */
130  sign(max(7,x) - max(6,x));
131  pz$
133 /* #1172 max(inf, ...) doesn't simplify to inf */
134  max(1/(1-x),inf);
135  inf$
137 /* #1171 max leads to UND error */
138  max(1/(q-1));
139  1/(q-1)$
141 max(1/(q-1),1/(q-1));
142 max(1/(q-1))$
144 compare(minf,1/(q-1));
145 "<"$
147 compare(1/(q-1),minf);
148 ">"$
150 /* #1073 max and min of an array*/
152 /* For now, let's comment these tests out...some of these bugs stem from
153    things like sign(make_array('any,2)) --> error, for example. 
154 (f : make_array('any,2),0);
157 max(f,1);
158 max(''f,1)$
160 min(f,1);
161 min(''f,1)$
163 (remvalue(f),0);
167 /* #990 ratsubst and sets, floor, ceiling, min, max */
168 ratsubst(a,b,min(a,b));
171  ratsubst(a,b,max(a,b));
172  a$
174 /* #542 max and min with CRE expressions */
175  max(1,rat(x));
176  max(1,x)$
178 /* #398 MAX(a+b,c) is NOT equal to MAX(c,a+b) */
179 max(a+b,c); 
180 max(a+b,c)$
182 max(c,a+b);
183 max(c,a+b)$
185 (assume(a+b > c),0);
188 max(a+b,c);
189 a+b$
191 max(c,a+b);
192 a+b$
194 (forget(a+b > c),0);
197 /* #338 min/max handles inf/minf/ind but not und */
199 max(inf,minf);
200 inf$
202 max(x,inf);
203 inf$
205 max(ind,minf);
206 ind$
208 /* does the assign function for maxmin_effort work? */
209 (xxx : maxmin_effort,0);
212 errcatch(maxmin_effort : 2/3);
215 is(maxmin_effort = xxx);
216 true$
218 errcatch(maxmin_effort : 2<x);
221 is(maxmin_effort = xxx);
222 true$
224 (remvalue(xxx),0);
227 max(1, cos(x)^2+sin(x)^2);
230 min(1, cos(x)^2+sin(x)^2);
233 max(107, cos(x)^2+sin(x)^2);
234 107$
236 min(107, cos(x)^2+sin(x)^2);
237 cos(x)^2+sin(x)^2$
239 min(1);
242 max(3/2, 1.51);
243 1.51$
245 max(3/2, 1.51b0);
246 1.51b0$
248 max(3/2, 1.51b0,F(x));
249 max(1.51b0, F(x))$
251 max(-inf, minf, log(2), 3/4);
252 3/4$
254 max(3,1,4,1,5,9,2,6,5,3);
257 min(3,1,4,1,5,9,2,6,5,3);
260 max(%pi, %e, %phi);
261 %pi$
263 min(%pi, %e, %phi);
264 %phi$
266 max(inf,107);
267 inf$
269 max(-inf,107);
270 107$
272 max(max(a,b),max(c,d));
273 max(a,b,c,d)$
275 min(min(a,b),min(c,d));
276 min(a,b,c,d)$
278 min(max(a,b),min(c,d));
279 min(c,d,max(a,b))$
281 min(min(a,b),min(c,d));
282 min(a,b,c,d)$
284 max(1-x,1+x,x);
285 max(1-x,1+x)$
288 /* Examples from Stavros Macrakis. These are slow for maxmin_effort > 3, so we'll try maxmin_effort = 2*/
289 (maxmin_effort : 2,0)$
292 lreduce('min,makelist(a[i],i,1,20));
293 min(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])$
295 rreduce('min,makelist(a[i],i,1,20));
296 min(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])$
298 xreduce('min,makelist(a[i],i,1,20));
299 min(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])$
301 tree_reduce('min,makelist(a[i],i,1,20));
302 min(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])$
304 lreduce('max,makelist(a[i],i,1,20));
305 max(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])$
307 rreduce('max,makelist(a[i],i,1,20));
308 max(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])$
310 xreduce('max,makelist(a[i],i,1,20));
311 max(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])$
313 tree_reduce('max,makelist(a[i],i,1,20));
314 max(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])$
316 (maxmin_effort : 10,0)$
319 min(a,max(b,c));
320 min(a,max(b,c))$
322 max(x^2,x^4,x^6);
323 max(x^2,x^6)$
325 min(x^2,x^4,x^6);
326 min(x^2,x^6)$
328 max(a,min(b,max(c,min(d,a-1)))); 
329 max(a,min(b,c))$
331 max(a,min(a,max(c,min(d,a-1))));
334 (load(unwind_protect),0);
337 block([cntx : newcontext()],
338   unwind_protect(
339       (assume(a<b, b<c),
340       min(a,max(b,c))),
341       killcontext(cntx)));
344 block([cntx : newcontext()],
345   unwind_protect(
346       (assume(b<a, a<c),
347       min(a,max(b,c))),
348       killcontext(cntx)));
351 block([cntx : newcontext()],
352   unwind_protect(
353       (assume(b<c, c< a),
354       min(a,max(b,c))),
355       killcontext(cntx)));
358 block([cntx : newcontext()],
359   unwind_protect(
360       (assume(a<b, b<c,c<d),
361       max(a,min(b,max(c,d)))),
362       killcontext(cntx)));
365 block([cntx : newcontext()],
366   unwind_protect(
367       (assume(b<a, a<c,c< d),
368       max(a,min(b,max(c,d)))),
369       killcontext(cntx)));
372 block([cntx : newcontext()],
373   unwind_protect(
374       (assume(b<c,c<a,a< d),
375       max(a,min(b,max(c,d)))),
376       killcontext(cntx)));
379 block([cntx : newcontext()],
380   unwind_protect(
381       (assume(b<c,c<d,d<a),
382       max(a,min(b,max(c,d)))),
383       killcontext(cntx)));
386 (reset(maxmin_effort),0);
389 max(inf,inf+4);
390 inf$
392 min(inf,inf-2);
393 inf$
395 max(minf, minf+5);
396 minf$
398 max(minf,inf);
399 inf$
401 max(-inf,inf);
402 inf$
404 values;
407 contexts;
408 [initial,global]$