import struct import pytest from ..helpers import Suite TYPE_LIST = [ 'u8', 'u32', 'u64', 'i8', 'i32', 'i64', 'f32', 'f64', ] BOUND_MAP = { 'u8': struct.unpack('', 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