1% Tests of the COMPACT package.
2
3% Author: Anthony C. Hearn.
4
5% First some simple examples.
6
7aa := {cos(x)^2+sin(x)^2-1};
8
9xx := 2*cos(x)^2+2*sin(x)^2-2;
10
11compact(xx,aa);
12
13xx := (1-cos(x)^2)^4;
14
15compact(xx,aa);
16
17% These examples are from Lars Hornfeldt.
18
19% This should be cos x^10*sin x^10.
20
21compact(((1-(sin x)**2)**5)*((1-(cos x)**2)**5)
22	    *(((sin x)**2+(cos x)**2)**5),
23	{cos x^2+sin x^2=1});
24
25% This example illustrates the problem in the above. It is cos(x)^6.
26
27compact(-3cos(x)^2*sin(x)^2-sin(x)^6+1,{cos x^2+sin x^2-1});
28
29compact(s*(1-(sin x**2))+c*(1-(cos x)**2)+(sin x)**2+(cos x)**2,
30	{cos x^2+sin x^2=1});
31
32xx := s*(1-(sin x**2))+c*(1-(cos x)**2)+(sin x)**2+(cos x)**2
33	*((sin x)**2+(cos x)**2)*(sin x)**499*(cos x)**499;
34
35compact(xx,{cos(x)^2+sin(x)^2=1});
36
37compact((s*(1-(sin x**2))+c*(1-(cos x)**2)+(sin x)**2+(cos x)**2)
38	     *((sin x)**2+(cos x)**2)*(sin x)**499*(cos x)**499,
39	 {cos x^2+sin x^2=1});
40
41compact(df((1-(sin x)**2)**4,x),{cos x^2+sin x^2=1});
42
43% End of Lars Hornfeld examples.
44
45xx := a*(cos(x)+2*sin(x))^3-w*(cos(x)-sin(x))^2;
46
47compact(xx,aa);
48
49xx := (1-cos(x)^2)^2+(1-sin(x)^2)^2;
50
51compact(xx,aa);
52
53xx := (c^2-1)^6+7(s-1)^4+23(c+s)^5;
54
55compact(xx,{c+s=1});
56
57yy := (c+1)^6*s^6+7c^4+23;
58
59compact(yy,{c+s=1});
60
61zz := xx^3+c^6*s^6$
62
63compact(zz,{c+s=1});
64
65xx := (c+s)^5 - 55(1-s)^2 + 77(1-c)^3 + (c+2s)^8;
66
67% This should reduce to something like:
68
69yy := 1 - 55c^2 + 77s^3 + (1+s)^8;
70
71% The result contains the same number but different terms.
72
73compact(xx,{c+s=1});
74
75compact(yy,{c+s=1});
76
77% Test showing order of expressions is important.
78
79d2:= - 4*r3a**2 - 4*r3b**2 - 4*r3c**2 + 3*r3**2$
80
81d1:=  4 * r3a**2 * r3
82   +  4 * r3b**2 * r3
83   +  4 * r3c**2 * r3
84   + 16 * r3a * r3b * r3c
85   -      r3**3$
86
87d0:= 16 * r3a**4
88   + 16 * r3b**4
89   + 16 * r3c**4
90   +       r3**4
91   - 32 * r3a**2 * r3b**2
92   - 32 * r3a**2 * r3c**2
93   - 32 * r3b**2 * r3c**2
94   -  8 * r3a**2 *  r3**2
95   -  8 * r3b**2 *  r3**2
96   -  8 * r3c**2 *  r3**2
97   - 64 * r3a * r3b * r3c * r3$
98
99alist := { c0 = d0, c1 = d1, c2 = d2}$
100
101blist := { c2 = d2, c1 = d1, c0 = d0}$
102
103d:= d2 * l*l + d1 * l + d0;
104
105compact(d,alist); % Works fine.
106
107compact(d,blist); % Only c2=d2 is applied.
108
109% This example illustrates why parallel application of the individual
110% side relations is necessary.
111
112lst:={x1=a+b+c, x2=a-b-c, x3=-a+b-c, x4=-a-b+c};
113
114z1:=(a+b+c)*(a-b-c)*(-a+b-c);    % This is x1*x2*x3.
115
116z2:=(a+b+c)*(a-b-c)*(-a+b-c)*(-a-b+c);   % This is x1*x2*x3*x4.
117
118compact(z1,lst); % Not the best solution but better than nothing.
119
120compact(z2,lst); % Does nothing.
121
122end;
123