From: Robert D. <rob...@us...> - 2005-07-28 02:21:23
|
Update of /cvsroot/maxima/maxima/tests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20838/tests Added Files: rtestmcond_display.mac mcond_display_elseif.mac mcond_display_elseif.out Log Message: Modify display code so that if -- then -- elseif is displayed correctly. This fixes SF bug report # 649934. No changes to parser (elseif parses correctly) or evaluation code. - src/displa.lisp: modify DIM-MCOND (called when display2d is true) - src/grind.lisp: modify MSZ-MCOND (called when display2d is false, and by the functions string and grind) - tests/rtestmcond_display.mac: new file, with input & expected result (however, didn't put it on the list of files in tests/testsuite.lisp) - tests/mcond_display_elseif.mac: new file, list of if -- then -- elseif examples - tests/mcond_display_elseif.out: new file, expected output of mcond_display_elseif.mac Tested on Maxima 5.9.1cvs on gcl 2.6.6 and clisp 2.33.1 (both Linux). - run_testsuite reports no unexpected errors - batch ("tests/rtestmcond_display.mac", test) reports no errors (this test compares string output, which is formatted via MSZ-MCOND) - batch ("tests/mcond_display_elseif.mac") is the same (as determined by "diff") as tests/mcond_display_elseif.out which was inspected to see that the output is correct (2-dimensional console output is formatted via DIM-MCOND) - batching several share files which contain if -- then -- else shows that both DIM-MCOND (display2d: true) and MSZ-MCOND (display2d: false) yield the same output, as determined by diff, for if -- then -- else as before they were changed (there are no share files which contain elseif) --- NEW FILE: rtestmcond_display.mac --- kill (all); done; string ('(if a > b then c else d)); "if a > b then c else d"; string ('if a > b then c else d); "if a > b then c else d"; string ('(if a > b then c)); "if a > b then c"; string ('if a > b then c); "if a > b then c"; string ('(if a then if b then if c then d else if e then f else g else if h then i else j else k)); "if a then (if b then (if c then d else (if e then f else g)) else (if h then i else j)) else k"; string ('if a then 'if b then 'if c then d else 'if e then f else g else 'if h then i else j else k); "if a then (if b then (if c then d else (if e then f else g)) else (if h then i else j)) else k"; string ('(if a then b)); "if a then b"; string ('(if a then b else d)); "if a then b else d"; string ('(if a then b elseif c then false)); "if a then b elseif c then false"; string ('(if a then b elseif c then d)); "if a then b elseif c then d"; string ('(if a then b elseif c then d else f)); "if a then b elseif c then d else f"; string ('(if a then b elseif c then d elseif e then false)); "if a then b elseif c then d elseif e then false"; string ('(if a then b elseif c then d elseif e then f)); "if a then b elseif c then d elseif e then f"; string ('(if a then b elseif c then d elseif e then f else h)); "if a then b elseif c then d elseif e then f else h"; string ('(if a then b elseif c then d elseif e then f elseif g then false)); "if a then b elseif c then d elseif e then f elseif g then false"; string ('(if a then b elseif c then d elseif e then f elseif g then h)); "if a then b elseif c then d elseif e then f elseif g then h"; string ('if a then b); "if a then b"; string ('if a then b else d); "if a then b else d"; string ('if a then b elseif c then false); "if a then b elseif c then false"; string ('if a then b elseif c then d); "if a then b elseif c then d"; string ('if a then b elseif c then d else f); "if a then b elseif c then d else f"; string ('if a then b elseif c then d elseif e then false); "if a then b elseif c then d elseif e then false"; string ('if a then b elseif c then d elseif e then f); "if a then b elseif c then d elseif e then f"; string ('if a then b elseif c then d elseif e then f else h); "if a then b elseif c then d elseif e then f else h"; string ('if a then b elseif c then d elseif e then f elseif g then false); "if a then b elseif c then d elseif e then f elseif g then false"; string ('if a then b elseif c then d elseif e then f elseif g then h); "if a then b elseif c then d elseif e then f elseif g then h"; (a: z^3, b: q/p, c: x < 1024, d: 1729.0, e: 'if a > b then c else d, f: 'if c < d then a elseif c < b then e else g, g: abs(r), h: %pi*e, 0); 0; string ('if a then b); "if z^3 then q/p"; string ('if a then b else d); "if z^3 then q/p else 1729.0"; string ('if a then b elseif c then false); "if z^3 then q/p elseif x < 1024 then false"; string ('if a then b elseif c then d); "if z^3 then q/p elseif x < 1024 then 1729.0"; string ('if a then b elseif c then d else f); "if z^3 then q/p elseif x < 1024 then 1729.0 else (if x < 1024 < 1729.0 then z^3 elseif x < 1024 < q/p then (if z^3 > q/p then x < 1024 else 1729.0) else g)"; string ('if a then b elseif c then d elseif e then false); "if z^3 then q/p elseif x < 1024 then 1729.0 elseif (if z^3 > q/p then x < 1024 else 1729.0) then false"; string ('if a then b elseif c then d elseif e then f); "if z^3 then q/p elseif x < 1024 then 1729.0 elseif (if z^3 > q/p then x < 1024 else 1729.0) then (if x < 1024 < 1729.0 then z^3 elseif x < 1024 < q/p then (if z^3 > q/p then x < 1024 else 1729.0) else g)"; string ('if a then b elseif c then d elseif e then f else h); "if z^3 then q/p elseif x < 1024 then 1729.0 elseif (if z^3 > q/p then x < 1024 else 1729.0) then (if x < 1024 < 1729.0 then z^3 elseif x < 1024 < q/p then (if z^3 > q/p then x < 1024 else 1729.0) else g) else %pi*(if z^3 > q/p then x < 1024 else 1729.0)"; string ('if a then b elseif c then d elseif e then f elseif g then false); "if z^3 then q/p elseif x < 1024 then 1729.0 elseif (if z^3 > q/p then x < 1024 else 1729.0) then (if x < 1024 < 1729.0 then z^3 elseif x < 1024 < q/p then (if z^3 > q/p then x < 1024 else 1729.0) else g) elseif abs(r) then false"; string ('if a then b elseif c then d elseif e then f elseif g then h); "if z^3 then q/p elseif x < 1024 then 1729.0 elseif (if z^3 > q/p then x < 1024 else 1729.0) then (if x < 1024 < 1729.0 then z^3 elseif x < 1024 < q/p then (if z^3 > q/p then x < 1024 else 1729.0) else g) elseif abs(r) then %pi*(if z^3 > q/p then x < 1024 else 1729.0)"; (postfix ("abc"), postfix ("xyz"), grind: true, linel: 65, 0); 0; /* NOTE: the literal strings in the remainder of this file * contain embedded tabs and newlines. */ string (my_union(x,y):=if x = [] then y else (if member(t:first(x),y) then my_union(rest(x),y) else cons(t,my_union(rest(x),y)))); "my_union(x,y):=if x = [] then y else (if member(t:first(x),y) then my_union(rest(x),y) else cons(t,my_union(rest(x),y)))" ; string (g(l):=catch(map(lambda([x],if x < 0 then throw(x) else f(x)),l))); "g(l):=catch(map(lambda([x],if x < 0 then throw(x) else f(x)),l))" ; string (typeof(x):=block([q],if numberp(x) then return(algebraic), if not atom(x) then return(maplist(typeof,x)), q:get(x,type), if q = false then error("not numeric") else q)); "typeof(x):=block([q],if numberp(x) then return(algebraic), if not atom(x) then return(maplist(typeof,x)), q:get(x,type), if q = false then error(\"not numeric\") else q)" ; string (closeto(e,tol):=block([numer:true,abse],abse:abs(e), if abse < tol then true else abse)); "closeto(e,tol):=block([numer:true,abse],abse:abs(e), if abse < tol then true else abse)" ; string (fib[n]:=if n = 1 or n = 2 then 1 else fib[n-1]+fib[n-2]); "fib[n]:=if n = 1 or n = 2 then 1 else fib[n-2]+fib[n-1]" ; string (eta(mu,nu):=if mu = nu then mu else (if mu > nu then mu-nu else mu+nu)); "eta(mu,nu):=if mu = nu then mu else (if mu > nu then mu-nu else nu+mu)" ; string ('(if not 5 >= 2 and 6 <= 5 or 5 > 3 then a else b)); "if not 5 >= 2 and 6 <= 5 or 5 > 3 then a else b" ; string ('(for i thru 10 do (guess:subst(guess,x,0.5*(x+10/x)), if abs(guess^2-10) < 5.0E-5 then return(guess)))); "for i thru 10 do (guess:subst(guess,x,0.5*(x+10/x)), if abs(guess^2-10) < 5.0E-5 then return(guess))" ; string (newton(f,guess):=block([numer,y],local(f,df,x,guess),numer:true, define(df(x),diff(f(x),x)), do (y:df(guess), if y = 0 then error("derivative at",guess,"is zero"), guess:guess-f(guess)/y, if abs(f(guess)) < 5.0E-6 then return(guess)))); "newton(f,guess):=block([numer,y],local(f,df,x,guess),numer:true, define(df(x),diff(f(x),x)), do (y:df(guess), if y = 0 then error(\"derivative at\",guess,\"is zero\"), guess:guess-f(guess)/y, if abs(f(guess)) < 5.0E-6 then return(guess)))" ; string ('(extremal_subset(set(2*sqrt(7),1.4B0,a,b+a), lambda([x],if atom(x) then 0 else 1),max))); "extremal_subset(set(2*sqrt(7),1.4B0,a,b+a), lambda([x],if atom(x) then 0 else 1),max)" ; string (rprimep(i,j):=block([], if integerp(i) and integerp(j) then (if gcd(i,j) > 1 then 0 else 1) else funmake(rprimep,[i,j]))); "rprimep(i,j):=block([], if integerp(i) and integerp(j) then (if gcd(i,j) > 1 then 0 else 1) else funmake(rprimep,[i,j]))" ; string ('(extremal_subset(set(2*sqrt(7),1.4B0,a,b+a), lambda([x], if foo(x) then (if atom(x) then 0 else 1)! abc! xyz! else (if bar(x) then glob else blurf)),max))); "extremal_subset(set(2*sqrt(7),1.4B0,a,b+a), lambda([x], if foo(x) then (if atom(x) then 0 else 1)! abc! xyz! else (if bar(x) then glob else blurf)),max)" ; --- NEW FILE: mcond_display_elseif.mac --- linel: 65$ kill (all)$ '(if a > b then c else d); 'if a > b then c else d; '(if a > b then c); 'if a > b then c; '(if a then if b then if c then d else if e then f else g else if h then i else j else k); 'if a then 'if b then 'if c then d else 'if e then f else g else 'if h then i else j else k; '(if a then b); '(if a then b else d); '(if a then b elseif c then false); '(if a then b elseif c then d); '(if a then b elseif c then d else f); '(if a then b elseif c then d elseif e then false); '(if a then b elseif c then d elseif e then f); '(if a then b elseif c then d elseif e then f else h); '(if a then b elseif c then d elseif e then f elseif g then false); '(if a then b elseif c then d elseif e then f elseif g then h); 'if a then b; 'if a then b else d; 'if a then b elseif c then false; 'if a then b elseif c then d; 'if a then b elseif c then d else f; 'if a then b elseif c then d elseif e then false; 'if a then b elseif c then d elseif e then f; 'if a then b elseif c then d elseif e then f else h; 'if a then b elseif c then d elseif e then f elseif g then false; 'if a then b elseif c then d elseif e then f elseif g then h; (a: z^3, b: q/p, c: x < 1024, d: 1729.0, e: 'if a > b then c else d, f: 'if c < d then a elseif c < b then e else g, g: abs(r), h: %pi*e, 0); 'if a then b; 'if a then b else d; 'if a then b elseif c then false; 'if a then b elseif c then d; 'if a then b elseif c then d else f; 'if a then b elseif c then d elseif e then false; 'if a then b elseif c then d elseif e then f; 'if a then b elseif c then d elseif e then f else h; 'if a then b elseif c then d elseif e then f elseif g then false; 'if a then b elseif c then d elseif e then f elseif g then h; --- NEW FILE: mcond_display_elseif.out --- (%i1) '(if a > b then c else d) (%o1) if a > b then c else d (%i2) if a > b then c else d (%o2) if a > b then c else d (%i3) '(if a > b then c) (%o3) if a > b then c (%i4) if a > b then c (%o4) if a > b then c (%i5) '(if a then (if b then (if c then d else (if e then f else g)) else (if h then i else j)) else k) (%o5) if a then (if b then (if c then d else (if e then f else g)) else (if h then i else j)) else k (%i6) if a then (if b then (if c then d else (if e then f else g)) else (if h then i else j)) else k (%o6) if a then (if b then (if c then d else (if e then f else g)) else (if h then i else j)) else k (%i7) '(if a then b) (%o7) if a then b (%i8) '(if a then b else d) (%o8) if a then b else d (%i9) '(if a then b elseif c then false) (%o9) if a then b elseif c then false (%i10) '(if a then b elseif c then d) (%o10) if a then b elseif c then d (%i11) '(if a then b elseif c then d else f) (%o11) if a then b elseif c then d else f (%i12) '(if a then b elseif c then d elseif e then false) (%o12) if a then b elseif c then d elseif e then false (%i13) '(if a then b elseif c then d elseif e then f) (%o13) if a then b elseif c then d elseif e then f (%i14) '(if a then b elseif c then d elseif e then f else h) (%o14) if a then b elseif c then d elseif e then f else h (%i15) '(if a then b elseif c then d elseif e then f elseif g then false) (%o15) if a then b elseif c then d elseif e then f elseif g then false (%i16) '(if a then b elseif c then d elseif e then f elseif g then h) (%o16) if a then b elseif c then d elseif e then f elseif g then h (%i17) if a then b (%o17) if a then b (%i18) if a then b else d (%o18) if a then b else d (%i19) if a then b elseif c then false (%o19) if a then b elseif c then false (%i20) if a then b elseif c then d (%o20) if a then b elseif c then d (%i21) if a then b elseif c then d else f (%o21) if a then b elseif c then d else f (%i22) if a then b elseif c then d elseif e then false (%o22) if a then b elseif c then d elseif e then false (%i23) if a then b elseif c then d elseif e then f (%o23) if a then b elseif c then d elseif e then f (%i24) if a then b elseif c then d elseif e then f else h (%o24) if a then b elseif c then d elseif e then f else h (%i25) if a then b elseif c then d elseif e then f elseif g then false (%o25) if a then b elseif c then d elseif e then f elseif g then false (%i26) if a then b elseif c then d elseif e then f elseif g then h (%o26) if a then b elseif c then d elseif e then f elseif g then h 3 q (%i27) (a : z , b : -, c : x < 1024, d : 1729.0, p e : if a > b then c else d, f : if c < d then a elseif c < b then e else g, g : abs(r), h : %pi e, 0) (%o27) 0 (%i28) if a then b 3 q (%o28) if z then - p (%i29) if a then b else d 3 q (%o29) if z then - else 1729.0 p (%i30) if a then b elseif c then false 3 q (%o30) if z then - elseif x < 1024 then false p (%i31) if a then b elseif c then d 3 q (%o31) if z then - elseif x < 1024 then 1729.0 p (%i32) if a then b elseif c then d else f 3 q (%o32) if z then - elseif x < 1024 then 1729.0 p 3 q else (if x < 1024 < 1729.0 then z elseif x < 1024 < - p 3 q then (if z > - then x < 1024 else 1729.0) else g) p (%i33) if a then b elseif c then d elseif e then false 3 q (%o33) if z then - elseif x < 1024 then 1729.0 p 3 q elseif (if z > - then x < 1024 else 1729.0) then false p (%i34) if a then b elseif c then d elseif e then f 3 q (%o34) if z then - elseif x < 1024 then 1729.0 p 3 q elseif (if z > - then x < 1024 else 1729.0) p 3 q then (if x < 1024 < 1729.0 then z elseif x < 1024 < - p 3 q then (if z > - then x < 1024 else 1729.0) else g) p (%i35) if a then b elseif c then d elseif e then f else h 3 q (%o35) if z then - elseif x < 1024 then 1729.0 p 3 q elseif (if z > - then x < 1024 else 1729.0) p 3 q then (if x < 1024 < 1729.0 then z elseif x < 1024 < - p 3 q then (if z > - then x < 1024 else 1729.0) else g) p 3 q else %pi (if z > - then x < 1024 else 1729.0) p (%i36) if a then b elseif c then d elseif e then f elseif g then false 3 q (%o36) if z then - elseif x < 1024 then 1729.0 p 3 q elseif (if z > - then x < 1024 else 1729.0) p 3 q then (if x < 1024 < 1729.0 then z elseif x < 1024 < - p 3 q then (if z > - then x < 1024 else 1729.0) else g) elseif abs(r) p then false (%i37) if a then b elseif c then d elseif e then f elseif g then h 3 q (%o37) if z then - elseif x < 1024 then 1729.0 p 3 q elseif (if z > - then x < 1024 else 1729.0) p 3 q then (if x < 1024 < 1729.0 then z elseif x < 1024 < - p 3 q then (if z > - then x < 1024 else 1729.0) else g) elseif abs(r) p 3 q then %pi (if z > - then x < 1024 else 1729.0) p |