1)set break resume
2)expose UnittestCount UnittestAux Unittest
3
4testsuite "bugs2014"
5
6testcase "bad exposure of dummy %A into result"
7-- https://groups.google.com/forum/#!topic/fricas-devel/eHZCyaXmJVY
8f:=operator 'f
9y:=operator 'y
10r1:=eval(D(f(x,z),[x,z]),z=y(x))
11f1:=D(f(x,y(x)),x)
12f2:=D(f1,x)
13f3:=D(f2,x)
14r2:=eval(D(f(x,z),[x,z]),z=y(x))
15-- wrongly resulted in
16--  f    (%A,y(x))
17--   ,1,2
18-- in revision r1674
19testEquals("r1 - r2", "0")
20testEquals("r1::OutputForm", "r2::OutputForm")
21
22testcase "comutativity of formal diffs"
23f:=operator 'f
24testEquals("D(f(x,z), [x, z]) - D(f(x,z), [z, x])", "0")
25y:=operator 'y
26kxy := eval(D(f(x,z),[x,z]),z=y(x))
27kyx := eval(D(f(x,z),[z,x]),z=y(x))
28testEquals("kxy - kyx", "0")
29
30testcase "weighted polynomials"
31wP := OWP(Integer, [x, y, z], [1, 3, 2], 9)
32wx := (x::Polynomial(Integer))::wP
33wy := (y::Polynomial(Integer))::wP
34wz := (z::Polynomial(Integer))::wP
35testEquals("wy^4", "0")
36testEquals("wz^5", "0")
37testEquals("(wy^3 + wy)*wx", "wy*wx")
38
39testcase "complex pattern matching"
40mR := PATRES(Integer, Complex(Integer))
41pati := convert(%i)@Pattern(Integer)
42testTrue("not(failed?(patternMatch(%i, pati, new()$mR)))")
43testTrue("not(failed?(patternMatch(3 + %i, 3 + pati, new()$mR)))")
44
45mR := PATRES(Integer, Complex(Expression(Integer)))
46testTrue("not(failed?(patternMatch(3 + %i, 3 + pati, new()$mR)))")
47ff : Complex(Expression(Integer)) := exp(x) + %i*x
48patf := convert(ff)@Pattern(Integer)
49testTrue("not(failed?(patternMatch(ff, patf, new()$mR)))")
50
51irule := rule %i == 42
52testEquals("irule(besselJ(v, %i))", "besselJ(v, 42)")
53
54testcase "map with ::Boolean"
55
56gl := [x + y = 1, x - y = 1]
57sol := solve(gl, [x, y])
58testEquals("[map(g +-> eval(g,s)::Boolean,gl) for s in sol]",
59           "[[true, true]]")
60
61testEquals("[eval(x=1,[x=1]::List EQ FRAC POLY INT)::Boolean for i in 1..1]",
62            "[true]")
63testEquals("[eval(x=1,[x=1])::Boolean for i in 1..1]", "[true]")
64
65q:EQ POLY INT:=(1=1)
66testEquals("[q for i in 1..1]", "[true]")
67
68testcase "assignment to aggregates"
69
70ll := [[1, 2, 3], [4, 5, 6]]
71testTrue("(ll.1.1 := 7; true)")
72testEquals("ll.1.1", "7")
73testTrue("((elt(ll, 2)).1 := 9; true)")
74testEquals("ll.2.1", "9")
75testTrue("(elt(ll.1, 2) := 8; true)")
76testEquals("ll.1.2", "8")
77
78mkr(i) == [i, string(i)]$Record(k : Integer, s : String)
79lr := [mkr(i) for i in 1..3]
80vr := vector(lr)
81
82testTrue("(lr.1.k := 5; true)")
83testEquals("lr.1.k", "5")
84testTrue("((elt(lr, 2)).k := 11; true)")
85testEquals("lr.2.k", "11")
86testTrue("(elt(lr.3, k) := 13; true)")
87testEquals("lr.3.k", "13")
88
89testTrue("(vr.1.k := 15; true)")
90testEquals("vr.1.k", "15")
91testTrue("((elt(vr, 2)).k := 4; true)")
92testEquals("vr.2.k", "4")
93testTrue("(elt(vr.3, k) := 17; true)")
94testEquals("vr.3.k", "17")
95
96testcase "0^0 in CARD"
97testEquals("0::CARD ^ 0::CARD", "1")
98
99testcase "0 to complex power"
100testEquals("complex(0, 0)^complex(2, 0.0)", "0")
101testLibraryError("complex(0, 0)^complex(0.0, 0)")
102
103testcase "dummy vars in CLINDEP"
104xder(xx : Expression(Integer)): Expression(Integer) == D(xx, x)
105Cd := CLINDEP(Integer, Expression(Integer))
106ff := operator 'f
107testEquals("reducedSystem(matrix([[D(ff(x), x)/(ff(x) + 1)]]), [xder])$Cd",
108           "matrix([[1]])")
109
110testcase "degree in DeRhamComplex"
111Dr := DeRhamComplex(Integer, [x, y, z])
112dx := generator(1)$Dr
113testEquals("degree(dx)", "1")
114
115testcase "general map for aggregates"
116fAf := FiniteLinearAggregateFunctions2(Integer, List(Integer),
117          Integer, U32Vector)
118testTrue("(uv := map(x +-> x, [1, 2])$fAf; true)")
119testEquals("uv(0)", "1")
120testEquals("uv(1)", "2")
121
122fAf2 := FiniteLinearAggregateFunctions2(Integer, U32Vector, Integer, U32Vector)
123testTrue("(uv2 := map(x +-> x + 7, uv)$fAf2; true)")
124testEquals("uv2(0)", "8")
125testEquals("uv2(1)", "9")
126
127testTrue("(uv := scan((x, y) +-> x*y, [3, 4], 2)$fAf; true)")
128testEquals("uv(0)", "6")
129testEquals("uv(1)", "24")
130testTrue("(uv2 := scan((x, y) +-> x + y, uv, 1)$fAf2; true)")
131testEquals("uv2(0)", "7")
132testEquals("uv2(1)", "31")
133
134testcase "overwritten loop limit"
135g(x1:Integer):Integer ==
136    x0:Integer := x1
137    for k0 in 1 .. x0 repeat x0:=x0+1
138    x0
139testEquals("g(3)", "6")
140
141testcase "error in order"
142L := SparseUnivariateLaurentSeries(Fraction Integer, 'z, 0)
143l : L := 0
144-- used to fail
145testEquals("order(l, 0)", "0")
146testEquals("rationalFunction(l, 0)", "0")
147
148testcase "wrong totalDegree"
149testEquals("totalDegree(u*m^2, [m])", "2")
150testEquals("totalDegree(u*m, [v, m])", "1")
151
152)set output algebra on
153statistics()
154