Implements !=
This commit is contained in:
parent
7544055a94
commit
9bc8d94ffd
@ -39,6 +39,16 @@ INSTANCES = {
|
|||||||
'a=f32': stdlib_types.f32_eq_equals,
|
'a=f32': stdlib_types.f32_eq_equals,
|
||||||
'a=f64': stdlib_types.f64_eq_equals,
|
'a=f64': stdlib_types.f64_eq_equals,
|
||||||
},
|
},
|
||||||
|
type3classes.Eq.operators['!=']: {
|
||||||
|
'a=u8': stdlib_types.u8_eq_not_equals,
|
||||||
|
'a=u32': stdlib_types.u32_eq_not_equals,
|
||||||
|
'a=u64': stdlib_types.u64_eq_not_equals,
|
||||||
|
'a=i8': stdlib_types.i8_eq_not_equals,
|
||||||
|
'a=i32': stdlib_types.i32_eq_not_equals,
|
||||||
|
'a=i64': stdlib_types.i64_eq_not_equals,
|
||||||
|
'a=f32': stdlib_types.f32_eq_not_equals,
|
||||||
|
'a=f64': stdlib_types.f64_eq_not_equals,
|
||||||
|
},
|
||||||
type3classes.Floating.methods['sqrt']: {
|
type3classes.Floating.methods['sqrt']: {
|
||||||
'a=f32': stdlib_types.f32_floating_sqrt,
|
'a=f32': stdlib_types.f32_floating_sqrt,
|
||||||
'a=f64': stdlib_types.f64_floating_sqrt,
|
'a=f64': stdlib_types.f64_floating_sqrt,
|
||||||
|
|||||||
@ -408,6 +408,8 @@ class OurVisitor:
|
|||||||
operator = '>'
|
operator = '>'
|
||||||
elif isinstance(node.ops[0], ast.Eq):
|
elif isinstance(node.ops[0], ast.Eq):
|
||||||
operator = '=='
|
operator = '=='
|
||||||
|
elif isinstance(node.ops[0], ast.NotEq):
|
||||||
|
operator = '!='
|
||||||
elif isinstance(node.ops[0], ast.Lt):
|
elif isinstance(node.ops[0], ast.Lt):
|
||||||
operator = '<'
|
operator = '<'
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -119,30 +119,60 @@ def __i64_intnum_abs__(g: Generator, x: i64) -> i64:
|
|||||||
|
|
||||||
return i64('return')
|
return i64('return')
|
||||||
|
|
||||||
|
## ###
|
||||||
|
## class Eq
|
||||||
|
|
||||||
def u8_eq_equals(g: Generator) -> None:
|
def u8_eq_equals(g: Generator) -> None:
|
||||||
g.add_statement('i32.eq')
|
g.i32.eq()
|
||||||
|
|
||||||
def u32_eq_equals(g: Generator) -> None:
|
def u32_eq_equals(g: Generator) -> None:
|
||||||
g.add_statement('i32.eq')
|
g.i32.eq()
|
||||||
|
|
||||||
def u64_eq_equals(g: Generator) -> None:
|
def u64_eq_equals(g: Generator) -> None:
|
||||||
g.add_statement('i64.eq')
|
g.i64.eq()
|
||||||
|
|
||||||
def i8_eq_equals(g: Generator) -> None:
|
def i8_eq_equals(g: Generator) -> None:
|
||||||
g.add_statement('i32.eq')
|
g.i32.eq()
|
||||||
|
|
||||||
def i32_eq_equals(g: Generator) -> None:
|
def i32_eq_equals(g: Generator) -> None:
|
||||||
g.add_statement('i32.eq')
|
g.i32.eq()
|
||||||
|
|
||||||
def i64_eq_equals(g: Generator) -> None:
|
def i64_eq_equals(g: Generator) -> None:
|
||||||
g.add_statement('i64.eq')
|
g.i64.eq()
|
||||||
|
|
||||||
def f32_eq_equals(g: Generator) -> None:
|
def f32_eq_equals(g: Generator) -> None:
|
||||||
g.add_statement('f32.eq')
|
g.f32.eq()
|
||||||
|
|
||||||
def f64_eq_equals(g: Generator) -> None:
|
def f64_eq_equals(g: Generator) -> None:
|
||||||
g.add_statement('f64.eq')
|
g.f64.eq()
|
||||||
|
|
||||||
|
def u8_eq_not_equals(g: Generator) -> None:
|
||||||
|
g.i32.ne()
|
||||||
|
|
||||||
|
def u32_eq_not_equals(g: Generator) -> None:
|
||||||
|
g.i32.ne()
|
||||||
|
|
||||||
|
def u64_eq_not_equals(g: Generator) -> None:
|
||||||
|
g.i64.ne()
|
||||||
|
|
||||||
|
def i8_eq_not_equals(g: Generator) -> None:
|
||||||
|
g.i32.ne()
|
||||||
|
|
||||||
|
def i32_eq_not_equals(g: Generator) -> None:
|
||||||
|
g.i32.ne()
|
||||||
|
|
||||||
|
def i64_eq_not_equals(g: Generator) -> None:
|
||||||
|
g.i64.ne()
|
||||||
|
|
||||||
|
def f32_eq_not_equals(g: Generator) -> None:
|
||||||
|
g.f32.ne()
|
||||||
|
|
||||||
|
def f64_eq_not_equals(g: Generator) -> None:
|
||||||
|
g.f64.ne()
|
||||||
|
|
||||||
|
|
||||||
|
## ###
|
||||||
|
## class Fractional
|
||||||
|
|
||||||
def f32_fractional_div(g: Generator) -> None:
|
def f32_fractional_div(g: Generator) -> None:
|
||||||
g.add_statement('f32.div')
|
g.add_statement('f32.div')
|
||||||
@ -156,6 +186,9 @@ def f32_floating_sqrt(g: Generator) -> None:
|
|||||||
def f64_floating_sqrt(g: Generator) -> None:
|
def f64_floating_sqrt(g: Generator) -> None:
|
||||||
g.add_statement('f64.sqrt')
|
g.add_statement('f64.sqrt')
|
||||||
|
|
||||||
|
## ###
|
||||||
|
## class Integral
|
||||||
|
|
||||||
def u32_integral_div(g: Generator) -> None:
|
def u32_integral_div(g: Generator) -> None:
|
||||||
g.add_statement('i32.div_u')
|
g.add_statement('i32.div_u')
|
||||||
|
|
||||||
@ -168,6 +201,9 @@ def i32_integral_div(g: Generator) -> None:
|
|||||||
def i64_integral_div(g: Generator) -> None:
|
def i64_integral_div(g: Generator) -> None:
|
||||||
g.add_statement('i64.div_s')
|
g.add_statement('i64.div_s')
|
||||||
|
|
||||||
|
## ###
|
||||||
|
## class NatNum
|
||||||
|
|
||||||
def u32_natnum_add(g: Generator) -> None:
|
def u32_natnum_add(g: Generator) -> None:
|
||||||
g.add_statement('i32.add')
|
g.add_statement('i32.add')
|
||||||
|
|
||||||
@ -222,6 +258,9 @@ def f32_natnum_mul(g: Generator) -> None:
|
|||||||
def f64_natnum_mul(g: Generator) -> None:
|
def f64_natnum_mul(g: Generator) -> None:
|
||||||
g.add_statement('f64.mul')
|
g.add_statement('f64.mul')
|
||||||
|
|
||||||
|
## ###
|
||||||
|
## class IntNum
|
||||||
|
|
||||||
def i32_intnum_abs(g: Generator) -> None:
|
def i32_intnum_abs(g: Generator) -> None:
|
||||||
g.add_statement('call $stdlib.types.__i32_intnum_abs__')
|
g.add_statement('call $stdlib.types.__i32_intnum_abs__')
|
||||||
|
|
||||||
|
|||||||
@ -95,6 +95,7 @@ class Type3Class:
|
|||||||
|
|
||||||
Eq = Type3Class('Eq', ['a'], methods={}, operators={
|
Eq = Type3Class('Eq', ['a'], methods={}, operators={
|
||||||
'==': 'a -> a -> bool',
|
'==': 'a -> a -> bool',
|
||||||
|
'!=': 'a -> a -> bool',
|
||||||
})
|
})
|
||||||
|
|
||||||
NatNum = Type3Class('NatNum', ['a'], methods={}, operators={
|
NatNum = Type3Class('NatNum', ['a'], methods={}, operators={
|
||||||
|
|||||||
@ -99,3 +99,85 @@ def testEntry() -> bool:
|
|||||||
result = Suite(code_py).run_code()
|
result = Suite(code_py).run_code()
|
||||||
|
|
||||||
assert False is result.returned_value
|
assert False is result.returned_value
|
||||||
|
|
||||||
|
@pytest.mark.integration_test
|
||||||
|
def test_not_equals_not_implemented():
|
||||||
|
code_py = """
|
||||||
|
class Foo:
|
||||||
|
val: i32
|
||||||
|
|
||||||
|
@exported
|
||||||
|
def testEntry(x: Foo, y: Foo) -> Foo:
|
||||||
|
return x != y
|
||||||
|
"""
|
||||||
|
|
||||||
|
with pytest.raises(Type3Exception, match='Foo does not implement the Eq type class'):
|
||||||
|
Suite(code_py).run_code()
|
||||||
|
|
||||||
|
@pytest.mark.integration_test
|
||||||
|
@pytest.mark.parametrize('type_', INT_TYPES)
|
||||||
|
def test_not_equals_int_same(type_):
|
||||||
|
code_py = f"""
|
||||||
|
CONSTANT0: {type_} = 10
|
||||||
|
|
||||||
|
CONSTANT1: {type_} = 10
|
||||||
|
|
||||||
|
@exported
|
||||||
|
def testEntry() -> bool:
|
||||||
|
return CONSTANT0 != CONSTANT1
|
||||||
|
"""
|
||||||
|
|
||||||
|
result = Suite(code_py).run_code()
|
||||||
|
|
||||||
|
assert False is result.returned_value
|
||||||
|
|
||||||
|
@pytest.mark.integration_test
|
||||||
|
@pytest.mark.parametrize('type_', INT_TYPES)
|
||||||
|
def test_not_equals_int_different(type_):
|
||||||
|
code_py = f"""
|
||||||
|
CONSTANT0: {type_} = 10
|
||||||
|
|
||||||
|
CONSTANT1: {type_} = 3
|
||||||
|
|
||||||
|
@exported
|
||||||
|
def testEntry() -> bool:
|
||||||
|
return CONSTANT0 != CONSTANT1
|
||||||
|
"""
|
||||||
|
|
||||||
|
result = Suite(code_py).run_code()
|
||||||
|
|
||||||
|
assert True is result.returned_value
|
||||||
|
|
||||||
|
@pytest.mark.integration_test
|
||||||
|
@pytest.mark.parametrize('type_', FLOAT_TYPES)
|
||||||
|
def test_not_equals_float_same(type_):
|
||||||
|
code_py = f"""
|
||||||
|
CONSTANT0: {type_} = 10.125
|
||||||
|
|
||||||
|
CONSTANT1: {type_} = 10.125
|
||||||
|
|
||||||
|
@exported
|
||||||
|
def testEntry() -> bool:
|
||||||
|
return CONSTANT0 != CONSTANT1
|
||||||
|
"""
|
||||||
|
|
||||||
|
result = Suite(code_py).run_code()
|
||||||
|
|
||||||
|
assert False is result.returned_value
|
||||||
|
|
||||||
|
@pytest.mark.integration_test
|
||||||
|
@pytest.mark.parametrize('type_', FLOAT_TYPES)
|
||||||
|
def test_not_equals_float_different(type_):
|
||||||
|
code_py = f"""
|
||||||
|
CONSTANT0: {type_} = 10.32
|
||||||
|
|
||||||
|
CONSTANT1: {type_} = 10.33
|
||||||
|
|
||||||
|
@exported
|
||||||
|
def testEntry() -> bool:
|
||||||
|
return CONSTANT0 != CONSTANT1
|
||||||
|
"""
|
||||||
|
|
||||||
|
result = Suite(code_py).run_code()
|
||||||
|
|
||||||
|
assert True is result.returned_value
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user