Fix bug #4307: partswitch affects op and operatorp
[maxima.git] / tests / rtest6a.mac
blobcfdb1337c67b92d6b77e0e4c623aeb65d27c0b6d
1 /*************** -*- Mode: MACSYMA; Package: MAXIMA -*-  ******************/
2 /***************************************************************************
3 ***                                                                    *****
4 ***     Copyright (c) 1984 by William Schelter,University of Texas     *****
5 ***     All rights reserved                                            *****
6 ***************************************************************************/
9 /* -*- Mode: MACSYMA -*- */
10 /* batch("me:test6a.mac");
11 It asked is a pos answred yes
12    and is i+1 zero or nonzero and I answered nonzero 
13   so should add assume (a>0,not(equal(i+1,0)))  */
14 kill(all);
15 done;
16 risch(x^2*erf(x),x);
17 (%pi*x^3*erf(x)+(sqrt(%pi)*x^2+sqrt(%pi))*%e^-x^2)/(3*%pi);
18 ev(diff(%,x),ratsimp);
19 x^2*erf(x);
20 assume(a>0);
21 [a>0];
22 'integrate(%e^(sqrt(a)*sqrt(y)),y,0,4);
23 'integrate(%e^(sqrt(a)*sqrt(y)),y,0,4);
24 changevar(%,y-z^2/a,z,y);
25 /* on lispm -2*('integrate(z*%e^abs(z),z,-2*sqrt(a),0))/a; */
26 - 'integrate(2*z*%e^abs(z)/a,z,-2*sqrt(a),0);
27 x+y/z^2;
28 y/z^2+x;
29 part(%,1,2,2);
31 remvalue(x);
32 [false];
33 'integrate(f(x),x,a,b)+x;
34 'integrate(f(x),x,a,b)+x;
35 part(%,1,1);
36 f(x);
37 x^2+2*x = y^2;
38 x^2+2*x = y^2;
39 exp:%+1;
40 x^2+2*x+1 = y^2+1;
41 lhs(%);
42 x^2+2*x+1;
43 part(exp,2);
44 y^2+1;
45 part(%,1);
46 y^2;
47 27*y^3+54*x*y^2+36*x^2*y+y+8*x^3+x+1;
48 27*y^3+54*x*y^2+36*x^2*y+y+8*x^3+x+1;
49 part(%,2,[1,3]);
50 54*y^2;
51 sqrt(piece/54);
52 abs(y);
53 x+y+w*z;
54 w*z+y+x;
55 inpart(%,3,2);
57 'limit(f(x)^g(x+1),x,0,minus);
58 'limit(f(x)^g(x+1),x,0,minus);
59 inpart(%,1,2);
60 g(x+1);
61 'limit(f(x)^g(x+1),x,0,minus);
62 'limit(f(x)^g(x+1),x,0,minus);
63 is(inpart(%,0) = nounify(limit));
64 true;
65 dpart(x+y/z^2,1,2,1);
66 y/?mbox(z)^2+x;
67 exp:expand((b+a)^4);
68 b^4+4*a*b^3+6*a^2*b^2+4*a^3*b+a^4;
69 (b+a)^2*(y+x)^2;
70 (b+a)^2*(y+x)^2;
71 expand(%);
72 b^2*y^2+2*a*b*y^2+a^2*y^2+2*b^2*x*y+4*a*b*x*y+2*a^2*x*y+b^2*x^2+2*a*b*x^2+a^2*x^2;
73 exp:exp/%;
74 (b^4+4*a*b^3+6*a^2*b^2+4*a^3*b+a^4)/(b^2*y^2+2*a*b*y^2+a^2*y^2+2*b^2*x*y+4*a*b*x*y+2*a^2*x*y+b^2*x^2+2*a*b*x^2+a^2*x^2);
75 factor(%);
76 (b+a)^2/(y+x)^2;
77 dpart(exp,2,4);
78 (b^4+4*a*b^3+6*a^2*b^2+4*a^3*b+a^4)/(b^2*y^2+2*a*b*y^2+a^2*y^2+?mbox(2*b^2*x*y)+4*a*b*x*y+2*a^2*x*y+b^2*x^2+2*a*b*x^2+a^2*x^2);
79 part(exp,2,4);
80 2*b^2*x*y;
82 op(x+y);
83 "+"$
85 operatorp(x+y,"+");
86 true$
87 operatorp(x+y,["+"]);
88 true$
89 operatorp(x+y,["*"]);
90 false$
91 operatorp(x+y,"*");
92 false$
94 /* Bug #4307: partswitch affects op and operatorp */
95 block([partswitch:false],errcatch(op('x)));
96 [];
97 block([partswitch:true],errcatch(op('x)));
98 [];
99 block([partswitch:false],errcatch(operatorp('x,'end)));
101 block([partswitch:true],errcatch(operatorp('x,'end)));
104 subst(a,x+y,x+(x+y)^2+y);
105 y+x+a^2;
106 subst(-%i,%i,a+b*%i);
107 a-%i*b;
108 subst(x,y,x+y);
109 2*x;
110 subst(x = 0,diff(sin(x),x));
112 errcatch(ev(diff(sin(x),x),x = 0));
114 (assume(not(equal(i,-1))),0);
116 ev(integrate(x^i,x),i = -1);
117 log(x);
118 errcatch(subst(-1,i,integrate(x^i,x)));
120 matrix([a,b],[c,d]);
121 matrix([a,b],[c,d]);
122 subst("[",matrix,%);
123 [[a,b],[c,d]];
124 ratsubst(a,x*y^2,x^4*y^8+x^4*y^3);
125 a*x^3*y+a^4;
126 1+cos(x)+cos(x)^2+cos(x)^3+cos(x)^4;
127 cos(x)^4+cos(x)^3+cos(x)^2+cos(x)+1;
128 ratsubst(1-sin(x)^2,cos(x)^2,%);
129 sin(x)^4-3*sin(x)^2+cos(x)*(2-sin(x)^2)+3;
130 ratsubst(1-cos(x)^2,sin(x)^2,sin(x)^4);
131 cos(x)^4-2*cos(x)^2+1;
133 /* SF bug #2907: ratsubst(z, sin(x + 1), 0) crashes when radsubstflag = true */
135 ratsubst (z, sin(x + 1), 0), radsubstflag=true;
138 ratsubst (z, sin(2*x), 0), radsubstflag=true;
141 ratsubst (z, log(x + 1), 0), radsubstflag=true;
144 ratsubst (u, sqrt(x), x), radsubstflag=true;
145 u^2;
147 /* additional ratsubst/radsubstflag cases -- dunno how meaningful these are, oh well */
149 ratsubst (z, sin(x + 1), 1 + sin(x + 1)^2), radsubstflag=false;
150 1 + z^2;
152 ratsubst (z, sin(x + 1), 1 + sin(x + 1)^2), radsubstflag=true;
153 1 + z^2;
155 ratsubst (z, sqrt(x + 1), 1 + (x + 1)^2), radsubstflag=false;
156 2 + 2*x + x^2;
158 ratsubst (z, sqrt(x + 1), 1 + (x + 1)^2), radsubstflag=true;
159 2 + 2*x + x^2;
161 ratsubst (z, sqrt(x + 1), 1 + (x + 1)^(3/2)), radsubstflag=false;
162 1 + z^3;
164 ratsubst (z, sqrt(x + 1), 1 + (x + 1)^(3/2)), radsubstflag=true;
165 1 + z^3;
167 /* SF bug #3658: "" */
169 ratsubst (1.1, x, 0.001*cos(x));
170 cos(11/10)/1000;
172 (load(lrats), 0);
175 /* SF bug #4176: fullratsubst
176    In these examples, we make sure that both forms of calling
177    fullratsubst work as described in the documentation.
179 fullratsubst(3*z^8 + 13, z^9, 147*z^13 -637);
180 35721*z^8+1911*z^4+5733*z^3+17199*z^2+51597*z+154154;
182 fullratsubst(z^9 = 3*z^8 + 13, 147*z^13 -637);
183 35721*z^8+1911*z^4+5733*z^3+17199*z^2+51597*z+154154;
185 fullratsubst([z^9 = 3*z^8 + 13], 147*z^13 -637);
186 35721*z^8+1911*z^4+5733*z^3+17199*z^2+51597*z+154154;
189 /* The following are examples from the documentation for
190    fullratsubst, ratsubst and fullratsubstflag
192 lratsubst ([a^2 = b, c^2 = d], (a + e)*c*(a + c));
193 (d + a*c)*e + a*d + b*c;
195 lratsubst (a^2 = b, a^3);
196 a*b;
198 ratsubst (b*a, a^2, a^3);
199 a^2*b;
201 fullratsubst (b*a, a^2, a^3);
202 a*b^2;
204 fullratsubst ([a^2 = b, b^2 = c, c^2 = a], a^3*b*c);
207 fullratsubst (a^2 = b*a, a^3);
208 a*b^2;
210 /* SF bug #3376: fullratsubst doesn't catch infinite recursions
211    In this example, fullratsubst1 should loop exactly lrats_max_iter=30 times,
212    adding a power of b each time.
214 fullratsubst(b*a^2,a^2,a^3), lrats_max_iter=30;
215 a^3*b^30;
217 /* SF bug #3706: lratsusbst causes bind stack overflow on large lists */
218 block([l:makelist(concat('x,i)=concat('x,i+1),i,0,5000)], lratsubst(l,x0)) $
219 x5001 $
221 /* SF bug #3154 lratsubst NOT as described in Help file */
222 lratsubst([[a=b,b=c]],a) $
223 c $
225 /* first argument to lratsbust should throw an error */
226 errcatch(lratsubst([[a=b,b=c],[b=c]],a)) $
227 [] $
229 lratsubst ([phi_2 = 1.1], 0.001*cos(phi_2)), numer;
230 0.001*cos(11/10);
232 /* original example from #3658;
233  * note that this assumes load(lrats) already.
234  * result is not checked, just whether or not it runs without error.
235  */
236 block ([mat21,theta_1,mat22,phi_2,theta_2,mat23,t,t1,t2,fl,theta1,theta2,phi2,tt],
237 [mat21:matrix([cos(theta_1/2),
238 %i*sin(theta_1/2)],[%i*sin(theta_1/2),
239 cos(theta_1/2)]),
240 mat22:matrix([cos(theta_2/2)
241 *exp(%i*phi_2/2),
242 %i*sin(theta_2/2)*exp(%i*phi_2/2)],
243 [%i*sin(theta_2/2)*exp(-%i*phi_2/2),cos(theta_2/2)
244 *exp(-%i*phi_2/2)]),
245 mat23:mat21.mat22,
246 t:expand(mat23[2,2]*mat23[1,1]),
247 t1:expand(demoivre(t)),
248 t2:trigsimp(trigreduce(2*t1-1))],
249 fl:true,
250 for theta1:0 thru %pi step 1.1 do  
251 for theta2:0 thru %pi step 1.1 do 
252 for phi2:0  thru 2*%pi step 1.1
253 do (tt:float(ev(lratsubst([theta_1=theta1,theta_2=theta2,phi_2=phi2],
254 abs(t2-(cos(theta_1)*cos(theta_2) - sin(theta_1)*sin(theta_2)*cos(phi_2)))),
255 numer)),
256 if tt>1e-5 then(fl:false,disp(tt))),
261 /* SF bug #2012: "Lisp stack overflow with dpart." */
263 dpart(cos(a+b),1);
264 cos(?mbox(a+b));
266 /* SF bug #3390: "?great mishandles box" */
268 ?great(box(x+t),-box(x+t));
269 true;
271 ?great(-box(x+t),box(x+t));
272 false;
274 /* SF bug #3848: "ratsubst error ZEROP: ((MMINUS) 1) is not a number" */
276 (kill (y),
277  d:-(3^(3/2)*%i+1)^(1/2)/3,
278  ratsubst(y,5,d));
279 -(sqrt(3^(3/2)*%i+1)/3);
281 ratsubst (1, 1, -1/2);
282 -1/2;
284 kill(all);
285 done;