1 | package symexpr
|
---|
2 |
|
---|
3 | import (
|
---|
4 | "testing"
|
---|
5 |
|
---|
6 | "fmt"
|
---|
7 | "math"
|
---|
8 | )
|
---|
9 |
|
---|
10 | func Test_SimpLeafs(TEST *testing.T) {
|
---|
11 | fmt.Printf("Testing: Simplifying Leafs ")
|
---|
12 | var rules = DefaultRules()
|
---|
13 |
|
---|
14 | t := NewTime()
|
---|
15 | t_simp := t.Simplify(rules)
|
---|
16 | if t != t_simp {
|
---|
17 | TEST.Fatalf("FAIL Time: t != t_simp ~ %v -> %v", t, t_simp)
|
---|
18 | } else {
|
---|
19 | TEST.Logf("Time Simp: %v -> %v", t, t_simp)
|
---|
20 | }
|
---|
21 |
|
---|
22 | v := NewVar(0)
|
---|
23 | v_simp := v.Simplify(rules)
|
---|
24 | if v != v_simp {
|
---|
25 | TEST.Fatalf("FAIL Var: v != v_simp ~ %v ->%v", v, v_simp)
|
---|
26 | } else {
|
---|
27 | TEST.Logf("Var Simp: %v -> %v", v, v_simp)
|
---|
28 | }
|
---|
29 |
|
---|
30 | c := NewConstant(0)
|
---|
31 | c_simp := c.Simplify(rules)
|
---|
32 | if c != c_simp {
|
---|
33 | TEST.Fatalf("FAIL Constant: c != c_simp ~ %v -> %v", c, c_simp)
|
---|
34 | } else {
|
---|
35 | TEST.Logf("Constant Simp %v -> %v", c, c_simp)
|
---|
36 | }
|
---|
37 |
|
---|
38 | s := NewSystem(0)
|
---|
39 | s_simp := s.Simplify(rules)
|
---|
40 | if s != s_simp {
|
---|
41 | TEST.Fatalf("FAIL System: s != s_simp ~ %v -> %v", s, s_simp)
|
---|
42 | } else {
|
---|
43 | TEST.Logf("System Simp: %v -> %v", s, s_simp)
|
---|
44 | }
|
---|
45 |
|
---|
46 | f := NewConstantF(3.141529)
|
---|
47 | f_simp := f.Simplify(rules)
|
---|
48 | if f != f_simp {
|
---|
49 | TEST.Fatalf("FAIL ConstantF: f != f_simp ~ %v -> %v", f, f_simp)
|
---|
50 | } else {
|
---|
51 | TEST.Logf("ConstantF Simp: %v -> %v", f, f_simp)
|
---|
52 | }
|
---|
53 |
|
---|
54 | n := NewConstantF(math.NaN())
|
---|
55 | n_simp := n.Simplify(rules)
|
---|
56 | if n_simp != nil {
|
---|
57 | TEST.Fatalf("FAIL NaN: n_simp != nil ~ %v -> %v", n, n_simp)
|
---|
58 | } else {
|
---|
59 | TEST.Logf("NaN Simp: %v -> %v", n, n_simp)
|
---|
60 | }
|
---|
61 |
|
---|
62 | i := NewConstantF(math.Inf(1))
|
---|
63 | i_simp := i.Simplify(rules)
|
---|
64 | if i_simp != nil {
|
---|
65 | TEST.Fatalf("FAIL Inf: i == i_simp ~ %v -> %v", i, i_simp)
|
---|
66 | } else {
|
---|
67 | TEST.Logf("Inf Simp: %v -> %v", i, i_simp)
|
---|
68 | }
|
---|
69 |
|
---|
70 | fmt.Printf("Passed\n")
|
---|
71 | }
|
---|
72 |
|
---|
73 | func Test_SimpNeg(TEST *testing.T) {
|
---|
74 | fmt.Printf("Testing: Simplifying Neg ")
|
---|
75 | var rules = DefaultRules()
|
---|
76 |
|
---|
77 | nn := NewNeg(nil)
|
---|
78 | nn_simp := nn.Simplify(rules)
|
---|
79 | if nn_simp != nil {
|
---|
80 | TEST.Fatalf("FAIL NegNil: nn_simp != nil ~ %v -> %v", nn, nn_simp)
|
---|
81 | } else {
|
---|
82 | TEST.Logf("NegNil: %v -> %v", nn, nn_simp)
|
---|
83 | }
|
---|
84 |
|
---|
85 | nl := NewNeg(NewNull())
|
---|
86 | nl_simp := nl.Clone().Simplify(rules)
|
---|
87 | if nl_simp != nil {
|
---|
88 | TEST.Fatalf("FAIL NegNull: nn_simp != Null ~ %v -> %v", nl, nl_simp)
|
---|
89 | } else {
|
---|
90 | TEST.Logf("NegNull: %v -> %v", nl, nl_simp)
|
---|
91 | }
|
---|
92 |
|
---|
93 | nv := NewNeg(NewVar(0))
|
---|
94 | nv_simp := nv.Simplify(rules)
|
---|
95 | if nv != nv_simp {
|
---|
96 | TEST.Fatalf("FAIL NegVar: nv != nv_simp ~ %v -> %v", nv, nv_simp)
|
---|
97 | } else {
|
---|
98 | TEST.Logf("NegVar: %v -> %v", nv, nv_simp)
|
---|
99 | }
|
---|
100 |
|
---|
101 | c := NewConstant(0)
|
---|
102 | nc := NewNeg(c)
|
---|
103 | nc_simp := nc.Clone().Simplify(rules)
|
---|
104 | if !c.AmISame(nc_simp) {
|
---|
105 | TEST.Fatalf("FAIL NegConst: c != nc_simp ~ %v -> %v", nc, nc_simp)
|
---|
106 | } else {
|
---|
107 | TEST.Logf("NegConst: %v -> %v", nc, nc_simp)
|
---|
108 | }
|
---|
109 |
|
---|
110 | m := NewMul()
|
---|
111 | m.Insert(NewVar(0))
|
---|
112 | m.Insert(NewConstant(0))
|
---|
113 | nm := NewNeg(m)
|
---|
114 | nm_simp := nm.Clone().Simplify(rules)
|
---|
115 | if !nm_simp.AmISame(m) {
|
---|
116 | TEST.Fatalf("FAIL NegMul: m != nm_simp ~ %v -> %v", nm, nm_simp)
|
---|
117 | } else {
|
---|
118 | TEST.Logf("NegMul: %v -> %v", nm, nm_simp)
|
---|
119 | }
|
---|
120 |
|
---|
121 | fmt.Printf("Passed\n")
|
---|
122 | }
|
---|
123 |
|
---|
124 | func Test_SimpAbs(TEST *testing.T) {
|
---|
125 | fmt.Printf("Testing: Simplifying Abs ")
|
---|
126 | var rules = DefaultRules()
|
---|
127 |
|
---|
128 | nn := NewAbs(nil)
|
---|
129 | nn_simp := nn.Clone().Simplify(rules)
|
---|
130 | if nn_simp != nil {
|
---|
131 | TEST.Fatalf("FAIL AbsNil: nn_simp != nil ~ %v -> %v", nn, nn_simp)
|
---|
132 | } else {
|
---|
133 | TEST.Logf("AbsNil: %v -> %v", nn, nn_simp)
|
---|
134 | }
|
---|
135 |
|
---|
136 | nl := NewAbs(NewNull())
|
---|
137 | nl_simp := nl.Clone().Simplify(rules)
|
---|
138 | if nl_simp != nil {
|
---|
139 | TEST.Fatalf("FAIL AbsNull: nn_simp != Null ~ %v -> %v", nl, nl_simp)
|
---|
140 | } else {
|
---|
141 | TEST.Logf("AbsNull: %v -> %v", nl, nl_simp)
|
---|
142 | }
|
---|
143 |
|
---|
144 | nv := NewAbs(NewVar(0))
|
---|
145 | nv_simp := nv.Simplify(rules)
|
---|
146 | if !nv.AmISame(nv_simp) {
|
---|
147 | TEST.Fatalf("FAIL AbsVar: nv != nv_simp ~ %v -> %v", nv, nv_simp)
|
---|
148 | } else {
|
---|
149 | TEST.Logf("AbsVar: %v -> %v", nv, nv_simp)
|
---|
150 | }
|
---|
151 |
|
---|
152 | c := NewConstant(0)
|
---|
153 | nc := NewAbs(c)
|
---|
154 | nc_simp := nc.Simplify(rules)
|
---|
155 | if !nc.AmISame(nc_simp) {
|
---|
156 | TEST.Fatalf("FAIL AbsConst: c != nc_simp ~ %v -> %v", nc, nc_simp)
|
---|
157 | } else {
|
---|
158 | TEST.Logf("AbsConst: %v -> %v", nc, nc_simp)
|
---|
159 | }
|
---|
160 |
|
---|
161 | m := NewMul()
|
---|
162 | m.Insert(NewVar(0))
|
---|
163 | m.Insert(NewConstant(0))
|
---|
164 | nm := NewAbs(m)
|
---|
165 | nm_simp := nm.Simplify(rules)
|
---|
166 | if !nm_simp.AmISame(nm) {
|
---|
167 | TEST.Fatalf("FAIL AbsMul: m != nm_simp ~ %v -> %v", nm, nm_simp)
|
---|
168 | } else {
|
---|
169 | TEST.Logf("AbsMul: %v -> %v", nm, nm_simp)
|
---|
170 | }
|
---|
171 |
|
---|
172 | fmt.Printf("Passed\n")
|
---|
173 | }
|
---|
174 |
|
---|
175 | func Test_SimpSqrt(TEST *testing.T) {
|
---|
176 | fmt.Printf("Testing: Simplifying Sqrt ")
|
---|
177 | var rules = DefaultRules()
|
---|
178 |
|
---|
179 | nn := NewSqrt(nil)
|
---|
180 | nn_simp := nn.Clone().Simplify(rules)
|
---|
181 | if nn_simp != nil {
|
---|
182 | TEST.Fatalf("FAIL SqrtNil: nn_simp != nil ~ %v -> %v", nn, nn_simp)
|
---|
183 | } else {
|
---|
184 | TEST.Logf("SqrtNil: %v -> %v", nn, nn_simp)
|
---|
185 | }
|
---|
186 |
|
---|
187 | nl := NewSqrt(NewNull())
|
---|
188 | nl_simp := nl.Clone().Simplify(rules)
|
---|
189 | if nl_simp != nil {
|
---|
190 | TEST.Fatalf("FAIL SqrtNull: nn_simp != Null ~ %v -> %v", nl, nl_simp)
|
---|
191 | } else {
|
---|
192 | TEST.Logf("SqrtNull: %v -> %v", nl, nl_simp)
|
---|
193 | }
|
---|
194 |
|
---|
195 | ns := NewSqrt(NewSqrt(NewVar(0)))
|
---|
196 | ns_simp := ns.Clone().Simplify(rules)
|
---|
197 | ns_corr := NewPowF(NewVar(0), 0.25)
|
---|
198 | if !ns_simp.AmISame(ns_corr) {
|
---|
199 | TEST.Fatalf("FAIL SqrtSqrt: ns_simp != ns_corr ~ %v -> %v == %v", ns, ns_simp, ns_corr)
|
---|
200 | } else {
|
---|
201 | TEST.Logf("SqrtSqrt: %v -> %v", ns, ns_simp)
|
---|
202 | }
|
---|
203 |
|
---|
204 | c := NewConstant(0)
|
---|
205 | nc := NewSqrt(c)
|
---|
206 | nc_simp := nc.Clone().Simplify(rules)
|
---|
207 | if !c.AmISame(nc_simp) {
|
---|
208 | TEST.Fatalf("FAIL SqrtConst: c != nc_simp ~ %v -> %v", nc, nc_simp)
|
---|
209 | } else {
|
---|
210 | TEST.Logf("SqrtConst: %v -> %v", nc, nc_simp)
|
---|
211 | }
|
---|
212 |
|
---|
213 | nf := NewSqrt(NewPowF(NewVar(0), 3.14))
|
---|
214 | nf_simp := nf.Clone().Simplify(rules)
|
---|
215 | nf_corr := NewPowF(NewVar(0), 3.14/2.0)
|
---|
216 | if !nf_simp.AmISame(nf_corr) {
|
---|
217 | TEST.Fatalf("FAIL SqrtPowF: nf_simp != nf_corr ~ %v -> %v == %v", nf, nf_simp, nf_corr)
|
---|
218 | } else {
|
---|
219 | TEST.Logf("SqrtPowF: %v -> %v", nf, nf_simp)
|
---|
220 | }
|
---|
221 |
|
---|
222 | ni1 := NewSqrt(NewPowI(NewVar(0), 1))
|
---|
223 | ni1_simp := ni1.Clone().Simplify(rules)
|
---|
224 | ni1_corr := NewSqrt(NewVar(0))
|
---|
225 | if !ni1_simp.AmISame(ni1_corr) {
|
---|
226 | TEST.Fatalf("FAIL SqrtPowI(ni1): ni1_simp != ni1_corr ~ %v -> %v == %v", ni1, ni1_simp, ni1_corr)
|
---|
227 | } else {
|
---|
228 | TEST.Logf("SqrtPowI(ni1): %v -> %v", ni1, ni1_simp)
|
---|
229 | }
|
---|
230 |
|
---|
231 | // ni1n := NewSqrt(NewPowI(NewVar(0),-1))
|
---|
232 | // ni1n_simp := ni1n.Clone().Simplify(rules)
|
---|
233 | // ni1n_corr := NewSqrt(NewVar(0))
|
---|
234 | // if !ni1n_simp.AmISame(ni1n_corr) {
|
---|
235 | // TEST.Fatalf( "FAIL SqrtPowI(ni1n): ni1n_simp != ni1n_corr ~ %v -> %v == %v", ni1n,ni1n_simp, ni1n_corr )
|
---|
236 | // } else {
|
---|
237 | // TEST.Logf( "SqrtPowI(ni1n): %v -> %v", ni1n,ni1n_simp )
|
---|
238 | // }
|
---|
239 | //
|
---|
240 | // ni2 := NewSqrt(NewPowI(NewVar(0),2))
|
---|
241 | // ni2_simp := ni2.Clone().Simplify(rules)
|
---|
242 | // ni2_corr := NewSqrt(NewVar(0))
|
---|
243 | // if !ni2_simp.AmISame(ni2_corr) {
|
---|
244 | // TEST.Fatalf( "FAIL SqrtPowI(ni2): ni2_simp != ni2_corr ~ %v -> %v == %v", ni2,ni2_simp, ni2_corr )
|
---|
245 | // } else {
|
---|
246 | // TEST.Logf( "SqrtPowI(ni2): %v -> %v", ni2,ni2_simp )
|
---|
247 | // }
|
---|
248 | //
|
---|
249 | // ni2n := NewSqrt(NewPowI(NewVar(0),-2))
|
---|
250 | // ni2n_simp := ni2n.Clone().Simplify(rules)
|
---|
251 | // ni2n_corr := NewSqrt(NewVar(0))
|
---|
252 | // if !ni2n_simp.AmISame(ni2n_corr) {
|
---|
253 | // TEST.Fatalf( "FAIL SqrtPowI(ni2n): ni2n_simp != ni2n_corr ~ %v -> %v == %v", ni2n,ni2n_simp, ni2n_corr )
|
---|
254 | // } else {
|
---|
255 | // TEST.Logf( "SqrtPowI(ni2n): %v -> %v", ni2n,ni2n_simp )
|
---|
256 | // }
|
---|
257 | //
|
---|
258 | // niOdd := NewSqrt(NewPowI(NewVar(0),3))
|
---|
259 | // niOdd_simp := niOdd.Clone().Simplify(rules)
|
---|
260 | // niOdd_corr := NewSqrt(NewVar(0))
|
---|
261 | // if !niOdd_simp.AmISame(niOdd_corr) {
|
---|
262 | // TEST.Fatalf( "FAIL SqrtPowI(niOdd): niOdd_simp != niOdd_corr ~ %v -> %v == %v", niOdd,niOdd_simp, niOdd_corr )
|
---|
263 | // } else {
|
---|
264 | // TEST.Logf( "SqrtPowI(niOdd): %v -> %v", niOdd,niOdd_simp )
|
---|
265 | // }
|
---|
266 | //
|
---|
267 | // niOddn := NewSqrt(NewPowI(NewVar(0),-3))
|
---|
268 | // niOddn_simp := niOddn.Clone().Simplify(rules)
|
---|
269 | // niOddn_corr := NewSqrt(NewVar(0))
|
---|
270 | // if !niOddn_simp.AmISame(niOddn_corr) {
|
---|
271 | // TEST.Fatalf( "FAIL SqrtPowI(niOddn): niOddn_simp != niOddn_corr ~ %v -> %v == %v", niOddn,niOddn_simp, niOddn_corr )
|
---|
272 | // } else {
|
---|
273 | // TEST.Logf( "SqrtPowI(niOddn): %v -> %v", niOddn,niOddn_simp )
|
---|
274 | // }
|
---|
275 | //
|
---|
276 | // ni2N := NewSqrt(NewPowI(NewVar(0),4))
|
---|
277 | // ni2N_simp := ni2N.Clone().Simplify(rules)
|
---|
278 | // ni2N_corr := NewSqrt(NewVar(0))
|
---|
279 | // if !ni2N_simp.AmISame(ni2N_corr) {
|
---|
280 | // TEST.Fatalf( "FAIL SqrtPowI(ni2N): ni2N_simp != ni2N_corr ~ %v -> %v == %v", ni2N,ni2N_simp, ni2N_corr )
|
---|
281 | // } else {
|
---|
282 | // TEST.Logf( "SqrtPowI(ni2N): %v -> %v", ni2N,ni2N_simp )
|
---|
283 | // }
|
---|
284 | //
|
---|
285 | // ni2Nn := NewSqrt(NewPowI(NewVar(0),-4))
|
---|
286 | // ni2Nn_simp := ni2Nn.Clone().Simplify(rules)
|
---|
287 | // ni2Nn_corr := NewSqrt(NewVar(0))
|
---|
288 | // if !ni2Nn_simp.AmISame(ni2Nn_corr) {
|
---|
289 | // TEST.Fatalf( "FAIL SqrtPowI(ni2Nn): ni2Nn_simp != ni2Nn_corr ~ %v -> %v == %v", ni2Nn,ni2Nn_simp, ni2Nn_corr )
|
---|
290 | // } else {
|
---|
291 | // TEST.Logf( "SqrtPowI(ni2Nn): %v -> %v", ni2Nn,ni2Nn_simp )
|
---|
292 | // }
|
---|
293 | //
|
---|
294 | //
|
---|
295 |
|
---|
296 | // the following should not change
|
---|
297 |
|
---|
298 | nv := NewSqrt(NewVar(0))
|
---|
299 | nv_simp := nv.Simplify(rules)
|
---|
300 | if nv != nv_simp {
|
---|
301 | TEST.Fatalf("FAIL SqrtVar: nv != nv_simp ~ %v -> %v", nv, nv_simp)
|
---|
302 | } else {
|
---|
303 | TEST.Logf("SqrtVar: %v -> %v", nv, nv_simp)
|
---|
304 | }
|
---|
305 |
|
---|
306 | m := NewMul()
|
---|
307 | m.Insert(NewVar(0))
|
---|
308 | m.Insert(NewConstant(0))
|
---|
309 | nm := NewSqrt(m)
|
---|
310 | nm_simp := nm.Simplify(rules)
|
---|
311 | if nm_simp != nm {
|
---|
312 | TEST.Fatalf("FAIL SqrtMul: nm != nm_simp ~ %v -> %v", nm, nm_simp)
|
---|
313 | } else {
|
---|
314 | TEST.Logf("SqrtMul: %v -> %v", nm, nm_simp)
|
---|
315 | }
|
---|
316 |
|
---|
317 | fmt.Printf("Passed\n")
|
---|
318 | }
|
---|
319 |
|
---|
320 | func Test_SimpAdd(TEST *testing.T) {
|
---|
321 | fmt.Printf("Testing: Simplifying Add ")
|
---|
322 | var rules = DefaultRules()
|
---|
323 |
|
---|
324 | an := NewAdd()
|
---|
325 | an.Insert(nil)
|
---|
326 | an_simp := an.Clone().Simplify(rules)
|
---|
327 | if an_simp != nil {
|
---|
328 | TEST.Fatalf("FAIL AddNil: an_simp != nil ~ %v -> %v", an, an_simp)
|
---|
329 | } else {
|
---|
330 | TEST.Logf("AddNil: %v -> %v", an, an_simp)
|
---|
331 | }
|
---|
332 |
|
---|
333 | al := NewAdd()
|
---|
334 | al.Insert(NewNull())
|
---|
335 | al_simp := al.Clone().Simplify(rules)
|
---|
336 | if al_simp != nil {
|
---|
337 | TEST.Fatalf("FAIL AddNull: nn_simp != Null ~ %v -> %v", al, al_simp)
|
---|
338 | } else {
|
---|
339 | TEST.Logf("AddNull: %v -> %v", al, al_simp)
|
---|
340 | }
|
---|
341 |
|
---|
342 | as := NewAdd()
|
---|
343 | as.Insert(NewVar(0))
|
---|
344 | as_simp := as.Clone().Simplify(rules)
|
---|
345 | as_corr := NewVar(0)
|
---|
346 | if !as_simp.AmISame(as_corr) {
|
---|
347 | TEST.Fatalf("FAIL AddVar: as_simp != as_corr ~ %v -> %v == %v", as, as_simp, as_corr)
|
---|
348 | } else {
|
---|
349 | TEST.Logf("AddVar: %v -> %v", as, as_simp)
|
---|
350 | }
|
---|
351 |
|
---|
352 | c := NewConstant(0)
|
---|
353 | ac := NewAdd()
|
---|
354 | ac.Insert(c)
|
---|
355 | ac_simp := ac.Clone().Simplify(rules)
|
---|
356 | if !c.AmISame(ac_simp) {
|
---|
357 | TEST.Fatalf("FAIL AddConst: c != ac_simp ~ %v -> %v", ac, ac_simp)
|
---|
358 | } else {
|
---|
359 | TEST.Logf("AddConst: %v -> %v", ac, ac_simp)
|
---|
360 | }
|
---|
361 |
|
---|
362 | // x + y
|
---|
363 | A1 := NewAdd()
|
---|
364 | A1.Insert(NewVar(0))
|
---|
365 | A1.Insert(NewVar(1))
|
---|
366 | // A1.CS[0], A1.CS[1] = A1.CS[1], A1.CS[0]
|
---|
367 | A1_simp := A1.Clone().Simplify(rules)
|
---|
368 | A1_corr := A1.Clone()
|
---|
369 | if !A1_simp.AmISame(A1_corr) {
|
---|
370 | TEST.Fatalf("FAIL Add_A1: A1_simp != A1_corr ~ %v -> %v == %v", A1, A1_simp, A1_corr)
|
---|
371 | } else {
|
---|
372 | TEST.Logf("AddVar: %v -> %v", A1, A1_simp)
|
---|
373 | }
|
---|
374 |
|
---|
375 | // x + x
|
---|
376 | A2 := NewAdd()
|
---|
377 | A2.Insert(NewVar(0))
|
---|
378 | A2.Insert(NewVar(0))
|
---|
379 | A2_simp := A2.Clone().Simplify(rules)
|
---|
380 | A2_corr := NewMul()
|
---|
381 | A2_corr.Insert(NewConstant(0))
|
---|
382 | A2_corr.Insert(NewVar(0))
|
---|
383 |
|
---|
384 | if !A2_simp.AmISame(A2_corr) {
|
---|
385 | TEST.Fatalf("FAIL Add_A2: A2_simp != A2_corr ~ %v -> %v == %v", A2, A2_simp, A2_corr)
|
---|
386 | } else {
|
---|
387 | TEST.Logf("AddVar: %v -> %v", A2, A2_simp)
|
---|
388 | }
|
---|
389 |
|
---|
390 | // x + x + y
|
---|
391 | A3 := NewAdd()
|
---|
392 | A3.Insert(NewVar(0))
|
---|
393 | A3.Insert(NewVar(0))
|
---|
394 | A3.Insert(NewVar(1))
|
---|
395 | A3_simp := A3.Clone().Simplify(rules)
|
---|
396 | A3_corr := NewAdd()
|
---|
397 | A3m := NewMul()
|
---|
398 | A3m.Insert(NewConstant(0))
|
---|
399 | A3m.Insert(NewVar(0))
|
---|
400 | A3_corr.Insert(A3m)
|
---|
401 | A3_corr.Insert(NewVar(1))
|
---|
402 | if !A3_simp.AmISame(A3_corr) {
|
---|
403 | TEST.Fatalf("FAIL Add_A3: A3_simp != A3_corr ~ %v -> %v == %v", A3, A3_simp, A3_corr)
|
---|
404 | } else {
|
---|
405 | TEST.Logf("AddVar: %v -> %v", A3, A3_simp)
|
---|
406 | }
|
---|
407 |
|
---|
408 | // x + ( x + y )
|
---|
409 | A4 := NewAdd()
|
---|
410 | A4.Insert(NewVar(0))
|
---|
411 | A4b := NewAdd()
|
---|
412 | A4b.Insert(NewVar(0))
|
---|
413 | A4b.Insert(NewVar(1))
|
---|
414 | A4.Insert(A4b)
|
---|
415 | A4_simp := A4.Clone().Simplify(rules)
|
---|
416 | A4_corr := NewAdd()
|
---|
417 | A4m := NewMul()
|
---|
418 | A4m.Insert(NewConstant(0))
|
---|
419 | A4m.Insert(NewVar(0))
|
---|
420 | A4_corr.Insert(A4m)
|
---|
421 | A4_corr.Insert(NewVar(1))
|
---|
422 | if !A4_simp.AmISame(A4_corr) {
|
---|
423 | TEST.Fatalf("FAIL Add_A4: A4_simp != A4_corr ~ %v -> %v == %v", A4, A4_simp, A4_corr)
|
---|
424 | } else {
|
---|
425 | TEST.Logf("AddVar: %v -> %v", A4, A4_simp)
|
---|
426 | }
|
---|
427 |
|
---|
428 | // F(x) + F(x)
|
---|
429 | // x^2 + x^2
|
---|
430 | A5 := NewAdd()
|
---|
431 | A5.Insert(NewPowI(NewVar(0), 2))
|
---|
432 | A5.Insert(NewPowI(NewVar(0), 2))
|
---|
433 | A5_simp := A5.Clone().Simplify(rules)
|
---|
434 | A5_corr := NewMul()
|
---|
435 | A5_corr.Insert(NewConstant(0))
|
---|
436 | A5_corr.Insert(NewPowI(NewVar(0), 2))
|
---|
437 | if !A5_simp.AmISame(A5_corr) {
|
---|
438 | TEST.Fatalf("FAIL Add_A5: A5_simp != A5_corr ~ %v -> %v == %v", A5, A5_simp, A5_corr)
|
---|
439 | } else {
|
---|
440 | TEST.Logf("AddVar: %v -> %v", A5, A5_simp)
|
---|
441 | }
|
---|
442 |
|
---|
443 | // cF(x) + dF(x)
|
---|
444 | // cx^3.14 + dx^3.15
|
---|
445 | A6 := NewAdd()
|
---|
446 | A6m1 := NewMul()
|
---|
447 | A6m2 := NewMul()
|
---|
448 | A6m1.Insert(NewConstant(0))
|
---|
449 | A6m1.Insert(NewPowF(NewVar(0), 3.14))
|
---|
450 | A6m2.Insert(NewConstant(0))
|
---|
451 | A6m2.Insert(NewPowF(NewVar(0), 3.14))
|
---|
452 | A6.Insert(A6m1)
|
---|
453 | A6.Insert(A6m2)
|
---|
454 | A6_simp := A6.Clone().Simplify(rules)
|
---|
455 | A6_corr := NewMul()
|
---|
456 | A6_corr.Insert(NewConstant(0))
|
---|
457 | A6_corr.Insert(NewPowF(NewVar(0), 3.14))
|
---|
458 | if !A6_simp.AmISame(A6_corr) {
|
---|
459 | TEST.Fatalf("FAIL Add_A6: A6_simp != A6_corr ~ %v -> %v == %v", A6, A6_simp, A6_corr)
|
---|
460 | } else {
|
---|
461 | TEST.Logf("AddVar: %v -> %v", A6, A6_simp)
|
---|
462 | }
|
---|
463 |
|
---|
464 | // cF(x) + F(x)
|
---|
465 | // cExp(x) + Exp(x)
|
---|
466 | A7 := NewAdd()
|
---|
467 | A7m1 := NewMul()
|
---|
468 | A7m1.Insert(NewConstant(0))
|
---|
469 | A7m1.Insert(NewExp(NewVar(0)))
|
---|
470 | A7.Insert(A7m1)
|
---|
471 | A7.Insert(NewExp(NewVar(0)))
|
---|
472 | A7_simp := A7.Clone().Simplify(rules)
|
---|
473 | A7_corr := NewMul()
|
---|
474 | A7_corr.Insert(NewConstant(0))
|
---|
475 | A7_corr.Insert(NewExp(NewVar(0)))
|
---|
476 | if !A7_simp.AmISame(A7_corr) {
|
---|
477 | TEST.Fatalf("FAIL Add_A7: A7_simp != A7_corr ~ %v -> %v == %v", A7, A7_simp, A7_corr)
|
---|
478 | } else {
|
---|
479 | TEST.Logf("AddVar: %v -> %v", A7, A7_simp)
|
---|
480 | }
|
---|
481 |
|
---|
482 | // F(x) + cF(x)
|
---|
483 | // sin(x) + csin(x)
|
---|
484 | A8 := NewAdd()
|
---|
485 | A8m2 := NewMul()
|
---|
486 | A8m2.Insert(NewConstant(0))
|
---|
487 | A8m2.Insert(NewSin(NewVar(0)))
|
---|
488 | A8.Insert(NewSin(NewVar(0)))
|
---|
489 | A8.Insert(A8m2)
|
---|
490 | A8_simp := A8.Clone().Simplify(rules)
|
---|
491 | A8_corr := NewMul()
|
---|
492 | A8_corr.Insert(NewConstant(0))
|
---|
493 | A8_corr.Insert(NewSin(NewVar(0)))
|
---|
494 | if !A8_simp.AmISame(A8_corr) {
|
---|
495 | TEST.Fatalf("FAIL Add_A8: A8_simp != A8_corr ~ %v -> %v == %v", A8, A8_simp, A8_corr)
|
---|
496 | } else {
|
---|
497 | TEST.Logf("AddVar: %v -> %v", A8, A8_simp)
|
---|
498 | }
|
---|
499 |
|
---|
500 | // F(x) - F(x)
|
---|
501 | // x - x
|
---|
502 | A9 := NewAdd()
|
---|
503 | A9.Insert(NewVar(0))
|
---|
504 | A9.Insert(NewNeg(NewVar(0)))
|
---|
505 | A9_simp := A9.Clone().Simplify(rules)
|
---|
506 | A9_corr := NewMul()
|
---|
507 | A9_corr.Insert(NewConstant(0))
|
---|
508 | A9_corr.Insert(NewVar(0))
|
---|
509 |
|
---|
510 | if !A9_simp.AmISame(A9_corr) {
|
---|
511 | TEST.Fatalf("FAIL Add_A9: A9_simp != A9_corr ~ %v -> %v == %v", A9, A9_simp, A9_corr)
|
---|
512 | } else {
|
---|
513 | TEST.Logf("AddVar: %v -> %v", A9, A9_simp)
|
---|
514 | }
|
---|
515 | // x + (-x+y)
|
---|
516 | A10 := NewAdd()
|
---|
517 | A10.Insert(NewVar(0))
|
---|
518 | A10b := NewAdd()
|
---|
519 | A10b.Insert(NewNeg(NewVar(0)))
|
---|
520 | A10b.Insert(NewVar(1))
|
---|
521 | A10.Insert(A10b)
|
---|
522 | A10_simp := A10.Clone().Simplify(rules)
|
---|
523 | A10_corr := NewAdd()
|
---|
524 | A10m := NewMul()
|
---|
525 | A10m.Insert(NewConstant(0))
|
---|
526 | A10m.Insert(NewVar(0))
|
---|
527 | A10_corr.Insert(A10m)
|
---|
528 | A10_corr.Insert(NewVar(1))
|
---|
529 | if !A10_simp.AmISame(A10_corr) {
|
---|
530 | TEST.Fatalf("FAIL Add_A10: A10_simp != A10_corr ~ %v -> %v == %v", A10, A10_simp, A10_corr)
|
---|
531 | } else {
|
---|
532 | TEST.Logf("AddVar: %v -> %v", A10, A10_simp)
|
---|
533 | }
|
---|
534 | // x^2 - x^2
|
---|
535 | A11 := NewAdd()
|
---|
536 | A11.Insert(NewPowI(NewVar(0), 2))
|
---|
537 | A11.Insert(NewNeg(NewPowI(NewVar(0), 2)))
|
---|
538 | A11_simp := A11.Clone().Simplify(rules)
|
---|
539 | A11_corr := NewMul()
|
---|
540 | A11_corr.Insert(NewConstant(0))
|
---|
541 | A11_corr.Insert(NewPowI(NewVar(0), 2))
|
---|
542 | if !A11_simp.AmISame(A11_corr) {
|
---|
543 | TEST.Fatalf("FAIL Add_A11: A11_simp != A11_corr ~ %v -> %v == %v", A11, A11_simp, A11_corr)
|
---|
544 | } else {
|
---|
545 | TEST.Logf("AddVar: %v -> %v", A11, A11_simp)
|
---|
546 | }
|
---|
547 |
|
---|
548 | // cF(x) - dF(x)
|
---|
549 | // cx^3.14 - dx^3.15
|
---|
550 | A12 := NewAdd()
|
---|
551 | A12m1 := NewMul()
|
---|
552 | A12m2 := NewMul()
|
---|
553 | A12m1.Insert(NewConstant(0))
|
---|
554 | A12m1.Insert(NewPowF(NewVar(0), 3.14))
|
---|
555 | A12m2.Insert(NewConstant(0))
|
---|
556 | A12m2.Insert(NewPowF(NewVar(0), 3.14))
|
---|
557 | A12.Insert(A12m1)
|
---|
558 | A12.Insert(NewNeg(A12m2))
|
---|
559 | A12_simp := A12.Clone().Simplify(rules)
|
---|
560 | A12_corr := NewMul()
|
---|
561 | A12_corr.Insert(NewConstant(0))
|
---|
562 | A12_corr.Insert(NewPowF(NewVar(0), 3.14))
|
---|
563 | if !A12_simp.AmISame(A12_corr) {
|
---|
564 | TEST.Fatalf("FAIL Add_A12: A12_simp != A12_corr ~ %v -> %v == %v", A12, A12_simp, A12_corr)
|
---|
565 | } else {
|
---|
566 | TEST.Logf("AddVar: %v -> %v", A12, A12_simp)
|
---|
567 | }
|
---|
568 |
|
---|
569 | // cF(x) - F(x)
|
---|
570 | // cExp(x) - Exp(x)
|
---|
571 | A13 := NewAdd()
|
---|
572 | A13m1 := NewMul()
|
---|
573 | A13m1.Insert(NewConstant(0))
|
---|
574 | A13m1.Insert(NewExp(NewVar(0)))
|
---|
575 | A13.Insert(A13m1)
|
---|
576 | A13.Insert(NewNeg(NewExp(NewVar(0))))
|
---|
577 | A13_simp := A13.Clone().Simplify(rules)
|
---|
578 | A13_corr := NewMul()
|
---|
579 | A13_corr.Insert(NewConstant(0))
|
---|
580 | A13_corr.Insert(NewExp(NewVar(0)))
|
---|
581 | if !A13_simp.AmISame(A13_corr) {
|
---|
582 | TEST.Fatalf("FAIL Add_A13: A13_simp != A13_corr ~ %v -> %v == %v", A13, A13_simp, A13_corr)
|
---|
583 | } else {
|
---|
584 | TEST.Logf("AddVar: %v -> %v", A13, A13_simp)
|
---|
585 | }
|
---|
586 |
|
---|
587 | // F(x) - cF(x)
|
---|
588 | // sin(x) - csin(x)
|
---|
589 | A14 := NewAdd()
|
---|
590 | A14m2 := NewMul()
|
---|
591 | A14m2.Insert(NewConstant(0))
|
---|
592 | A14m2.Insert(NewSin(NewVar(0)))
|
---|
593 | A14.Insert(NewSin(NewVar(0)))
|
---|
594 | A14.Insert(NewNeg(A14m2))
|
---|
595 | A14_simp := A14.Clone().Simplify(rules)
|
---|
596 | A14_corr := NewMul()
|
---|
597 | A14_corr.Insert(NewConstant(0))
|
---|
598 | A14_corr.Insert(NewSin(NewVar(0)))
|
---|
599 | if !A14_simp.AmISame(A14_corr) {
|
---|
600 | TEST.Fatalf("FAIL Add_A14: A14_simp != A14_corr ~ %v -> %v == %v", A14, A14_simp, A14_corr)
|
---|
601 | } else {
|
---|
602 | TEST.Logf("AddVar: %v -> %v", A14, A14_simp)
|
---|
603 | }
|
---|
604 |
|
---|
605 | // c0 + c1*x + c2*x*x*x
|
---|
606 | A15 := NewAdd()
|
---|
607 | A15.Insert(NewConstant(0))
|
---|
608 | A15m1 := NewMul()
|
---|
609 | A15m1.Insert(NewConstant(1))
|
---|
610 | A15m1.Insert(NewVar(0))
|
---|
611 | A15.Insert(A15m1)
|
---|
612 | A15m2 := NewMul()
|
---|
613 | A15m2.Insert(NewConstant(2))
|
---|
614 | A15m2.Insert(NewVar(0))
|
---|
615 | A15m2.Insert(NewVar(0))
|
---|
616 | A15m2.Insert(NewVar(0))
|
---|
617 | A15.Insert(A15m2)
|
---|
618 | A15_simp := A15.Clone().Simplify(rules)
|
---|
619 | A15_corr := NewAdd()
|
---|
620 | A15_corr.Insert(NewConstant(0))
|
---|
621 | A15_corrm1 := NewMul()
|
---|
622 | A15_corrm1.Insert(NewConstant(1))
|
---|
623 | A15_corrm1.Insert(NewVar(0))
|
---|
624 | A15_corr.Insert(A15_corrm1)
|
---|
625 | A15_corrm2 := NewMul()
|
---|
626 | A15_corrm2.Insert(NewConstant(2))
|
---|
627 | A15_corrm2.Insert(NewPowI(NewVar(0), 3))
|
---|
628 | A15_corr.Insert(A15_corrm2)
|
---|
629 | if !A15_simp.AmISame(A15_corr) {
|
---|
630 | TEST.Fatalf("FAIL Add_A15: A15_simp != A15_corr ~ %v -> %v == %v", A15, A15_simp, A15_corr)
|
---|
631 | } else {
|
---|
632 | TEST.Logf("AddVar: %v -> %v", A15, A15_simp)
|
---|
633 | }
|
---|
634 |
|
---|
635 | // X - (X+Y) ???
|
---|
636 |
|
---|
637 | }
|
---|
638 |
|
---|
639 | func Test_SimpMul(TEST *testing.T) {
|
---|
640 | fmt.Printf("Testing: Simplifying Mul ")
|
---|
641 | var rules = DefaultRules()
|
---|
642 |
|
---|
643 | mn := NewMul()
|
---|
644 | mn.Insert(nil)
|
---|
645 | mn_simp := mn.Clone().Simplify(rules)
|
---|
646 | if mn_simp != nil {
|
---|
647 | TEST.Fatalf("FAIL MulNil: mn_simp != nil ~ %v -> %v", mn, mn_simp)
|
---|
648 | } else {
|
---|
649 | TEST.Logf("MulNil: %v -> %v", mn, mn_simp)
|
---|
650 | }
|
---|
651 |
|
---|
652 | ml := NewMul()
|
---|
653 | ml.Insert(NewNull())
|
---|
654 | ml_simp := ml.Clone().Simplify(rules)
|
---|
655 | if ml_simp != nil {
|
---|
656 | TEST.Fatalf("FAIL MulNull: nn_simp != Null ~ %v -> %v", ml, ml_simp)
|
---|
657 | } else {
|
---|
658 | TEST.Logf("MulNull: %v -> %v", ml, ml_simp)
|
---|
659 | }
|
---|
660 |
|
---|
661 | mv := NewMul()
|
---|
662 | mv.Insert(NewVar(0))
|
---|
663 | mv_simp := mv.Clone().Simplify(rules)
|
---|
664 | mv_corr := NewVar(0)
|
---|
665 | if !mv_simp.AmISame(mv_corr) {
|
---|
666 | TEST.Fatalf("FAIL MulVar: mv_simp != mv_corr ~ %v -> %v == %v", mv, mv_simp, mv_corr)
|
---|
667 | } else {
|
---|
668 | TEST.Logf("MulVar: %v -> %v", mv, mv_simp)
|
---|
669 | }
|
---|
670 |
|
---|
671 | c := NewConstant(0)
|
---|
672 | mc := NewMul()
|
---|
673 | mc.Insert(c)
|
---|
674 | mc_simp := mc.Clone().Simplify(rules)
|
---|
675 | if !c.AmISame(mc_simp) {
|
---|
676 | TEST.Fatalf("FAIL MulConst: c != mc_simp ~ %v -> %v", mc, mc_simp)
|
---|
677 | } else {
|
---|
678 | TEST.Logf("MulConst: %v -> %v", mc, mc_simp)
|
---|
679 | }
|
---|
680 |
|
---|
681 | cN := NewConstant(0)
|
---|
682 | mcN := NewMul()
|
---|
683 | mcN.Insert(cN)
|
---|
684 | mcN.Insert(NewConstant(1))
|
---|
685 | mcN.Insert(NewConstant(2))
|
---|
686 | mcN_simp := mcN.Clone().Simplify(rules)
|
---|
687 | if !cN.AmISame(mcN_simp) {
|
---|
688 | TEST.Fatalf("FAIL MulConst: c != mcN_simp ~ %v -> %v", mcN, mcN_simp)
|
---|
689 | } else {
|
---|
690 | TEST.Logf("MulConst: %v -> %v", mcN, mcN_simp)
|
---|
691 | }
|
---|
692 |
|
---|
693 | mvN := NewMul()
|
---|
694 | mvN.Insert(NewVar(0))
|
---|
695 | mvN.Insert(NewVar(0))
|
---|
696 | mvN.Insert(NewVar(0))
|
---|
697 | mvN_simp := mvN.Clone().Simplify(rules)
|
---|
698 | mvN_corr := NewPowI(NewVar(0), 3)
|
---|
699 | if !mvN_simp.AmISame(mvN_corr) {
|
---|
700 | TEST.Fatalf("FAIL MulVar: mvN_simp != mvN_corr ~ %v -> %v == %v", mvN, mvN_simp, mvN_corr)
|
---|
701 | } else {
|
---|
702 | TEST.Logf("MulVar: %v -> %v", mvN, mvN_simp)
|
---|
703 | }
|
---|
704 |
|
---|
705 | mcvN := NewMul()
|
---|
706 | mcvN.Insert(NewConstant(0))
|
---|
707 | mcvN.Insert(NewConstant(1))
|
---|
708 | mcvN.Insert(NewConstant(2))
|
---|
709 | mcvN.Insert(NewVar(0))
|
---|
710 | mcvN.Insert(NewVar(0))
|
---|
711 | mcvN.Insert(NewVar(0))
|
---|
712 | mcvN_simp := mcvN.Clone().Simplify(rules)
|
---|
713 | mcvN_corr := NewMul()
|
---|
714 | mcvN_corr.Insert(NewConstant(0))
|
---|
715 | mcvN_corr.Insert(NewPowI(NewVar(0), 3))
|
---|
716 | if !mcvN_simp.AmISame(mcvN_corr) {
|
---|
717 | TEST.Fatalf("FAIL MulVar: mvN_simp != mvN_corr ~ %v -> %v == %v", mcvN, mcvN_simp, mcvN_corr)
|
---|
718 | } else {
|
---|
719 | TEST.Logf("MulVar: %v -> %v", mcvN, mcvN_simp)
|
---|
720 | }
|
---|
721 |
|
---|
722 | mcvNb := NewMul()
|
---|
723 | mcvNb.Insert(NewConstant(0))
|
---|
724 | mcvNb.Insert(NewConstant(1))
|
---|
725 | mcvNb.Insert(NewVar(0))
|
---|
726 | mcvNb.Insert(NewVar(0))
|
---|
727 | mcvNb.Insert(NewVar(0))
|
---|
728 | mcvNba := NewAdd()
|
---|
729 | mcvNba.Insert(NewVar(0))
|
---|
730 | mcvNbm := NewMul()
|
---|
731 | mcvNbm.Insert(NewConstant(-1))
|
---|
732 | mcvNbm.Insert(NewVar(0))
|
---|
733 | mcvNba.Insert(mcvNbm)
|
---|
734 | mcvNb.Insert(mcvNba)
|
---|
735 | mcvNb_simp := mcvNb.Clone().Simplify(rules)
|
---|
736 | mcvNb_corr := NewMul()
|
---|
737 | mcvNb_corr.Insert(NewConstant(0))
|
---|
738 | mcvNb_corr.Insert(NewPowI(NewVar(0), 4))
|
---|
739 | if !mcvNb_simp.AmISame(mcvNb_corr) {
|
---|
740 | TEST.Fatalf("FAIL MulVar: mvN_simp != mvN_corr ~ %v -> %v == %v", mcvNb, mcvNb_simp, mcvNb_corr)
|
---|
741 | } else {
|
---|
742 | TEST.Logf("MulVar: %v -> %v", mcvNb, mcvNb_simp)
|
---|
743 | }
|
---|
744 |
|
---|
745 | md := NewMul()
|
---|
746 | md.Insert(NewConstant(0))
|
---|
747 | mdiv := NewDiv(NewConstant(1), NewVar(0))
|
---|
748 | md.Insert(mdiv)
|
---|
749 | md_simp := md.Clone().Simplify(rules)
|
---|
750 | md_corr := NewDiv(NewConstant(0), NewVar(0))
|
---|
751 | if !md_simp.AmISame(md_corr) {
|
---|
752 | TEST.Fatalf("FAIL MulVar: md_simp != md_corr ~ %v -> %v == %v", md, md_simp, md_corr)
|
---|
753 | } else {
|
---|
754 | TEST.Logf("MulVar: %v -> %v", md, md_simp)
|
---|
755 | }
|
---|
756 |
|
---|
757 | md2 := NewMul()
|
---|
758 | md2.Insert(NewConstant(0))
|
---|
759 | md2m := NewMul()
|
---|
760 | md2m.Insert(NewConstant(1))
|
---|
761 | md2m.Insert(NewVar(0))
|
---|
762 | md2div := NewDiv(md2m, NewVar(0))
|
---|
763 | md2.Insert(md2div)
|
---|
764 | md2_corr := NewConstant(0)
|
---|
765 | md2_simp := md2div.Clone().Simplify(rules)
|
---|
766 | if !md2_simp.AmISame(md2_corr) {
|
---|
767 | TEST.Fatalf("FAIL MulVar: md2_simp != md2_corr ~ %v -> %v == %v", md2, md2_simp, md2_corr)
|
---|
768 | } else {
|
---|
769 | TEST.Logf("MulVar: %v -> %v", md2, md2_simp)
|
---|
770 | }
|
---|
771 |
|
---|
772 | }
|
---|
773 |
|
---|
774 | func Test_Damd(TEST *testing.T) {
|
---|
775 | fmt.Printf("Testing: Damd Simps \n")
|
---|
776 | var rules = DefaultRules()
|
---|
777 | vnames := []string{"x", "y", "z"}
|
---|
778 |
|
---|
779 | f1 := parse("2*x^2* x^3", vnames)
|
---|
780 | fmt.Printf("f1 orig: %v\n", f1)
|
---|
781 | f1s := f1.Clone().Simplify(rules)
|
---|
782 | fmt.Printf("f1 simp: %v\n\n", f1s)
|
---|
783 |
|
---|
784 | f2 := parse("2*x^-3 * x^2", vnames)
|
---|
785 | fmt.Printf("f2 orig: %v\n", f2)
|
---|
786 | f2s := f2.Clone().Simplify(rules)
|
---|
787 | fmt.Printf("f2 simp: %v\n\n", f2s)
|
---|
788 |
|
---|
789 | }
|
---|
790 |
|
---|
791 | func Test_ConstantF(TEST *testing.T) {
|
---|
792 | fmt.Printf("Testing: ConstantF Simps\n---------------------\n\n")
|
---|
793 | var rules = DefaultRules()
|
---|
794 | rules.ConvertConsts = false
|
---|
795 |
|
---|
796 | vnames := []string{"x", "y", "z"}
|
---|
797 |
|
---|
798 | f1 := parse("x + x", vnames)
|
---|
799 | fmt.Printf("f1 orig: %v\n", f1)
|
---|
800 | f1s := f1.Clone().Simplify(rules)
|
---|
801 | fmt.Printf("f1 simp: %v\n\n", f1s)
|
---|
802 |
|
---|
803 | f2 := parse("2*x + x", vnames)
|
---|
804 | fmt.Printf("f2 orig: %v\n", f2)
|
---|
805 | f2s := f2.Clone().Simplify(rules)
|
---|
806 | fmt.Printf("f2 simp: %v\n\n", f2s)
|
---|
807 |
|
---|
808 | f3 := parse("x + 2*x", vnames)
|
---|
809 | fmt.Printf("f3 orig: %v\n", f3)
|
---|
810 | f3s := f3.Clone().Simplify(rules)
|
---|
811 | fmt.Printf("f3 simp: %v\n\n", f3s)
|
---|
812 |
|
---|
813 | f4 := parse("2*x + 3*x", vnames)
|
---|
814 | fmt.Printf("f4 orig: %v\n", f4)
|
---|
815 | f4s := f4.Clone().Simplify(rules)
|
---|
816 | fmt.Printf("f4 simp: %v\n\n", f4s)
|
---|
817 |
|
---|
818 | f5 := parse("x - x", vnames)
|
---|
819 | fmt.Printf("f5 orig: %v\n", f5)
|
---|
820 | f5s := f5.Clone().Simplify(rules)
|
---|
821 | fmt.Printf("f5 simp: %v\n\n", f5s)
|
---|
822 |
|
---|
823 | f6 := parse("2*x - x", vnames)
|
---|
824 | fmt.Printf("f6 orig: %v\n", f6)
|
---|
825 | f6s := f6.Clone().Simplify(rules)
|
---|
826 | fmt.Printf("f6 simp: %v\n\n", f6s)
|
---|
827 |
|
---|
828 | f7 := parse("x - 2*x", vnames)
|
---|
829 | fmt.Printf("f7 orig: %v\n", f7)
|
---|
830 | f7s := f7.Clone().Simplify(rules)
|
---|
831 | fmt.Printf("f7 simp: %v\n\n", f7s)
|
---|
832 |
|
---|
833 | f8 := parse("2*x - 3*x", vnames)
|
---|
834 | fmt.Printf("f8 orig: %v\n", f8)
|
---|
835 | f8s := f8.Clone().Simplify(rules)
|
---|
836 | fmt.Printf("f8 simp: %v\n\n", f8s)
|
---|
837 |
|
---|
838 | f9 := parse("5*x - 2*x", vnames)
|
---|
839 | fmt.Printf("f9 orig: %v\n", f9)
|
---|
840 | f9s := f9.Clone().Simplify(rules)
|
---|
841 | fmt.Printf("f9 simp: %v\n\n", f9s)
|
---|
842 |
|
---|
843 | /*
|
---|
844 | XX := parse("x + x", vnames)
|
---|
845 | fmt.Printf("XX orig: %v\n", XX)
|
---|
846 | XXs := XX.Clone().Simplify(rules)
|
---|
847 | fmt.Printf("XX simp: %v\n\n", XXs)
|
---|
848 | */
|
---|
849 | }
|
---|
850 |
|
---|
851 | func Test_Div(TEST *testing.T) {
|
---|
852 | fmt.Printf("Testing: Div Simps\n---------------------\n\n")
|
---|
853 | var rules = DefaultRules()
|
---|
854 | vnames := []string{"x", "y", "z"}
|
---|
855 | rules.ConvertConsts = false
|
---|
856 |
|
---|
857 | /*****************************************/
|
---|
858 | /*****************************************/
|
---|
859 |
|
---|
860 | f1 := parse("x / x", vnames)
|
---|
861 | f1_corr := NewConstant(-1)
|
---|
862 | f1_simp := f1.Clone().Simplify(rules)
|
---|
863 | if !f1_simp.AmISame(f1_corr) {
|
---|
864 | TEST.Fatalf("FAIL Div: f1_simp != f1_corr ~ %v -> %v == %v", f1, f1_simp, f1_corr)
|
---|
865 | } else {
|
---|
866 | fmt.Printf("Div: %v -> %v", f1, f1_simp)
|
---|
867 | TEST.Logf("Div: %v -> %v", f1, f1_simp)
|
---|
868 | }
|
---|
869 |
|
---|
870 | f2 := parse("( 2 * x ) / x", vnames)
|
---|
871 | f2_corr := NewConstant(-1)
|
---|
872 | f2_simp := f2.Clone().Simplify(rules)
|
---|
873 | if !f2_simp.AmISame(f2_corr) {
|
---|
874 | TEST.Fatalf("FAIL Div: f2_simp != f2_corr ~ %v -> %v == %v", f2, f2_simp, f2_corr)
|
---|
875 | } else {
|
---|
876 | fmt.Printf("Div: %v -> %v", f2, f2_simp)
|
---|
877 | TEST.Logf("Div: %v -> %v", f2, f2_simp)
|
---|
878 | }
|
---|
879 |
|
---|
880 | f3 := parse("x^2 / x", vnames)
|
---|
881 | f3_corr := parse("x", vnames)
|
---|
882 | f3_simp := f3.Clone().Simplify(rules)
|
---|
883 | if !f3_simp.AmISame(f3_corr) {
|
---|
884 | TEST.Fatalf("FAIL Div: f3_simp != f3_corr ~ %v -> %v == %v", f3, f3_simp, f3_corr)
|
---|
885 | } else {
|
---|
886 | fmt.Printf("Div: %v -> %v", f3, f3_simp)
|
---|
887 | TEST.Logf("Div: %v -> %v", f3, f3_simp)
|
---|
888 | }
|
---|
889 |
|
---|
890 | f4 := parse("x^3 / x^2", vnames)
|
---|
891 | f4_corr := parse("x", vnames)
|
---|
892 | f4_simp := f4.Clone().Simplify(rules)
|
---|
893 | if !f4_simp.AmISame(f4_corr) {
|
---|
894 | TEST.Fatalf("FAIL Div: f4_simp != f4_corr ~ %v -> %v == %v", f4, f4_simp, f4_corr)
|
---|
895 | } else {
|
---|
896 | fmt.Printf("Div: %v -> %v", f4, f4_simp)
|
---|
897 | TEST.Logf("Div: %v -> %v", f4, f4_simp)
|
---|
898 | }
|
---|
899 |
|
---|
900 | f5 := parse("x^4 / x^2", vnames)
|
---|
901 | f5_corr := parse("x^2", vnames)
|
---|
902 | f5_simp := f5.Clone().Simplify(rules)
|
---|
903 | if !f5_simp.AmISame(f5_corr) {
|
---|
904 | TEST.Fatalf("FAIL Div: f5_simp != f5_corr ~ %v -> %v == %v", f5, f5_simp, f5_corr)
|
---|
905 | } else {
|
---|
906 | fmt.Printf("Div: %v -> %v", f5, f5_simp)
|
---|
907 | TEST.Logf("Div: %v -> %v", f5, f5_simp)
|
---|
908 | }
|
---|
909 |
|
---|
910 | f6 := parse("x / x^2", vnames)
|
---|
911 | f6_corr := NewDiv(NewConstant(-1), NewVar(0))
|
---|
912 | f6_simp := f6.Clone().Simplify(rules)
|
---|
913 | if !f6_simp.AmISame(f6_corr) {
|
---|
914 | TEST.Fatalf("FAIL Div: f6_simp != f6_corr ~ %v -> %v == %v", f6, f6_simp, f6_corr)
|
---|
915 | } else {
|
---|
916 | fmt.Printf("Div: %v -> %v", f6, f6_simp)
|
---|
917 | TEST.Logf("Div: %v -> %v", f6, f6_simp)
|
---|
918 | }
|
---|
919 |
|
---|
920 | f7 := parse("x^2 / x^3", vnames)
|
---|
921 | f7_corr := NewDiv(NewConstant(-1), NewVar(0))
|
---|
922 | f7_simp := f7.Clone().Simplify(rules)
|
---|
923 | if !f7_simp.AmISame(f7_corr) {
|
---|
924 | TEST.Fatalf("FAIL Div: f7_simp != f7_corr ~ %v -> %v == %v", f7, f7_simp, f7_corr)
|
---|
925 | } else {
|
---|
926 | fmt.Printf("Div: %v -> %v", f7, f7_simp)
|
---|
927 | TEST.Logf("Div: %v -> %v", f7, f7_simp)
|
---|
928 | }
|
---|
929 |
|
---|
930 | f8 := parse("x^2 / x^4", vnames)
|
---|
931 | f8_corr := NewDiv(NewConstant(-1), NewPowI(NewVar(0), 2))
|
---|
932 | f8_simp := f8.Clone().Simplify(rules)
|
---|
933 | if !f8_simp.AmISame(f8_corr) {
|
---|
934 | TEST.Fatalf("FAIL Div: f8_simp != f8_corr ~ %v -> %v == %v", f8, f8_simp, f8_corr)
|
---|
935 | } else {
|
---|
936 | fmt.Printf("Div: %v -> %v", f8, f8_simp)
|
---|
937 | TEST.Logf("Div: %v -> %v", f8, f8_simp)
|
---|
938 | }
|
---|
939 |
|
---|
940 | /*****************************************/
|
---|
941 | /*****************************************/
|
---|
942 |
|
---|
943 | f1_n := parse("(y * x) / x", vnames)
|
---|
944 | f1_n_corr := NewVar(1)
|
---|
945 | f1_n_simp := f1_n.Clone().Simplify(rules)
|
---|
946 | if !f1_n_simp.AmISame(f1_n_corr) {
|
---|
947 | TEST.Fatalf("FAIL Div: f1_n_simp != f1_n_corr ~ %v -> %v == %v", f1_n, f1_n_simp, f1_n_corr)
|
---|
948 | } else {
|
---|
949 | fmt.Printf("Div: %v -> %v", f1_n, f1_n_simp)
|
---|
950 | TEST.Logf("Div: %v -> %v", f1_n, f1_n_simp)
|
---|
951 | }
|
---|
952 |
|
---|
953 | f2_n := parse("( 2 * x * y ) / x", vnames)
|
---|
954 | f2_n_corr := parse("2 * y", vnames)
|
---|
955 | f2_n_simp := f2_n.Clone().Simplify(rules)
|
---|
956 | if !f2_n_simp.AmISame(f2_n_corr) {
|
---|
957 | TEST.Fatalf("FAIL Div: f2_n_simp != f2_n_corr ~ %v -> %v == %v", f2_n, f2_n_simp, f2_n_corr)
|
---|
958 | } else {
|
---|
959 | fmt.Printf("Div: %v -> %v", f2_n, f2_n_simp)
|
---|
960 | TEST.Logf("Div: %v -> %v", f2_n, f2_n_simp)
|
---|
961 | }
|
---|
962 |
|
---|
963 | f3_n := parse("( y * x^2 ) / x", vnames)
|
---|
964 | f3_n_corr := parse("y * x", vnames)
|
---|
965 | f3_n_simp := f3_n.Clone().Simplify(rules)
|
---|
966 | if !f3_n_simp.AmISame(f3_n_corr) {
|
---|
967 | TEST.Fatalf("FAIL Div: f3_n_simp != f3_n_corr ~ %v -> %v == %v", f3_n, f3_n_simp, f3_n_corr)
|
---|
968 | } else {
|
---|
969 | fmt.Printf("Div: %v -> %v", f3_n, f3_n_simp)
|
---|
970 | TEST.Logf("Div: %v -> %v", f3_n, f3_n_simp)
|
---|
971 | }
|
---|
972 |
|
---|
973 | f4_n := parse("(y * x^3) / x^2", vnames)
|
---|
974 | f4_n_corr := parse("y * x", vnames)
|
---|
975 | f4_n_simp := f4_n.Clone().Simplify(rules)
|
---|
976 | if !f4_n_simp.AmISame(f4_n_corr) {
|
---|
977 | TEST.Fatalf("FAIL Div: f4_n_simp != f4_n_corr ~ %v -> %v == %v", f4_n, f4_n_simp, f4_n_corr)
|
---|
978 | } else {
|
---|
979 | fmt.Printf("Div: %v -> %v", f4_n, f4_n_simp)
|
---|
980 | TEST.Logf("Div: %v -> %v", f4_n, f4_n_simp)
|
---|
981 | }
|
---|
982 |
|
---|
983 | f5_n := parse("(y * x^4) / x^2", vnames)
|
---|
984 | f5_n_corr := parse("y * x^2", vnames)
|
---|
985 | f5_n_simp := f5_n.Clone().Simplify(rules)
|
---|
986 | if !f5_n_simp.AmISame(f5_n_corr) {
|
---|
987 | TEST.Fatalf("FAIL Div: f5_n_simp != f5_n_corr ~ %v -> %v == %v", f5_n, f5_n_simp, f5_n_corr)
|
---|
988 | } else {
|
---|
989 | fmt.Printf("Div: %v -> %v", f5_n, f5_n_simp)
|
---|
990 | TEST.Logf("Div: %v -> %v", f5_n, f5_n_simp)
|
---|
991 | }
|
---|
992 |
|
---|
993 | f6_n := parse("(y * x)/ x^2", vnames)
|
---|
994 | f6_n_corr := parse("y / x", vnames)
|
---|
995 | f6_n_simp := f6_n.Clone().Simplify(rules)
|
---|
996 | if !f6_n_simp.AmISame(f6_n_corr) {
|
---|
997 | TEST.Fatalf("FAIL Div: f6_n_simp != f6_n_corr ~ %v -> %v == %v", f6_n, f6_n_simp, f6_n_corr)
|
---|
998 | } else {
|
---|
999 | fmt.Printf("Div: %v -> %v", f6_n, f6_n_simp)
|
---|
1000 | TEST.Logf("Div: %v -> %v", f6_n, f6_n_simp)
|
---|
1001 | }
|
---|
1002 |
|
---|
1003 | f7_n := parse("(y * x^2) / x^3", vnames)
|
---|
1004 | f7_n_corr := parse("y / x", vnames)
|
---|
1005 | f7_n_simp := f7_n.Clone().Simplify(rules)
|
---|
1006 | if !f7_n_simp.AmISame(f7_n_corr) {
|
---|
1007 | TEST.Fatalf("FAIL Div: f7_n_simp != f7_n_corr ~ %v -> %v == %v", f7_n, f7_n_simp, f7_n_corr)
|
---|
1008 | } else {
|
---|
1009 | fmt.Printf("Div: %v -> %v", f7_n, f7_n_simp)
|
---|
1010 | TEST.Logf("Div: %v -> %v", f7_n, f7_n_simp)
|
---|
1011 | }
|
---|
1012 |
|
---|
1013 | f8_n := parse("(y * x^2) / x^4", vnames)
|
---|
1014 | f8_n_corr := parse("y / x^2", vnames)
|
---|
1015 | f8_n_simp := f8_n.Clone().Simplify(rules)
|
---|
1016 | if !f8_n_simp.AmISame(f8_n_corr) {
|
---|
1017 | TEST.Fatalf("FAIL Div: f8_n_simp != f8_n_corr ~ %v -> %v == %v", f8_n, f8_n_simp, f8_n_corr)
|
---|
1018 | } else {
|
---|
1019 | fmt.Printf("Div: %v -> %v", f8_n, f8_n_simp)
|
---|
1020 | TEST.Logf("Div: %v -> %v", f8_n, f8_n_simp)
|
---|
1021 | }
|
---|
1022 |
|
---|
1023 | /*****************************************/
|
---|
1024 | /*****************************************/
|
---|
1025 |
|
---|
1026 | f1_d := parse("x / (x * y)", vnames)
|
---|
1027 | f1_d_corr := NewDiv(NewConstant(-1), NewVar(1))
|
---|
1028 | f1_d_simp := f1_d.Clone().Simplify(rules)
|
---|
1029 | if !f1_d_simp.AmISame(f1_d_corr) {
|
---|
1030 | TEST.Fatalf("FAIL Div: f1_d_simp != f1_d_corr ~ %v -> %v == %v", f1_d, f1_d_simp, f1_d_corr)
|
---|
1031 | } else {
|
---|
1032 | fmt.Printf("Div: %v -> %v", f1_d, f1_d_simp)
|
---|
1033 | TEST.Logf("Div: %v -> %v", f1_d, f1_d_simp)
|
---|
1034 | }
|
---|
1035 |
|
---|
1036 | f2_d := parse("( 2 * x ) / (x * y)", vnames)
|
---|
1037 | f2_d_corr := parse("2 / y", vnames)
|
---|
1038 | f2_d_simp := f2_d.Clone().Simplify(rules)
|
---|
1039 | if !f2_d_simp.AmISame(f2_d_corr) {
|
---|
1040 | TEST.Fatalf("FAIL Div: f2_d_simp != f2_d_corr ~ %v -> %v == %v", f2_d, f2_d_simp, f2_d_corr)
|
---|
1041 | } else {
|
---|
1042 | fmt.Printf("Div: %v -> %v", f2_d, f2_d_simp)
|
---|
1043 | TEST.Logf("Div: %v -> %v", f2_d, f2_d_simp)
|
---|
1044 | }
|
---|
1045 |
|
---|
1046 | f3_d := parse("x^2 / (x * y)", vnames)
|
---|
1047 | f3_d_corr := parse("x / y", vnames)
|
---|
1048 | f3_d_simp := f3_d.Clone().Simplify(rules)
|
---|
1049 | if !f3_d_simp.AmISame(f3_d_corr) {
|
---|
1050 | TEST.Fatalf("FAIL Div: f3_d_simp != f3_d_corr ~ %v -> %v == %v", f3_d, f3_d_simp, f3_d_corr)
|
---|
1051 | } else {
|
---|
1052 | fmt.Printf("Div: %v -> %v", f3_d, f3_d_simp)
|
---|
1053 | TEST.Logf("Div: %v -> %v", f3_d, f3_d_simp)
|
---|
1054 | }
|
---|
1055 |
|
---|
1056 | f4_d := parse("x^3 / (x^2 * y)", vnames)
|
---|
1057 | f4_d_corr := parse("x / y", vnames)
|
---|
1058 | f4_d_simp := f4_d.Clone().Simplify(rules)
|
---|
1059 | if !f4_d_simp.AmISame(f4_d_corr) {
|
---|
1060 | TEST.Fatalf("FAIL Div: f4_d_simp != f4_d_corr ~ %v -> %v == %v", f4_d, f4_d_simp, f4_d_corr)
|
---|
1061 | } else {
|
---|
1062 | fmt.Printf("Div: %v -> %v", f4_d, f4_d_simp)
|
---|
1063 | TEST.Logf("Div: %v -> %v", f4_d, f4_d_simp)
|
---|
1064 | }
|
---|
1065 |
|
---|
1066 | f5_d := parse("x^4 / (x^2 * y)", vnames)
|
---|
1067 | f5_d_corr := parse("x^2 / y", vnames)
|
---|
1068 | f5_d_simp := f5_d.Clone().Simplify(rules)
|
---|
1069 | if !f5_d_simp.AmISame(f5_d_corr) {
|
---|
1070 | TEST.Fatalf("FAIL Div: f5_d_simp != f5_d_corr ~ %v -> %v == %v", f5_d, f5_d_simp, f5_d_corr)
|
---|
1071 | } else {
|
---|
1072 | fmt.Printf("Div: %v -> %v", f5_d, f5_d_simp)
|
---|
1073 | TEST.Logf("Div: %v -> %v", f5_d, f5_d_simp)
|
---|
1074 | }
|
---|
1075 |
|
---|
1076 | f6_d := parse("x / (x^2 * y)", vnames)
|
---|
1077 | f6_d_denom := parse("x * y", vnames)
|
---|
1078 | f6_d_corr := NewDiv(NewConstant(-1), f6_d_denom)
|
---|
1079 | f6_d_simp := f6_d.Clone().Simplify(rules)
|
---|
1080 | if !f6_d_simp.AmISame(f6_d_corr) {
|
---|
1081 | TEST.Fatalf("FAIL Div: f6_d_simp != f6_d_corr ~ %v -> %v == %v", f6_d, f6_d_simp, f6_d_corr)
|
---|
1082 | } else {
|
---|
1083 | fmt.Printf("Div: %v -> %v", f6_d, f6_d_simp)
|
---|
1084 | TEST.Logf("Div: %v -> %v", f6_d, f6_d_simp)
|
---|
1085 | }
|
---|
1086 |
|
---|
1087 | f7_d := parse("x^2 / (x^3 * y)", vnames)
|
---|
1088 | f7_d_denom := parse("x * y", vnames)
|
---|
1089 | f7_d_corr := NewDiv(NewConstant(-1), f7_d_denom)
|
---|
1090 | f7_d_simp := f7_d.Clone().Simplify(rules)
|
---|
1091 | if !f7_d_simp.AmISame(f7_d_corr) {
|
---|
1092 | TEST.Fatalf("FAIL Div: f7_d_simp != f7_d_corr ~ %v -> %v == %v", f7_d, f7_d_simp, f7_d_corr)
|
---|
1093 | } else {
|
---|
1094 | fmt.Printf("Div: %v -> %v", f7_d, f7_d_simp)
|
---|
1095 | TEST.Logf("Div: %v -> %v", f7_d, f7_d_simp)
|
---|
1096 | }
|
---|
1097 |
|
---|
1098 | f8_d := parse("x^2 / (x^4 * y)", vnames)
|
---|
1099 | f8_d_denom := parse("x^2 * y", vnames)
|
---|
1100 | f8_d_corr := NewDiv(NewConstant(-1), f8_d_denom)
|
---|
1101 | f8_d_simp := f8_d.Clone().Simplify(rules)
|
---|
1102 | if !f8_d_simp.AmISame(f8_d_corr) {
|
---|
1103 | TEST.Fatalf("FAIL Div: f8_d_simp != f8_d_corr ~ %v -> %v == %v", f8_d, f8_d_simp, f8_d_corr)
|
---|
1104 | } else {
|
---|
1105 | fmt.Printf("Div: %v -> %v", f8_d, f8_d_simp)
|
---|
1106 | TEST.Logf("Div: %v -> %v", f8_d, f8_d_simp)
|
---|
1107 | }
|
---|
1108 |
|
---|
1109 | /*****************************************/
|
---|
1110 | /*****************************************/
|
---|
1111 |
|
---|
1112 | f1_b := parse("(x * y) / (x * y)", vnames)
|
---|
1113 | f1_b_corr := NewConstant(-1)
|
---|
1114 | f1_b_simp := f1_b.Clone().Simplify(rules)
|
---|
1115 | if !f1_b_simp.AmISame(f1_b_corr) {
|
---|
1116 | TEST.Fatalf("FAIL Div: f1_b_simp != f1_b_corr ~ %v -> %v == %v", f1_b, f1_b_simp, f1_b_corr)
|
---|
1117 | } else {
|
---|
1118 | fmt.Printf("Div: %v -> %v", f1_b, f1_b_simp)
|
---|
1119 | TEST.Logf("Div: %v -> %v", f1_b, f1_b_simp)
|
---|
1120 | }
|
---|
1121 |
|
---|
1122 | f2_b := parse("( 2 * x * y ) / (x * y)", vnames)
|
---|
1123 | f2_b_corr := parse("2", vnames)
|
---|
1124 | f2_b_simp := f2_b.Clone().Simplify(rules)
|
---|
1125 | if !f2_b_simp.AmISame(f2_b_corr) {
|
---|
1126 | TEST.Fatalf("FAIL Div: f2_b_simp != f2_b_corr ~ %v -> %v == %v", f2_b, f2_b_simp, f2_b_corr)
|
---|
1127 | } else {
|
---|
1128 | fmt.Printf("Div: %v -> %v", f2_b, f2_b_simp)
|
---|
1129 | TEST.Logf("Div: %v -> %v", f2_b, f2_b_simp)
|
---|
1130 | }
|
---|
1131 |
|
---|
1132 | f3_b := parse("(x^2 * y) / (x * y)", vnames)
|
---|
1133 | f3_b_corr := parse("x", vnames)
|
---|
1134 | f3_b_simp := f3_b.Clone().Simplify(rules)
|
---|
1135 | if !f3_b_simp.AmISame(f3_b_corr) {
|
---|
1136 | TEST.Fatalf("FAIL Div: f3_b_simp != f3_b_corr ~ %v -> %v == %v", f3_b, f3_b_simp, f3_b_corr)
|
---|
1137 | } else {
|
---|
1138 | fmt.Printf("Div: %v -> %v", f3_b, f3_b_simp)
|
---|
1139 | TEST.Logf("Div: %v -> %v", f3_b, f3_b_simp)
|
---|
1140 | }
|
---|
1141 |
|
---|
1142 | f4_b := parse("(x^3 * y) / (x^2 * y)", vnames)
|
---|
1143 | f4_b_corr := parse("x", vnames)
|
---|
1144 | f4_b_simp := f4_b.Clone().Simplify(rules)
|
---|
1145 | if !f4_b_simp.AmISame(f4_b_corr) {
|
---|
1146 | TEST.Fatalf("FAIL Div: f4_b_simp != f4_b_corr ~ %v -> %v == %v", f4_b, f4_b_simp, f4_b_corr)
|
---|
1147 | } else {
|
---|
1148 | fmt.Printf("Div: %v -> %v", f4_b, f4_b_simp)
|
---|
1149 | TEST.Logf("Div: %v -> %v", f4_b, f4_b_simp)
|
---|
1150 | }
|
---|
1151 |
|
---|
1152 | f5_b := parse("(x^4 * y) / (x^2 * y)", vnames)
|
---|
1153 | f5_b_corr := parse("x^2", vnames)
|
---|
1154 | f5_b_simp := f5_b.Clone().Simplify(rules)
|
---|
1155 | if !f5_b_simp.AmISame(f5_b_corr) {
|
---|
1156 | TEST.Fatalf("FAIL Div: f5_b_simp != f5_b_corr ~ %v -> %v == %v", f5_b, f5_b_simp, f5_b_corr)
|
---|
1157 | } else {
|
---|
1158 | fmt.Printf("Div: %v -> %v", f5_b, f5_b_simp)
|
---|
1159 | TEST.Logf("Div: %v -> %v", f5_b, f5_b_simp)
|
---|
1160 | }
|
---|
1161 |
|
---|
1162 | f6_b := parse("(x * y) / (x^2 * y)", vnames)
|
---|
1163 | f6_b_corr := NewDiv(NewConstant(-1), NewVar(0))
|
---|
1164 | f6_b_simp := f6_b.Clone().Simplify(rules)
|
---|
1165 | if !f6_b_simp.AmISame(f6_b_corr) {
|
---|
1166 | TEST.Fatalf("FAIL Div: f6_b_simp != f6_b_corr ~ %v -> %v == %v", f6_b, f6_b_simp, f6_b_corr)
|
---|
1167 | } else {
|
---|
1168 | fmt.Printf("Div: %v -> %v", f6_b, f6_b_simp)
|
---|
1169 | TEST.Logf("Div: %v -> %v", f6_b, f6_b_simp)
|
---|
1170 | }
|
---|
1171 |
|
---|
1172 | f7_b := parse("(x^2 * y) / (x^3 * y)", vnames)
|
---|
1173 | f7_b_corr := NewDiv(NewConstant(-1), NewVar(0))
|
---|
1174 | f7_b_simp := f7_b.Clone().Simplify(rules)
|
---|
1175 | if !f7_b_simp.AmISame(f7_b_corr) {
|
---|
1176 | TEST.Fatalf("FAIL Div: f7_b_simp != f7_b_corr ~ %v -> %v == %v", f7_b, f7_b_simp, f7_b_corr)
|
---|
1177 | } else {
|
---|
1178 | fmt.Printf("Div: %v -> %v", f7_b, f7_b_simp)
|
---|
1179 | TEST.Logf("Div: %v -> %v", f7_b, f7_b_simp)
|
---|
1180 | }
|
---|
1181 |
|
---|
1182 | f8_b := parse("(x^2 * y) / (x^4 * y)", vnames)
|
---|
1183 | f8_b_corr := NewDiv(NewConstant(-1), NewPowI(NewVar(0), 2))
|
---|
1184 | f8_b_simp := f8_b.Clone().Simplify(rules)
|
---|
1185 | if !f8_b_simp.AmISame(f8_b_corr) {
|
---|
1186 | TEST.Fatalf("FAIL Div: f8_b_simp != f8_b_corr ~ %v -> %v == %v", f8_b, f8_b_simp, f8_b_corr)
|
---|
1187 | } else {
|
---|
1188 | fmt.Printf("Div: %v -> %v", f8_b, f8_b_simp)
|
---|
1189 | TEST.Logf("Div: %v -> %v", f8_b, f8_b_simp)
|
---|
1190 | }
|
---|
1191 |
|
---|
1192 | /*****************************************/
|
---|
1193 | /*****************************************/
|
---|
1194 |
|
---|
1195 | f1_B := parse("(x * y) / (x * z)", vnames)
|
---|
1196 | f1_B_corr := parse("y / z", vnames)
|
---|
1197 | f1_B_simp := f1_B.Clone().Simplify(rules)
|
---|
1198 | if !f1_B_simp.AmISame(f1_B_corr) {
|
---|
1199 | TEST.Fatalf("FAIL Div: f1_B_simp != f1_B_corr ~ %v -> %v == %v", f1_B, f1_B_simp, f1_B_corr)
|
---|
1200 | } else {
|
---|
1201 | fmt.Printf("Div: %v -> %v", f1_B, f1_B_simp)
|
---|
1202 | TEST.Logf("Div: %v -> %v", f1_B, f1_B_simp)
|
---|
1203 | }
|
---|
1204 |
|
---|
1205 | f2_B := parse("( 2 * x * y) / (x * z)", vnames)
|
---|
1206 | f2_B_corr := parse("(2 * y) / z", vnames)
|
---|
1207 | f2_B_simp := f2_B.Clone().Simplify(rules)
|
---|
1208 | if !f2_B_simp.AmISame(f2_B_corr) {
|
---|
1209 | TEST.Fatalf("FAIL Div: f2_B_simp != f2_B_corr ~ %v -> %v == %v", f2_B, f2_B_simp, f2_B_corr)
|
---|
1210 | } else {
|
---|
1211 | fmt.Printf("Div: %v -> %v", f2_B, f2_B_simp)
|
---|
1212 | TEST.Logf("Div: %v -> %v", f2_B, f2_B_simp)
|
---|
1213 | }
|
---|
1214 |
|
---|
1215 | f3_B := parse("(x^2 * y) / (x * z)", vnames)
|
---|
1216 | f3_B_corr := parse("(x * y) / z", vnames)
|
---|
1217 | f3_B_simp := f3_B.Clone().Simplify(rules)
|
---|
1218 | if !f3_B_simp.AmISame(f3_B_corr) {
|
---|
1219 | TEST.Fatalf("FAIL Div: f3_B_simp != f3_B_corr ~ %v -> %v == %v", f3_B, f3_B_simp, f3_B_corr)
|
---|
1220 | } else {
|
---|
1221 | fmt.Printf("Div: %v -> %v", f3_B, f3_B_simp)
|
---|
1222 | TEST.Logf("Div: %v -> %v", f3_B, f3_B_simp)
|
---|
1223 | }
|
---|
1224 |
|
---|
1225 | f4_B := parse("(x^3 * y) / (x^2 * z)", vnames)
|
---|
1226 | f4_B_corr := parse("(x * y) / z", vnames)
|
---|
1227 | f4_B_simp := f4_B.Clone().Simplify(rules)
|
---|
1228 | if !f4_B_simp.AmISame(f4_B_corr) {
|
---|
1229 | TEST.Fatalf("FAIL Div: f4_B_simp != f4_B_corr ~ %v -> %v == %v", f4_B, f4_B_simp, f4_B_corr)
|
---|
1230 | } else {
|
---|
1231 | fmt.Printf("Div: %v -> %v", f4_B, f4_B_simp)
|
---|
1232 | TEST.Logf("Div: %v -> %v", f4_B, f4_B_simp)
|
---|
1233 | }
|
---|
1234 |
|
---|
1235 | f5_B := parse("(x^4 * y) / (x^2 * z)", vnames)
|
---|
1236 | f5_B_corr := parse("(x^2 * y) / z", vnames)
|
---|
1237 | f5_B_simp := f5_B.Clone().Simplify(rules)
|
---|
1238 | if !f5_B_simp.AmISame(f5_B_corr) {
|
---|
1239 | TEST.Fatalf("FAIL Div: f5_B_simp != f5_B_corr ~ %v -> %v == %v", f5_B, f5_B_simp, f5_B_corr)
|
---|
1240 | } else {
|
---|
1241 | fmt.Printf("Div: %v -> %v", f5_B, f5_B_simp)
|
---|
1242 | TEST.Logf("Div: %v -> %v", f5_B, f5_B_simp)
|
---|
1243 | }
|
---|
1244 |
|
---|
1245 | f6_B := parse("(x * y) / (x^2 * z)", vnames)
|
---|
1246 | f6_B_corr := parse("y / (x * z)", vnames)
|
---|
1247 | f6_B_simp := f6_B.Clone().Simplify(rules)
|
---|
1248 | if !f6_B_simp.AmISame(f6_B_corr) {
|
---|
1249 | TEST.Fatalf("FAIL Div: f6_B_simp != f6_B_corr ~ %v -> %v == %v", f6_B, f6_B_simp, f6_B_corr)
|
---|
1250 | } else {
|
---|
1251 | fmt.Printf("Div: %v -> %v", f6_B, f6_B_simp)
|
---|
1252 | TEST.Logf("Div: %v -> %v", f6_B, f6_B_simp)
|
---|
1253 | }
|
---|
1254 |
|
---|
1255 | f7_B := parse("(x^2 * y) / (x^3 * z)", vnames)
|
---|
1256 | f7_B_corr := parse("y / (x * z)", vnames)
|
---|
1257 | f7_B_simp := f7_B.Clone().Simplify(rules)
|
---|
1258 | if !f7_B_simp.AmISame(f7_B_corr) {
|
---|
1259 | TEST.Fatalf("FAIL Div: f7_B_simp != f7_B_corr ~ %v -> %v == %v", f7_B, f7_B_simp, f7_B_corr)
|
---|
1260 | } else {
|
---|
1261 | fmt.Printf("Div: %v -> %v", f7_B, f7_B_simp)
|
---|
1262 | TEST.Logf("Div: %v -> %v", f7_B, f7_B_simp)
|
---|
1263 | }
|
---|
1264 |
|
---|
1265 | f8_B := parse("(x^2 * y) / (x^4 * z)", vnames)
|
---|
1266 | f8_B_corr := parse("y / (x^2 * z)", vnames)
|
---|
1267 | f8_B_simp := f8_B.Clone().Simplify(rules)
|
---|
1268 | if !f8_B_simp.AmISame(f8_B_corr) {
|
---|
1269 | TEST.Fatalf("FAIL Div: f8_B_simp != f8_B_corr ~ %v -> %v == %v", f8_B, f8_B_simp, f8_B_corr)
|
---|
1270 | } else {
|
---|
1271 | fmt.Printf("Div: %v -> %v", f8_B, f8_B_simp)
|
---|
1272 | TEST.Logf("Div: %v -> %v", f8_B, f8_B_simp)
|
---|
1273 | }
|
---|
1274 |
|
---|
1275 | f1_R := parse("( {-1.004803*(x)^2}/{x} + {0.010163*(x)^12}/{x} + 0.995197*x )", vnames)
|
---|
1276 | f1_R_corr := parse("2 + (3 * x^4)", vnames)
|
---|
1277 | f1_R_simp := f1_R.Clone().Simplify(rules)
|
---|
1278 | if !f1_R_simp.AmISame(f1_R_corr) {
|
---|
1279 | TEST.Fatalf("FAIL Div: f1_R_simp != f1_R_corr ~ %v -> %v == %v", f1_R, f1_R_simp, f1_R_corr)
|
---|
1280 | } else {
|
---|
1281 | fmt.Printf("Div: %v -> %v", f1_R, f1_R_simp)
|
---|
1282 | TEST.Logf("Div: %v -> %v", f1_R, f1_R_simp)
|
---|
1283 | }
|
---|
1284 |
|
---|
1285 | fmt.Println()
|
---|
1286 | }
|
---|
1287 |
|
---|
1288 | // serial := make([]int, 0, 64)
|
---|
1289 | // serial = e.Serial(serial)
|
---|
1290 | // fmt.Printf("\nserial: %v\n", serial)
|
---|