You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.1 KiB
150 lines
4.1 KiB
from sympy.core.symbol import Symbol
|
|
from sympy.plotting.intervalmath import interval
|
|
from sympy.plotting.intervalmath.interval_membership import intervalMembership
|
|
from sympy.plotting.experimental_lambdify import experimental_lambdify
|
|
from sympy.testing.pytest import raises
|
|
|
|
|
|
def test_creation():
|
|
assert intervalMembership(True, True)
|
|
raises(TypeError, lambda: intervalMembership(True))
|
|
raises(TypeError, lambda: intervalMembership(True, True, True))
|
|
|
|
|
|
def test_getitem():
|
|
a = intervalMembership(True, False)
|
|
assert a[0] is True
|
|
assert a[1] is False
|
|
raises(IndexError, lambda: a[2])
|
|
|
|
|
|
def test_str():
|
|
a = intervalMembership(True, False)
|
|
assert str(a) == 'intervalMembership(True, False)'
|
|
assert repr(a) == 'intervalMembership(True, False)'
|
|
|
|
|
|
def test_equivalence():
|
|
a = intervalMembership(True, True)
|
|
b = intervalMembership(True, False)
|
|
assert (a == b) is False
|
|
assert (a != b) is True
|
|
|
|
a = intervalMembership(True, False)
|
|
b = intervalMembership(True, False)
|
|
assert (a == b) is True
|
|
assert (a != b) is False
|
|
|
|
|
|
def test_not():
|
|
x = Symbol('x')
|
|
|
|
r1 = x > -1
|
|
r2 = x <= -1
|
|
|
|
i = interval
|
|
|
|
f1 = experimental_lambdify((x,), r1)
|
|
f2 = experimental_lambdify((x,), r2)
|
|
|
|
tt = i(-0.1, 0.1, is_valid=True)
|
|
tn = i(-0.1, 0.1, is_valid=None)
|
|
tf = i(-0.1, 0.1, is_valid=False)
|
|
|
|
assert f1(tt) == ~f2(tt)
|
|
assert f1(tn) == ~f2(tn)
|
|
assert f1(tf) == ~f2(tf)
|
|
|
|
nt = i(0.9, 1.1, is_valid=True)
|
|
nn = i(0.9, 1.1, is_valid=None)
|
|
nf = i(0.9, 1.1, is_valid=False)
|
|
|
|
assert f1(nt) == ~f2(nt)
|
|
assert f1(nn) == ~f2(nn)
|
|
assert f1(nf) == ~f2(nf)
|
|
|
|
ft = i(1.9, 2.1, is_valid=True)
|
|
fn = i(1.9, 2.1, is_valid=None)
|
|
ff = i(1.9, 2.1, is_valid=False)
|
|
|
|
assert f1(ft) == ~f2(ft)
|
|
assert f1(fn) == ~f2(fn)
|
|
assert f1(ff) == ~f2(ff)
|
|
|
|
|
|
def test_boolean():
|
|
# There can be 9*9 test cases in full mapping of the cartesian product.
|
|
# But we only consider 3*3 cases for simplicity.
|
|
s = [
|
|
intervalMembership(False, False),
|
|
intervalMembership(None, None),
|
|
intervalMembership(True, True)
|
|
]
|
|
|
|
# Reduced tests for 'And'
|
|
a1 = [
|
|
intervalMembership(False, False),
|
|
intervalMembership(False, False),
|
|
intervalMembership(False, False),
|
|
intervalMembership(False, False),
|
|
intervalMembership(None, None),
|
|
intervalMembership(None, None),
|
|
intervalMembership(False, False),
|
|
intervalMembership(None, None),
|
|
intervalMembership(True, True)
|
|
]
|
|
a1_iter = iter(a1)
|
|
for i in range(len(s)):
|
|
for j in range(len(s)):
|
|
assert s[i] & s[j] == next(a1_iter)
|
|
|
|
# Reduced tests for 'Or'
|
|
a1 = [
|
|
intervalMembership(False, False),
|
|
intervalMembership(None, False),
|
|
intervalMembership(True, False),
|
|
intervalMembership(None, False),
|
|
intervalMembership(None, None),
|
|
intervalMembership(True, None),
|
|
intervalMembership(True, False),
|
|
intervalMembership(True, None),
|
|
intervalMembership(True, True)
|
|
]
|
|
a1_iter = iter(a1)
|
|
for i in range(len(s)):
|
|
for j in range(len(s)):
|
|
assert s[i] | s[j] == next(a1_iter)
|
|
|
|
# Reduced tests for 'Xor'
|
|
a1 = [
|
|
intervalMembership(False, False),
|
|
intervalMembership(None, False),
|
|
intervalMembership(True, False),
|
|
intervalMembership(None, False),
|
|
intervalMembership(None, None),
|
|
intervalMembership(None, None),
|
|
intervalMembership(True, False),
|
|
intervalMembership(None, None),
|
|
intervalMembership(False, True)
|
|
]
|
|
a1_iter = iter(a1)
|
|
for i in range(len(s)):
|
|
for j in range(len(s)):
|
|
assert s[i] ^ s[j] == next(a1_iter)
|
|
|
|
# Reduced tests for 'Not'
|
|
a1 = [
|
|
intervalMembership(True, False),
|
|
intervalMembership(None, None),
|
|
intervalMembership(False, True)
|
|
]
|
|
a1_iter = iter(a1)
|
|
for i in range(len(s)):
|
|
assert ~s[i] == next(a1_iter)
|
|
|
|
|
|
def test_boolean_errors():
|
|
a = intervalMembership(True, True)
|
|
raises(ValueError, lambda: a & 1)
|
|
raises(ValueError, lambda: a | 1)
|
|
raises(ValueError, lambda: a ^ 1)
|