forked from Rust-related/RustPython
87 lines
2.1 KiB
Python
87 lines
2.1 KiB
Python
from testutils import assert_raises
|
||
|
||
assert 1 < 2
|
||
assert 1 < 2 < 3
|
||
assert 5 == 5 == 5
|
||
assert (5 == 5) == True
|
||
assert 5 == 5 != 4 == 4 > 3 > 2 < 3 <= 3 != 0 == 0
|
||
|
||
assert not 1 > 2
|
||
assert not 5 == 5 == True
|
||
assert not 5 == 5 != 5 == 5
|
||
assert not 1 < 2 < 3 > 4
|
||
assert not 1 < 2 > 3 < 4
|
||
assert not 1 > 2 < 3 < 4
|
||
|
||
def test_type_error(x, y):
|
||
assert_raises(TypeError, lambda: x < y)
|
||
assert_raises(TypeError, lambda: x <= y)
|
||
assert_raises(TypeError, lambda: x > y)
|
||
assert_raises(TypeError, lambda: x >= y)
|
||
|
||
test_type_error([], 0)
|
||
test_type_error((), 0)
|
||
|
||
|
||
# 10**308 cannot be represented exactly in f64, thus it is not equal to 1e308 float
|
||
assert not (10**308 == 1e308)
|
||
# but the 1e308 float can be converted to big int and then it still should be equal to itself
|
||
assert int(1e308) == 1e308
|
||
|
||
# and the equalities should be the same when operands switch sides
|
||
assert not (1e308 == 10**308)
|
||
assert 1e308 == int(1e308)
|
||
|
||
# floats that cannot be converted to big ints shouldn’t crash the vm
|
||
import math
|
||
assert not (10**500 == math.inf)
|
||
assert not (math.inf == 10**500)
|
||
assert not (10**500 == math.nan)
|
||
assert not (math.nan == 10**500)
|
||
|
||
# comparisons
|
||
# floats with worse than integer precision
|
||
assert 2.**54 > 2**54 - 1
|
||
assert 2.**54 < 2**54 + 1
|
||
assert 2.**54 >= 2**54 - 1
|
||
assert 2.**54 <= 2**54 + 1
|
||
assert 2.**54 == 2**54
|
||
assert not 2.**54 == 2**54 + 1
|
||
|
||
# inverse operands
|
||
assert 2**54 - 1 < 2.**54
|
||
assert 2**54 + 1 > 2.**54
|
||
assert 2**54 - 1 <= 2.**54
|
||
assert 2**54 + 1 >= 2.**54
|
||
assert 2**54 == 2.**54
|
||
assert not 2**54 + 1 == 2.**54
|
||
|
||
assert not 2.**54 < 2**54 - 1
|
||
assert not 2.**54 > 2**54 + 1
|
||
|
||
# sub-int numbers
|
||
assert 1.3 > 1
|
||
assert 1.3 >= 1
|
||
assert 2.5 > 2
|
||
assert 2.5 >= 2
|
||
assert -0.3 < 0
|
||
assert -0.3 <= 0
|
||
|
||
# int out of float range comparisons
|
||
assert 10**500 > 2.**54
|
||
assert -10**500 < -0.12
|
||
|
||
# infinity and NaN comparisons
|
||
assert math.inf > 10**500
|
||
assert math.inf >= 10**500
|
||
assert not math.inf < 10**500
|
||
|
||
assert -math.inf < -10*500
|
||
assert -math.inf <= -10*500
|
||
assert not -math.inf > -10*500
|
||
|
||
assert not math.nan > 123
|
||
assert not math.nan < 123
|
||
assert not math.nan >= 123
|
||
assert not math.nan <= 123
|