90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
|
from sympy.concrete.products import Product
|
||
|
from sympy.concrete.summations import Sum
|
||
|
from sympy.core.function import Derivative
|
||
|
from sympy.core.numbers import Integer, Rational, Float, oo
|
||
|
from sympy.core.relational import Rel
|
||
|
from sympy.core.symbol import symbols
|
||
|
from sympy.functions import sin
|
||
|
from sympy.integrals.integrals import Integral
|
||
|
from sympy.series.order import Order
|
||
|
|
||
|
from sympy.printing.precedence import precedence, PRECEDENCE
|
||
|
|
||
|
x, y = symbols("x,y")
|
||
|
|
||
|
|
||
|
def test_Add():
|
||
|
assert precedence(x + y) == PRECEDENCE["Add"]
|
||
|
assert precedence(x*y + 1) == PRECEDENCE["Add"]
|
||
|
|
||
|
|
||
|
def test_Function():
|
||
|
assert precedence(sin(x)) == PRECEDENCE["Func"]
|
||
|
|
||
|
def test_Derivative():
|
||
|
assert precedence(Derivative(x, y)) == PRECEDENCE["Atom"]
|
||
|
|
||
|
def test_Integral():
|
||
|
assert precedence(Integral(x, y)) == PRECEDENCE["Atom"]
|
||
|
|
||
|
|
||
|
def test_Mul():
|
||
|
assert precedence(x*y) == PRECEDENCE["Mul"]
|
||
|
assert precedence(-x*y) == PRECEDENCE["Add"]
|
||
|
|
||
|
|
||
|
def test_Number():
|
||
|
assert precedence(Integer(0)) == PRECEDENCE["Atom"]
|
||
|
assert precedence(Integer(1)) == PRECEDENCE["Atom"]
|
||
|
assert precedence(Integer(-1)) == PRECEDENCE["Add"]
|
||
|
assert precedence(Integer(10)) == PRECEDENCE["Atom"]
|
||
|
assert precedence(Rational(5, 2)) == PRECEDENCE["Mul"]
|
||
|
assert precedence(Rational(-5, 2)) == PRECEDENCE["Add"]
|
||
|
assert precedence(Float(5)) == PRECEDENCE["Atom"]
|
||
|
assert precedence(Float(-5)) == PRECEDENCE["Add"]
|
||
|
assert precedence(oo) == PRECEDENCE["Atom"]
|
||
|
assert precedence(-oo) == PRECEDENCE["Add"]
|
||
|
|
||
|
|
||
|
def test_Order():
|
||
|
assert precedence(Order(x)) == PRECEDENCE["Atom"]
|
||
|
|
||
|
|
||
|
def test_Pow():
|
||
|
assert precedence(x**y) == PRECEDENCE["Pow"]
|
||
|
assert precedence(-x**y) == PRECEDENCE["Add"]
|
||
|
assert precedence(x**-y) == PRECEDENCE["Pow"]
|
||
|
|
||
|
|
||
|
def test_Product():
|
||
|
assert precedence(Product(x, (x, y, y + 1))) == PRECEDENCE["Atom"]
|
||
|
|
||
|
|
||
|
def test_Relational():
|
||
|
assert precedence(Rel(x + y, y, "<")) == PRECEDENCE["Relational"]
|
||
|
|
||
|
|
||
|
def test_Sum():
|
||
|
assert precedence(Sum(x, (x, y, y + 1))) == PRECEDENCE["Atom"]
|
||
|
|
||
|
|
||
|
def test_Symbol():
|
||
|
assert precedence(x) == PRECEDENCE["Atom"]
|
||
|
|
||
|
|
||
|
def test_And_Or():
|
||
|
# precedence relations between logical operators, ...
|
||
|
assert precedence(x & y) > precedence(x | y)
|
||
|
assert precedence(~y) > precedence(x & y)
|
||
|
# ... and with other operators (cfr. other programming languages)
|
||
|
assert precedence(x + y) > precedence(x | y)
|
||
|
assert precedence(x + y) > precedence(x & y)
|
||
|
assert precedence(x*y) > precedence(x | y)
|
||
|
assert precedence(x*y) > precedence(x & y)
|
||
|
assert precedence(~y) > precedence(x*y)
|
||
|
assert precedence(~y) > precedence(x - y)
|
||
|
# double checks
|
||
|
assert precedence(x & y) == PRECEDENCE["And"]
|
||
|
assert precedence(x | y) == PRECEDENCE["Or"]
|
||
|
assert precedence(~y) == PRECEDENCE["Not"]
|