2022-04-15 06:31:58 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
2022-05-31 15:41:10 +00:00
|
|
|
from .fixtures import * # noqa
|
|
|
|
|
2022-04-15 06:31:58 +00:00
|
|
|
import pytest
|
2022-06-01 01:25:18 +00:00
|
|
|
from ichor import *
|
2022-04-15 06:31:58 +00:00
|
|
|
|
|
|
|
|
2022-05-31 15:41:10 +00:00
|
|
|
@pytest.mark.parametrize("stack,ret", [
|
2022-04-15 06:31:58 +00:00
|
|
|
[[True], [False]],
|
|
|
|
[[True], [False]],
|
|
|
|
])
|
|
|
|
def test_not(vm, stack, ret):
|
2022-06-01 05:08:29 +00:00
|
|
|
assert vm.run([Opcode.CALLS(NOT1)], stack = stack) == ret
|
2022-04-15 06:31:58 +00:00
|
|
|
|
|
|
|
|
2022-05-31 15:41:10 +00:00
|
|
|
@pytest.mark.parametrize("stack,ret", [
|
2022-04-15 06:31:58 +00:00
|
|
|
[[False, False], [False]],
|
|
|
|
[[True, False], [True]],
|
|
|
|
[[False, True], [True]],
|
|
|
|
[[True, True], [True]],
|
|
|
|
])
|
|
|
|
def test_or(vm, stack, ret):
|
2022-06-01 05:08:29 +00:00
|
|
|
assert vm.run([Opcode.CALLS(OR2)], stack = stack) == ret
|
2022-04-15 06:31:58 +00:00
|
|
|
|
|
|
|
|
2022-05-31 15:41:10 +00:00
|
|
|
@pytest.mark.parametrize("stack,ret", [
|
2022-04-15 06:31:58 +00:00
|
|
|
[[False, False], [False]],
|
|
|
|
[[True, False], [False]],
|
|
|
|
[[False, True], [False]],
|
|
|
|
[[True, True], [True]],
|
|
|
|
])
|
|
|
|
def test_and(vm, stack, ret):
|
2022-06-01 05:08:29 +00:00
|
|
|
assert vm.run([Opcode.CALLS(AND2)], stack = stack) == ret
|
2022-04-15 06:31:58 +00:00
|
|
|
|
|
|
|
|
2022-05-31 15:41:10 +00:00
|
|
|
@pytest.mark.parametrize("stack,ret", [
|
2022-04-15 06:31:58 +00:00
|
|
|
[[False, False], [False]],
|
|
|
|
[[True, False], [True]],
|
|
|
|
[[False, True], [True]],
|
|
|
|
[[True, True], [False]],
|
|
|
|
])
|
2022-06-01 05:08:29 +00:00
|
|
|
def test_xor2(vm, stack, ret):
|
|
|
|
assert vm.run([Opcode.CALLS(XOR2)], stack = stack) == ret
|
|
|
|
|
|
|
|
@pytest.mark.parametrize("stack,ret", [
|
|
|
|
[[False, False, False], [False]],
|
|
|
|
[[True, False, False], [True]],
|
|
|
|
[[False, True, False], [True]],
|
|
|
|
[[True, True, False], [True]],
|
|
|
|
[[True, True, True], [False]],
|
|
|
|
[[False, True, True], [True]],
|
|
|
|
[[False, False, True], [True]],
|
|
|
|
])
|
|
|
|
def test_xor3(vm, stack, ret):
|
|
|
|
assert vm.run([Opcode.CALLS(XOR3)], stack = stack) == ret
|
2022-04-21 06:17:59 +00:00
|
|
|
|
|
|
|
|
2022-05-31 15:41:10 +00:00
|
|
|
@pytest.mark.parametrize("stack,ret", [
|
2022-06-01 05:08:29 +00:00
|
|
|
[[], [FunctionRef.parse(NOT1)]]
|
2022-04-21 06:17:59 +00:00
|
|
|
])
|
|
|
|
def test_funref(vm, stack, ret):
|
2022-06-01 05:08:29 +00:00
|
|
|
assert vm.run([Opcode.FUNREF(NOT1), Opcode.RETURN(1)], stack = stack) == ret
|
2022-04-21 06:17:59 +00:00
|
|
|
|
|
|
|
|
2022-05-31 15:41:10 +00:00
|
|
|
@pytest.mark.parametrize("stack,ret", [
|
2022-04-21 06:17:59 +00:00
|
|
|
[[], [True]]
|
|
|
|
])
|
|
|
|
def test_callf(vm, stack, ret):
|
2022-06-01 05:08:29 +00:00
|
|
|
assert vm.run([Opcode.FALSE(), Opcode.FUNREF(NOT1), Opcode.CALLF(1)], stack = stack) == ret
|