98 lines
2.6 KiB
Python
98 lines
2.6 KiB
Python
import struct
|
|
|
|
import pytest
|
|
|
|
from ..helpers import Suite
|
|
|
|
TYPE_LIST = [
|
|
'u8', 'u32', 'u64',
|
|
'i8', 'i32', 'i64',
|
|
'f32', 'f64',
|
|
]
|
|
|
|
BOUND_MAP = {
|
|
'u8': struct.unpack('<BB', bytes.fromhex('00FF')),
|
|
'u32': struct.unpack('<II', bytes.fromhex('00000000FFFFFFFF')),
|
|
'u64': struct.unpack('<QQ', bytes.fromhex('0000000000000000FFFFFFFFFFFFFFFF')),
|
|
'i8': struct.unpack('<bb', bytes.fromhex('807F')),
|
|
'i32': struct.unpack('<ii', bytes.fromhex('00000080FFFFFF7F')),
|
|
'i64': struct.unpack('<qq', bytes.fromhex('0000000000000080FFFFFFFFFFFFFF7F')),
|
|
'f32': struct.unpack('<ff', bytes.fromhex('01000000FFFF7F7F')),
|
|
'f64': struct.unpack('<dd', bytes.fromhex('0000000000001000FFFFFFFFFFFFEF7F')),
|
|
}
|
|
|
|
@pytest.mark.integration_test
|
|
@pytest.mark.parametrize('type_', TYPE_LIST)
|
|
@pytest.mark.parametrize('test_lft,test_opr,test_rgt,test_out', [
|
|
(1, '<', 2, True, ),
|
|
(1, '<', 0, False, ),
|
|
|
|
(1, '<=', 1, True, ),
|
|
(1, '<=', 0, False, ),
|
|
|
|
(1, '>', 0, True, ),
|
|
(1, '>', 1, False, ),
|
|
|
|
(1, '>=', 0, True, ),
|
|
(1, '>=', 2, False, ),
|
|
])
|
|
def test_ord_operators(type_, test_lft, test_opr, test_rgt, test_out):
|
|
code_py = f"""
|
|
@exported
|
|
def testEntry(lft: {type_}, rgt: {type_}) -> bool:
|
|
return lft {test_opr} rgt
|
|
"""
|
|
|
|
if type_[0] == 'f':
|
|
test_lft = float(test_lft)
|
|
test_rgt = float(test_rgt)
|
|
|
|
result = Suite(code_py).run_code(test_lft, test_rgt)
|
|
|
|
assert test_out is result.returned_value
|
|
|
|
@pytest.mark.integration_test
|
|
@pytest.mark.parametrize('type_', TYPE_LIST)
|
|
@pytest.mark.parametrize('test_mth,test_lft,test_rgt,test_out', [
|
|
('min', 1, 2, 1),
|
|
('min', 2, 1, 1),
|
|
('min', 2, 2, 2),
|
|
|
|
('max', 1, 2, 2),
|
|
('max', 2, 1, 2),
|
|
('max', 2, 2, 2),
|
|
])
|
|
def test_ord_methods(type_, test_mth, test_lft, test_rgt, test_out):
|
|
code_py = f"""
|
|
@exported
|
|
def testEntry(lft: {type_}, rgt: {type_}) -> {type_}:
|
|
return {test_mth}(lft, rgt)
|
|
"""
|
|
|
|
if type_[0] == 'f':
|
|
test_lft = float(test_lft)
|
|
test_rgt = float(test_rgt)
|
|
|
|
result = Suite(code_py).run_code(test_lft, test_rgt)
|
|
|
|
assert test_out == result.returned_value
|
|
|
|
@pytest.mark.integration_test
|
|
@pytest.mark.parametrize('type_', TYPE_LIST)
|
|
@pytest.mark.parametrize('test_mth', ['min', 'max'])
|
|
def test_ord_bounds_min_max(type_, test_mth):
|
|
code_py = f"""
|
|
@exported
|
|
def testEntry(lft: {type_}, rgt: {type_}) -> {type_}:
|
|
return {test_mth}(lft, rgt)
|
|
"""
|
|
|
|
test_lft, test_rgt = BOUND_MAP[type_]
|
|
|
|
result = Suite(code_py).run_code(test_lft, test_rgt)
|
|
|
|
if 'min' == test_mth:
|
|
assert test_lft == result.returned_value
|
|
else:
|
|
assert test_rgt == result.returned_value
|