# A simple manual testbench

This testbench allows to test writing and reading of files, to test if rendering works, if the
communication with maxima works (Cell/Evaluate all cells) and if the export commands
work right.

Limitations:
 * We need more test cases.
 * This test isn't automatic.

## Completely manual tests

There are a few tests that cannot be run automatically by this test bench:
 * If no text is selected the F1 key should start up the help system with help on
wxMaxima
 * If a maxima command is selected F1 should start up the help system with help on
Maxima instead.

## All cell types

### Subsection cells

### Sub-sub-section cells

### Sub-sub-sub-section cells

### Sub-sub-sub-sub-section cells

### A text cell

This is a text cell.
It spans over two lines.

Line wrapping in extremely long cells: abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz

An extremely long word:
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
TEst

Two extremely long words:
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
TEst

Two subsequent spaces between words: abcdef  abcdef  abcdef  abcdef  abcdef 
abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef 
abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef  abcdef 
abcdef  

 A space in front of a long line: abcdef abcdef abcdef abcdef abcdef abcdef abcdef
abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef
abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef  

A text cell that begins and ends with a newline.

Letters with spaces inbetween:

a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U
V W X Y Z 1 2 3 4 5 6 7 8 9 10

Letters with non-breakable spaces inbetween:
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 10

### A subsubsection cell

### Simple input and output cells

Simple input cells without output cell

x(n):=sum(x[i],i,1,n)$

y(n):=sum(y[i],i,1,n)$
z(n):=sum(z[i],i,1,n)$

A input cell with output cell

x;

A simple input cell containing a line break

x+
y;

What happens if the output is multiple lines long?

x(1)=1;x(10)=1;x(100)=1;

### All ways to express a multiplication in TeX

Variable letters that are longer than one character are distinguished by multiplications
of single-letter variable names by using \mathit{}.
This means that in this case wxMaxima will have to do the spacing shown in the
following output cell by hand.

a*b;
aa*b;
a*bb;
a_1*b;
a_1*bb;
a*b_1;
aa*b_1;

### Remembering answers

The following cell should answer two questions automatically with "y" and "n":

askinteger(yes);
askinteger(n);
kill(yes)$kill(n)$erro;

### abs

abs(x(1));
abs(x(10));
abs(x(100));

### box

box(x(1));
box(x(10));
box(x(100));
box(a/b);

box(x(1),1);
box(x(10),10);
box(x(100),100);
box(a/b,3);

box(x(1),"1");
box(x(10),"10");
box(x(100),"100");
box(a/b,"3");

box(x(1),a);
box(x(10),b);
box(x(100),c);
box(a/b,d);

box(x(1),aaaaaaaaaaaaaaaaaaaaaaaa);
box(x(10),bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb);
box(x(100),cccccccccccccccc);
box(a/b,dddddddddddddddddddddd);

box(x(1),"highlight");
box(x(10),"highlight");
box(x(100),"highlight");
box(a/b,"highlight");

e;

### diff

'diff(x(1),t);
'diff(x(10),t);
'diff(x(100),t);

### at

x(1)@10;
x(10)@a;
x(100)@t33;

### A conjugate cell

declare(
    [
 c00,c01,c02,c03,c04,c05,c06,c07,c08,c09,
        c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,
        c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,
        c30,c31,c32,c33,c34,c35,c36,c37,c38,c39,
        c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,
        c50,c51,c52,c53,c54,c55,c56,c57,c58,c59,
        c60,c61,c62,c63,c64,c65,c66,c67,c68,c69,
        c70,c71,c72,c73,c74,c75,c76,c77,c78,c79,
        c80,c81,c82,c83,c84,c85,c86,c87,c88,c89,
        c90,c91,c92,c93,c94,c95,c96,c97,c98,c99,
        c100
    ], complex)$
depends(
    [
        c00,c01,c02,c03,c04,c05,c06,c07,c08,c09,
        c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,
    c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,
        c30,c31,c32,c33,c34,c35,c36,c37,c38,c39,
        c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,
c50,c51,c52,c53,c54,c55,c56,c57,c58,c59,
        c60,c61,c62,c63,c64,c65,c66,c67,c68,c69,
        c70,c71,c72,c73,c74,c75,c76,c77,c78,c79,
        c80,c81,c82,c83,c84,c85,c86,c87,c88,c89,
        c90,c91,c92,c93,c94,c95,c96,c97,c98,c99,
        c100
    ], t)$
c_1:  c00$
c_10: c00+c01+c02+c03+c04+c05+c06+c07+c08+c09$
c_100:c00+c01+c02+c03+c04+c05+c06+c07+c08+c09+
      c10+c11+c12+c13+c14+c15+c16+c17+c18+c19+
      c20+c21+c22+c23+c24+c25+c26+c27+c28+c29+
      c30+c31+c32+c33+c34+c35+c36+c37+c38+c39+
      c40+c41+c42+c43+c44+c45+c46+c47+c48+c49+
      c50+c51+c52+c53+c54+c55+c56+c57+c58+c59+
      c60+c61+c62+c63+c64+c65+c66+c67+c68+c69+
      c70+c71+c72+c73+c74+c75+c76+c77+c78+c79+
 c80+c81+c82+c83+c84+c85+c86+c87+c88+c89+
      c90+c91+c92+c93+c94+c95+c96+c97+c98+c99+
      c100$

conjugate(c_1);
conjugate(c_10);
conjugate(c_100);

### ExptCells

### Automatic line breaks

exp(sum(x[i],i,1,1));
exp(sum(x[i],i,1,3));
exp(sum(x[i],i,1,100));

### Vertical alignment

exp(a/b);

exp(sin(a^2/b));

(1+exp(1/sin(a^2/b)))^2;

### Fractions in exponents

Fractions in exponents are displayed as 1D maths

%e^(1/3);%e^(-1/3);

### Frac cells

Here we test 
 * if a minus in front of and following the fraction is displayed right,
 * If fractions still work if the denominator is bigger than the numerator
   or vice versa
 * if extremely long fractions are broken into a separate lines

x(1)/y(1);
x(1)/y(10);
x(1)/y(100);x(10)/y(1);x(100)/y(1);
x(100)/y(100);

(a_1+1/(1+(a_2+1/(a_3+1/a_4))))/(b_1+1/(1+(b_2+1/(b_3+1/b_4))))=5;

a:1/b$
for i:1 thru 75 do a:subst(b=1/b+1,a)$
a;
kill(a)$

### Function cells

f(x):=3;
f12345689(x):=3;
f12345689012345689012345689012345689012345689012345689012345689012345689012345689012345689(x):=3;

### Image cells

A small plot

wxplot_size:[300,200]$
wxdraw2d(
    color=red,line_type=solid,key="solid red",explicit(x,x,-10,10),
    color=black,line_type=dots,key="dotted black",explicit(x+5,x,-10,10)
);

A huge plot indicating if scaling down plots that are bigger than the screen works.

wxplot_size:[2000,1500]$
wxdraw2d(
    color=red,line_type=solid,line_width=10,key="solid red",explicit(sin(x),x,-10,10)
);

A reasonably-sized plot

wxplot_size:[600,400]$
wxdraw2d(
    color=red,line_type=solid,key="solid red",explicit(x,x,-10,10),
    color=black,line_type=dots,key="dotted black",explicit(x+5,x,-10,10)
);

Poldino the guinea pig

Scalable ginger horses

An image cell in the middle of the output:

x=1;
wxdraw2d(
    color=red,line_type=solid,key="solid red",explicit(x,x,-10,10),
    color=black,line_type=dots,key="dotted black",explicit(x+5,x,-10,10)
);
x=2;

The following plot contains all linestyles the system might support if the configuration
option to use cairo was selected.
Support for linestyles greatly depends on the gnuplot used, though.

wxdraw2d(
    color=black,
    line_type=solid,key="solid",explicit(-x,x,0,10),
    line_type=dashes,key="dashes",explicit(-x+1,x,0,10),
    line_type=short_dashes,key="short dashes",explicit(-x+2,x,0,10),
    line_type=short_long_dashes,key="short long dashes",explicit(-x+3,x,0,10),
    line_type=short_short_long_dashes,key="short short long dashes",explicit(-x+4,x,0,10),
    line_type=short_long_dashes,key="short long dashes",explicit(-x+5,x,0,10),
    line_type=dot_dash,key="dot dash",explicit(-x+6,x,0,10),
    line_type=dots,key="dots",explicit(-x+7,x,0,10)
);

### Integral cells

f(n):=sum(f[i](t),i,1,n)$
g(n):=sum(g[i](t),i,1,n)$

Definite Integrals

integrate(f(1),t,0,T);
integrate(f(10),t,0,T);
integrate(f(100),t,0,T);

Indefinite Integrals

integrate(f(1),t);
integrate(f(10),t);
integrate(f(100),t);

'integrate(sin(x),x,1,a(x)/b(x));

'integrate(sin(x),x,a(x)/b(x),1);

'integrate(sin(x),x,1,a(x)/(1+1/b(x)));

'integrate(sin(x),x,a(x)/(1+1/b(x)),1);

### Interval cells

interval(-∞,1);
interval(1,2);
interval(1,∞);

interval(-∞,1/2);
interval(1/2,2/3);
interval(1/2,∞);

interval(-∞,1/21334234141124124214124124214214211244211421241214241412412421);
interval(1/2,2/33324123423413214321423422431342243123423123123123124323442132431);
interval(1/21212212132113232121332123123321132231321321231321321321231312321231231,∞);

interval(-∞,1/2,5);
interval(1/2,2/3,7);
interval(1/2,7,∞);

### Limit cells

'limit(f(  1),t,0);
'limit(f(  1),t,inf);
'limit(f(  1),t,-inf);

'limit(f( 10),t,0);
'limit(f( 10),t,inf);
'limit(f( 10),t,-inf);

'limit(f(100),t,0);
'limit(f(100),t,inf);
'limit(f(100),t,-inf);

### List cells

makelist(i,i,1,0);

makelist(i,i,1,1);

makelist(i/2,i,1,1);

makelist(i,i,1,10);

makelist(i/2,i,1,10);

makelist(i,i,1,100);

makelist(i/2,i,1,100);

### Set cells

apply('set,makelist(i,i,1,0));

apply('set,makelist(i,i,1,1));

apply('set,makelist(i/2,i,1,1));

apply('set,makelist(i,i,1,10));

apply('set,makelist(i/2,i,1,10));

apply('set,makelist(i,i,1,100));

apply('set,makelist(i/2,i,1,100));

### Matrix cells

### Rounded parenthesis

lmxchar:"("$rmxchar:")"$

funmake('matrix,  
    [makelist(i,i,1,10)]
);
funmake('matrix,  
    makelist([i],i,1,10)
);
funmake('matrix,  
    makelist(
        makelist(o+10*i-10,o,1,10)
    ,i,1,10
)
);

### Square parenthesis

lmxchar:"["$rmxchar:"]"$

funmake('matrix,  
    [makelist(i,i,1,10)]
);
funmake('matrix,  
    makelist([i],i,1,10)
);
funmake('matrix,  
    makelist(
        makelist(o+10*i-10,o,1,10)
    ,i,1,10
)
);

### Straight parenthesis

lmxchar:"|"$rmxchar:"|"$

funmake('matrix,  
    [makelist(i,i,1,10)]
);
funmake('matrix,  
    makelist([i],i,1,10)
);
funmake('matrix,  
    makelist(
        makelist(o+10*i-10,o,1,10)
    ,i,1,10
)
);

### Angled parenthesis

lmxchar:"<"$rmxchar:">"$

funmake('matrix,  
    [makelist(i,i,1,10)]
);
funmake('matrix,  
    makelist([i],i,1,10)
);
funmake('matrix,  
    makelist(
        makelist(o+10*i-10,o,1,10)
    ,i,1,10
)
);

### No parenthesis

lmxchar:" "$rmxchar:" "$

funmake('matrix,  
    [makelist(i,i,1,10)]
);
funmake('matrix,  
    makelist([i],i,1,10)
);
funmake('matrix,  
    makelist(
        makelist(o+10*i-10,o,1,10)
    ,i,1,10
)
);

### Parenthesis cells

There are three types of parenthesis in wxMaxima:
 * Ordinary Parenthesis
 * Big parenthesis created using a special letter
 * And parenthesis that are assembled of an upper half, an lower half and vertical lines
inbetween

(x(1  )/10+1)*2;
(x(10 )/10+1)*2;
(x(100)/10+1)*2;
max(1/10,sin((((a/b+1)/c+1)/d+1)/e));
sin(a/(b+sin(c+1/(1+d/(1+e/(1+f/(1+g/h)))))));

Test the vertical alignment

sin(x/a+sin(x/a+sin(x/a+sin(x/a+sin(x/a+sin(x/a+sin(x/a+sin(x/a+sin(x/a+sin(x/a))))))))));

Test if the vertical size is correct if big parenthesis are broken into lines.

a;sin(a/(b+c/(d+e/f))+qdqwldwqkldkqwlk+wqwqlwqlkdkdlcs+wqqdlqqwlk+wdwqdqwqwlklwqkl+qwfwqflwfqkqwlkwqföl+wqldkwqwlkö+aklsalcakclksa+sqlkqklwqxxqwlxwklq+aslasxklxksxlö);b;

### Slide show cells

A clock with autoplay

wxplot_size:[200,200]$
wxanimate_framerate:1$wxanimate_autoplay:true$
with_slider_draw(
    t,makelist(f,f,0,59),
    title=sconcat(t," s"),
    proportional_axes=xy,xrange=[-1,1],yrange=[-1,1],
    parametric(r*sin(2*%pi/60*t),r*cos(2*%pi/60*t),r,0,1),
    grid=true
)$

A clock without autoplay

wxanimate_autoplay:false$
with_slider_draw(
    t,makelist(f,f,0,59),
    title=sconcat(t," s"),
    proportional_axes=xy,xrange=[-1,1],yrange=[-1,1],
    parametric(r*sin(2*%pi/60*t),r*cos(2*%pi/60*t),r,0,1),
    grid=true
)$

wxanimate_from_imgfiles("a.png","b.png","c.png","d.png")$

wxanimate_from_imgfiles(["a.png","b.png","c.png","d.png"])$

show_image("ad.gif")$

with_slider_draw(
    t,makelist(i,i,1,10),
    file_name="animation",
    explicit(
        sin(t*x),
        x,-2,2
        )
)$

### sqrt cells

sqrt(x(1));
sqrt(x(10));
sqrt(x(100));

### Sub cells

x[x(1)];
x[x(10)];
x[x(100)];

x[x[x[x[1]]]];

### SubSupcells

x[x(1)]^x(1)+1;
x[x(1)]^x(10)+1;
x[x(10)]^x(1)+1;

x[x(100)]^x(100)+1;

x[x[x[x[1]]]]^y^z^a^b;

Four arrows pointing to an O:

lst:listify(permutations([[postsubscript,↖], [postsuperscript,↙], [presuperscript,↘], [presubscript,↗]]))$
for i in lst do
(apply (
        ndex_properties, [O, makelist(o[1],o,i)]), 
    print (arraymake (O, makelist(o[2],o,i))))$

Three arrows pointing to an O:

for i in unique(sort(map('rest,lst))) do
(apply (declare_index_properties, [O, makelist(o[1],o,i)]), 
    print (arraymake (O, makelist(o[2],o,i))))$

Two arrows pointing to an O:

for i in unique(sort(map('rest,map('rest,lst)))) do
(apply (declare_index_properties, [O, makelist(o[1],o,i)]), 
    print (arraymake (O, makelist(o[2],o,i))))$

One arrow pointing to an O:

for i in unique(sort(map('rest,map('rest,map('rest,lst))))) do
(apply (declare_index_properties, [O, makelist(o[1],o,i)]), 
    print (arraymake (O, makelist(o[2],o,i))))$

### SumCells

'sum(f(1),t,1,1);
'sum(f(10),t,1,1);
'sum(f(100),t,1,1);

'lsum(f(1),t,yi);
'lsum(f(10),t,yi);
'lsum(f(100),t,yi);

'sum(f(1)/g(1),t,1,1);
'sum(f(10)/g(10),t,1,1);
'sum(f(100)/g(100),t,1,1);

'lsum(f(1)/g(1),t,yi);
'lsum(f(10)/g(10),t,yi);
'lsum(f(100)/g(100),t,yi);

'sum(a/sin((a+b/2)),a,1,10);

### ProductCells

'prod(f(1),t,1,1);
'prod(f(10),t,1,1);
'prod(f(100),t,1,1);

'lsum(f(1),t,yi);
'lsum(f(10),t,yi);
'lsum(f(100),t,yi);

'prod(f(1)/g(1),t,1,1);
'prod(f(10)/g(10),t,1,1);
'prod(f(100)/g(100),t,1,1);

'lprod(f(1)/g(1),t,yi);
'lprod(f(10)/g(10),t,yi);
'lprod(f(100)/g(100),t,yi);

'prod(a/sin((a+b/2)),a,1,10);

### Pagebreak Cells

## Other features

### Was GnuPlot packaged with a charset that supports greek
characters?

wxdraw2d(title="Greek characters: {/Symbol awWl}",
    explicit(sin(x),x,1,10),
    xtics=false,ytics=false
),wxplot_size=[300,150]$

### Highlighting and Boxes

1+box(x(1))+z;

1+box(x(10))+z;

1+box(x(100))+z;

### Item lists

 * Level 1
   Level 1 (continued)
Level 1 (continued again)
 * Level 1
   * Level 2 
     Level 2 (continued)
     Level 2 (continued again)
     * Level 3
 * Level 1

Ordinary text 
  * Bullet list item #1
  * Bullet list item #2 is long enough that it is broken into at least two lines. The second
line is still indented: Test Test Test Test Test Test Test Test Test Test Test Test Test
Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test
Test Test Test Test Test Test Test Test Test Test 
    After this line break we continue the second item with a long piece of text: Test Test
Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test
Test Test Test Test Test Test Test Test
Ordinary text

### Block quotes

Ordinary text
> quote quote quote quote quote quote quote quote quote quote quote quote quote
quote quote quote 
> quote quote quote quote quote quote quote quote quote quote quote quote quote
quote quote quote
> quote quote quote quote quote quote quote quote quote quote quote quote quote
quote quote quote
Ordinary text

This is ordinary text
 > This is a block quoote. It is long enough that it should be broken into at least two
lines. Still every line begins with a quotation marker: Test Test Test Test Test Test Test
Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test
Test Test Test Test Test Test Test Test Test Test Test Test Test 

### Special symbols the export functions recognize

 * A double right arrow (=>)
 * A double dual-headed arrow (<=>)
 * A single right arrow (->)
 * A long right arrow -->
 * A single left arrow (<-)
 * A single double-headed arrow (<->)
 * A equal or less than sign (<=)
 * A equal or greater than sign (>=)
 * A plus/minus-sign (+/-)

Many unicode characters:
αβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ½²³√ⅈⅇℏ∈∃∄⇒∞∅▶▸⋀⋁⊻⊼⊽⇔±¬⋃⋂⊆⊂⊄ħĦ∂∫≅∝≠≤≥≪≫≣∑∏∥⟂↝→⟶∎

### How does the lisp maxima is working with handle special
characters?

There once has been a case where maxima interpreted special characters like
an µ correctly - but output them in a way that resulted in a broken xml file
on saving as .wxmx. If after executing the following line the .wxmx file can
be saved and opened again this bug is not present in the currently running
maxima/lisp combination.

wxdraw2d(title="Test of the µ character",
    explicit(sin(x),x,1,10),
    xtics=false,ytics=false
),wxplot_size=[300,150];

print("µ")$

### Uncode characters in general

wrΩαβwf

ö=3;

### wxbuild_info()

wxbuild_info();

### Text that isn't transferred from maxima to wxMaxima using
XML

### Test with lines ending in a $

printf(true,"Ordinary text")$

(
    disp("XML Text"),
    printf(true,"Text enclosed by equations"),
    disp("XML Text")
);

printf(true,"Text followed by equations")$
x=2;

(
    printf(true,"Text followed by equations"),
    disp("XML Text")
);

(
    disp("XML Text"),
    printf(true,"Text following equations")
);

### Test with lines ending in a ;

printf(true,"Ordinary text");

(
    disp("XML Text"),
    printf(true,"Text enclosed by equations")
);

(
    printf(true,"Text enclosed by equations"),
    disp("XML Text")
);

printf(true,"Text followed by equations")$
x=2;

(
    printf(true,"Text followed by equations"),
    disp("XML Text")
);

(
    disp("XML Text"),
    printf(true,"Text following equations")
)$

### Transfer of partial lines

### Can we continue a line we have started to output?

for i:0 thru 1000 do printf(true,"t");

### Can we output two lines in one command?

printf(true,"line1~%line2~%")$

### Can we output two lines in two commands?

printf(true,"line3~%")$
printf(true,"line4~%")$

### Lisp code

In-line lisp code

testval:1;

:lisp (defvar $testval2 $testval)

if testval2 # testval then error("The execution of lisp code wasn't successful.")$

Lisp ode spread across multiple cells

to_lisp();

(format nil "test");

(to-maxima)

## Miscellaneous things that did get wrong at least once

### Maxima's integrated help browser

? cabs;

### Cell height calculations

The cell height is calculated by GroupCell::Draw, GroupCell::RecalculateAppended
and by GroupCell::RecalculateHeight. Once upon a time these functions were not in
sync.

sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/sqrt(a/b))))))))))))))))))));

sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);
sqrt(a/b);

for i:1 thru 20 do printf(true,"test~%");

### Labels that contain escaped characters

### A label that begins with a number

\1:2;
if \1≠2 then error("Label \1 doesn't hold the right value!")$

### A label that contains a comma

a\,1:test;

### Leading spaces in front of characters that in XML need to
be quoted

One of the following signs should be indented.

print(" <=>")$
print("<=>")$

The contents of this list should still be indented after a load/save cycle.

[
    "test",
    "test2"
]$

### The graphics system

Maxima's INSTALL.win32 does request to test the following commands:

    wxplot2d(sin(x),[x,0,10])$
    wxplot2d(sin(x),[x,0,10],[plot_format,xmaxima])$
    wxplot3d(x*y,[x,-1,1],[y,-1,1])$

    wxdraw3d(xu_grid = 30, yv_grid = 60, surface_hide = true,
          parametric_surface(cos(phi) * sin(theta),
             sin(phi) * sin(theta),
              cos(theta),
                       theta, 0, %pi, phi, 0, 2 * %pi))$

The new python-vtk interface should create an interactive graphics out of this:

### Former crashes

The following cells at least once crashed wxMaxima on windows and are therefore
included into the testbench:

a: (x+y)^2;

α=1;

α:1;
kill(α);

Bauteilwerte:[
    α=1
];

### Constructs that don't make sense but still can be displayed

(makelist(c01,i,1,2)+c01);
%(1);

{0,1}(1);

### A weird windows parenthesis issue

The following equation had a weird parenthesis issue on windows once while it
worked fine
on linux.

f(x,y):=x^2*(1-exp((y-sqrt(3*G)*x)^2*(L^2/x^2-0.5)*((R+y)/(R(R-K+y)))/G) )/(R+y)^2;

### Mouseover ToolTips

A long number that (hopefully) is shortened by wxMaxima and that therefore will be
equipped with a Mouseover tooltip:

longnum:100^ 1000;

Let's see if tooltips are provided for the insides of all cell types:

abs(longnum+a);
'diff(longnum*x,x+longnum);
'test@longnum;
conjungate(longnum+a);
(a+longnum)^(b+longnum);
(a+longnum)/(b+longnum);
'integrate(a+''longnum,a,-longnum,longnum);
'limit(a+longnum,a,longnum);
matrix([longnum]);
sqrt(a+longnum);
a[longnum];
'(a[''longnum]^''longnum);
'sum(a+''longnum,a,-longnum,longnum);

### Special cases for the TeX export

Function names should be exported as upright text:

function(x):=10;

For equations LaTeX uses a font that uses spacing that makes clear that ab means
"a*b". We therefore
need to make sure that a variable named "ab" isn't displayed in this way.

ab≠a*b;

What makes this more complicated is that the auto-subscript mechanism adds more
corner cases here:

a_b*c;
a*b_c;
a_b*c;
aa*b_c;
a*bb_c;
aa*bb_c;
aa_c*b;
a_c*bb;
aa_c*bb;

### A thing that is easy to break.

(
    disp("An equation"),
    disp("Another equation issued by the same command")
);

"A new command";

## Weird variable names for the variables watchlist

a\,1:3;

a\ 1:4;

a\ \#:5;

## Warning messages we know MouseOver tooltips for

### The info about ratprint

solve(1.1*x=2,x)$

## Warnings about chars that are easily confused

### Latin only (firing way too often)

I*l;

### Cyrillic+Latin

### Firing way too often

І*l;

І*I;

### Identical

Ѕ*S;

Ј*J;

А*A;

В*B;

Е*E;

К*K;

М*M;

Н*H;

О*O;

Р*P;

С*C;

Т*T;

Х*X;

а*a;

е*e;

о*o;

р*p;

с*c;

у*y;

х*x;

ѕ*s;

### Discernable (at least in my font)

У*Y;

### Greek+Latin

### Complete lookalikes

Α*A;

Β*B;

Ε*E;

Ζ*Z;

Η*H;

Κ*K;

M*Μ;

Ν*N;

Ο*O;

P*Ρ;

T*Τ;

Y*Υ;

ο*o;

### Potential lookalikes that look different to each other in my
font

τ*t;

χ*x;

υ*u;

### Greek+cyrillic

### Identical

ѡ*ω;

Ѳ*Θ;

### Differs in my font

θ*ѳ;

### Two similar chars in one cell

Y*Υ;
ο*o;

### Strikethrough chars

ø*⌀;

∅*⌀;

∅*⊘;

ø*⊘;