2 if sys
.path
[0] != "../..":
3 sys
.path
.insert(0, "../..")
8 from pyx
import mathtree
10 class MathTreeTestCase(unittest
.TestCase
):
13 myparser
= mathtree
.parser()
14 assert str(myparser
.parse("a+b-c")) == "a+b-c"
15 assert str(myparser
.parse("(a+b)-c")) == "a+b-c"
16 assert str(myparser
.parse("a+(b-c)")) == "a+(b-c)" # XXX: needs no parenthesis
17 assert str(myparser
.parse("a-b+c")) == "a-b+c"
18 assert str(myparser
.parse("(a-b)+c")) == "a-b+c"
19 assert str(myparser
.parse("a-(b+c)")) == "a-(b+c)"
20 assert str(myparser
.parse("a+b-c*d/E**f")) == "a+b-c*d/E^f"
21 assert str(myparser
.parse("a**b/c*d-E+f")) == "a^b/c*d-E+f"
22 assert str(myparser
.parse("((a-(b+c))/(d*E))**f")) == "((a-(b+c))/(d*E))^f"
23 assert str(myparser
.parse("sin(PI/2)")) == "sin(PI/2.0)"
24 assert str(myparser
.parse("a+b*sin(c)**d")) == "a+b*sin(c)^d"
25 assert str(myparser
.parse("a+b*(c)")) == "a+b*c"
26 assert str(myparser
.parse("norm(a,b)")) == "norm(a,b)"
29 myparser
= mathtree
.parser()
30 assert repr(myparser
.parse("a+b-c")) == """MathTreeOpSub(
38 assert repr(myparser
.parse("(a+b)-c")) == """MathTreeOpSub(
46 assert repr(myparser
.parse("a+(b-c)")) == """MathTreeOpAdd(
54 assert repr(myparser
.parse("a-b+c")) == """MathTreeOpAdd(
62 assert repr(myparser
.parse("(a-b)+c")) == """MathTreeOpAdd(
70 assert repr(myparser
.parse("a-(b+c)")) == """MathTreeOpSub(
78 assert repr(myparser
.parse("a+b-c*d/E**f")) == """MathTreeOpSub(
95 assert repr(myparser
.parse("a**b/c*d-E+f")) == """MathTreeOpAdd(
112 assert repr(myparser
.parse("((a-(b+c))/(d*E))**f")) == """MathTreeOpPow(
129 assert repr(myparser
.parse("sin(PI/2)")) == """MathTreeFunc1Sin(
135 assert repr(myparser
.parse("a+b*sin(c)**d")) == """MathTreeOpAdd(
147 assert repr(myparser
.parse("a+b*(c)")) == """MathTreeOpAdd(
155 assert repr(myparser
.parse("norm(a,b)")) == """MathTreeFunc2Norm(
162 myparser
= mathtree
.parser()
163 abc
= {"a": 1, "b": 2, "c": 3}
164 abcdef
= {"a": 1, "b": 2, "c": 3, "d": 4, "E": 5, "f": 6}
165 assert abs(myparser
.parse("a+b-c").Calc(**abc
)) <= 1e-10
166 assert abs(myparser
.parse("(a+b)-c").Calc(**abc
)) <= 1e-10
167 assert abs(myparser
.parse("a+(b-c)").Calc(**abc
)) <= 1e-10
168 assert abs(myparser
.parse("a-b+c-2").Calc(**abc
)) <= 1e-10
169 assert abs(myparser
.parse("(a-b)+c-2").Calc(**abc
)) <= 1e-10
170 assert abs(myparser
.parse("a-(b+c)+4").Calc(**abc
)) <= 1e-10
171 assert abs(myparser
.parse("a+b-c*d/E**f-2.999232").Calc(**abcdef
)) <= 1e-10
172 assert abs(myparser
.parse("a**b/c*d-E+f-7/3").Calc(**abcdef
)) <= 1e-10
173 assert abs(myparser
.parse("((a-(b+c))/(d*E))**f-6.4e-5").Calc(**abcdef
)) <= 1e-10
174 assert abs(myparser
.parse("-a**2+1").Calc(**abc
)) <= 1e-10
175 assert abs(myparser
.parse("-1**2+1").Calc(**abc
)) <= 1e-10
176 assert abs(myparser
.parse("1-a**2").Calc(**abc
)) <= 1e-10
177 assert abs(myparser
.parse("--1-a**2").Calc(**abc
)) <= 1e-10
178 assert abs(myparser
.parse("1+-a**2").Calc(**abc
)) <= 1e-10
179 assert abs(myparser
.parse("neg(1)+1").Calc()) <= 1e-10
180 assert abs(myparser
.parse("abs(2)-2").Calc()) <= 1e-10
181 assert abs(myparser
.parse("abs(-2)-2").Calc()) <= 1e-10
182 assert abs(myparser
.parse("sgn(1)-1").Calc()) <= 1e-10
183 assert abs(myparser
.parse("sgn(-1)+1").Calc()) <= 1e-10
184 assert abs(myparser
.parse("sqrt(4)-2").Calc()) <= 1e-10
185 assert abs(myparser
.parse("log(e)-1").Calc()) <= 1e-10
186 assert abs(myparser
.parse("exp(1)-e").Calc()) <= 1e-10
187 assert abs(myparser
.parse("sin(pi/2)-1").Calc()) <= 1e-10
188 assert abs(myparser
.parse("cos(pi)+1").Calc()) <= 1e-10
189 assert abs(myparser
.parse("tan(pi/4)-1").Calc()) <= 1e-10
190 assert abs(myparser
.parse("asin(1) - pi/2").Calc()) <= 1e-10
191 assert abs(myparser
.parse("acos(-1) - pi").Calc()) <= 1e-10
192 assert abs(myparser
.parse("atan(1) - pi/4").Calc()) <= 1e-10
193 assert abs(myparser
.parse("sind(90)-1").Calc()) <= 1e-10
194 assert abs(myparser
.parse("cosd(180)+1").Calc()) <= 1e-10
195 assert abs(myparser
.parse("tand(45)-1").Calc()) <= 1e-10
196 assert abs(myparser
.parse("asind(1) - 90").Calc()) <= 1e-10
197 assert abs(myparser
.parse("acosd(-1) - 180").Calc()) <= 1e-10
198 assert abs(myparser
.parse("atand(1) - 45").Calc()) <= 1e-10
199 assert abs(myparser
.parse("norm(3,4)").Calc() - 5) <= 1e-10
201 def testExtern(self
):
202 myparser
= mathtree
.parser()
203 assert abs(myparser
.parse("a+b-c").Calc(a
=1, b
=2, c
=3)) <= 1e-10
204 assert abs(myparser
.parse("f(2)-4").Calc(f
=lambda x
: x
*x
)) <= 1e-10
206 # def testException(self):
207 # myparser = mathtree.parser()
210 # assert 0, "OperandExpectedMathTreeParseError expected"
211 # except mathtree.OperandExpectedMathTreeParseError: pass
213 # myparser.parse("???")
214 # assert 0, "OperandExpectedMathTreeParseError expected"
215 # except mathtree.OperandExpectedMathTreeParseError: pass
217 # myparser.parse("sin()")
218 # assert 0, "OperandExpectedMathTreeParseError expected"
219 # except mathtree.OperandExpectedMathTreeParseError: pass
221 # myparser.parse("sin(x,y)")
222 # assert 0, "RightParenthesisExpectedMathTreeParseError expected"
223 # except mathtree.RightParenthesisExpectedMathTreeParseError: pass
225 # myparser.parse("norm(x)")
226 # assert 0, "CommaExpectedMathTreeParseError expected"
227 # except mathtree.CommaExpectedMathTreeParseError: pass
229 # myparser.parse("xxx yyy")
230 # assert 0, "OperatorExpectedMathTreeParseError expected"
231 # except mathtree.OperatorExpectedMathTreeParseError: pass
233 # myparser.parse("(1+2")
234 # assert 0, "RightParenthesisExpectedMathTreeParseError expected"
235 # except mathtree.RightParenthesisExpectedMathTreeParseError: pass
237 # myparser.parse("1+2)")
238 # assert 0, "RightParenthesisFoundExpectedMathTreeParseError expected"
239 # except mathtree.RightParenthesisFoundMathTreeParseError: pass
241 # myparser.parse("1,2")
242 # assert 0, "CommaFoundExpectedMathTreeParseError expected"
243 # except mathtree.CommaFoundMathTreeParseError: pass
246 if __name__
== "__main__":