phasm/tests/integration/test_lang/test_intnum.py
Johan B.W. de Vries 7544055a94 Split Num into NatNum and IntNum
This is because Haskell defines negate, abs and signum
for Num, but they don't work with our unsigned number
types. (abs would be a noop.) Haskell has Word32 / Word64,
but there negate doesn't make much sense to me.

Implemented neg and abs.

Implemented a type class inheritance check.

Removed Integral from u8 and i8 since it wasn't implemented.
2025-04-06 16:12:36 +02:00

70 lines
1.4 KiB
Python

import pytest
from ..helpers import Suite
INT_TYPES = ['i32', 'i64']
FLOAT_TYPES = ['f32', 'f64']
TYPE_MAP = {
'i32': int,
'i64': int,
'f32': float,
'f64': float,
}
@pytest.mark.integration_test
@pytest.mark.parametrize('type_', INT_TYPES)
def test_abs_int(type_):
code_py = f"""
@exported
def testEntry() -> {type_}:
return abs(-3)
"""
result = Suite(code_py).run_code()
assert 3 == result.returned_value
assert TYPE_MAP[type_] is type(result.returned_value)
@pytest.mark.integration_test
@pytest.mark.parametrize('type_', FLOAT_TYPES)
def test_abs_float(type_):
code_py = f"""
@exported
def testEntry() -> {type_}:
return abs(-3.5)
"""
result = Suite(code_py).run_code()
assert 3.5 == result.returned_value
assert TYPE_MAP[type_] is type(result.returned_value)
@pytest.mark.integration_test
@pytest.mark.parametrize('type_', INT_TYPES)
def test_neg_int(type_):
code_py = f"""
@exported
def testEntry() -> {type_}:
return neg(3)
"""
result = Suite(code_py).run_code()
assert -3 == result.returned_value
assert TYPE_MAP[type_] is type(result.returned_value)
@pytest.mark.integration_test
@pytest.mark.parametrize('type_', FLOAT_TYPES)
def test_neg_float(type_):
code_py = f"""
@exported
def testEntry() -> {type_}:
return neg(3.5)
"""
result = Suite(code_py).run_code()
assert -3.5 == result.returned_value
assert TYPE_MAP[type_] is type(result.returned_value)