Exemple #1
0
    def test_op_with_wrong_type_signature(self) -> None:
        stack = Stack()
        stack.push(StackObject(stype=TTest, value="tparm"))

        make_word_context("test", op_print, [TParm1])

        with self.assertRaises(Exception):
            Type.op("test", stack)
Exemple #2
0
    def test_match_in(self) -> None:
        empty_sig = TypeSignature([], [])
        s = Stack()
        assert empty_sig.match_in(s)

        s.push(StackObject(stype=TParm1))
        sig = TypeSignature([StackObject(stype=TParm1)], [])

        # We can do this twice because it doesn't consume the stack.
        assert sig.match_in(s)
        assert sig.match_in(s)

        s.push(StackObject(stype=TTest))

        assert sig.match_in(s) == False
Exemple #3
0
class TestGenericTypeStuff(unittest.TestCase):
    def setUp(self) -> None:
        self.s = Stack()
        self.r = Stack()
        self.c = Continuation(self.s,
                              self.r,
                              symbol=Symbol("Unknown", Location()))

    def test_make_atom(self) -> None:
        self.c.symbol.s_id = "test"
        #op_name = "test"
        make_atom(self.c)
        item = self.c.stack.pop()
        assert item.value == "test"
        assert item.stype == TAtom

    def test_op_print(self) -> None:
        self.c.stack.push(StackObject(stype=TAtom, value="test"))
        op_print(self.c)
        assert self.c.stack.depth() == 0

    def test_op_dup(self) -> None:
        @dataclass
        class DupTest:
            val: str

        self.c.stack.push(StackObject(value=DupTest("Something"), stype=TAtom))
        op_dup(self.c)
        op_dup(self.c)
        item1 = self.c.stack.pop()
        self.c.stack.tos().value.val = "SomethingElse"
        assert item1.value.val == "Something"
        item2 = self.c.stack.pop()
        assert item2.value.val == "SomethingElse"
        assert item1 != item2
        item3 = self.c.stack.pop()
        assert item3.value.val == "Something"
        assert item2 != item3
        assert item1 == item3

    def test_op_swap(self) -> None:
        self.c.symbol.s_id = "first"
        make_atom(self.c)
        self.c.symbol.s_id = "second"
        make_atom(self.c)
        op_swap(self.c)
        item1 = self.c.stack.pop()
        item2 = self.c.stack.pop()
        assert item1.value == "first"
        assert item2.value == "second"

    def test_op_drop(self) -> None:
        self.s.push(StackObject(stype=TAtom, value="test"))
        op_drop(self.c)
        assert self.c.stack.depth() == 0

    def test_op_2dup(self) -> None:
        self.c.symbol.s_id = "first"
        make_atom(self.c)
        self.c.symbol.s_id = "second"
        make_atom(self.c)
        op_2dup(self.c)
        assert self.c.stack.depth() == 4
        item1 = self.c.stack.pop()
        item2 = self.c.stack.pop()
        item3 = self.c.stack.pop()
        item4 = self.c.stack.pop()
        assert item1.value == item3.value
        assert item2.value == item4.value
        assert item1.value != item2.value
        assert self.c.stack.depth() == 0
Exemple #4
0
 def stack_fun(s: Stack) -> None:
     s.push(42)
Exemple #5
0
class TestGenericReturnStackOps(unittest.TestCase):
    def setUp(self) -> None:
        self.s = Stack()
        self.r = Stack()
        self.c = Continuation(self.s, symbol=Symbol("Unknown", Location()))
        self.c.rstack = self.r

    def test_make_ratom(self) -> None:
        self.c.symbol.s_id = "test"
        make_ratom(self.c)
        item = self.c.rstack.pop()
        assert item.value == "test"
        assert item.stype == TAtom

    def test_op_rdup(self) -> None:
        self.test_make_ratom()
        op_rdup(self.c)
        item1 = self.c.rstack.pop()
        item2 = self.c.rstack.pop()
        assert item1 == item2

    def test_op_rswap(self) -> None:
        self.c.symbol.s_id = "first"
        make_ratom(self.c)
        self.c.symbol.s_id = "second"
        make_ratom(self.c)
        op_rswap(self.c)
        item1 = self.c.rstack.pop()
        item2 = self.c.rstack.pop()
        assert item1.value == "first"
        assert item2.value == "second"

    def test_op_rdrop(self) -> None:
        self.r.push(StackObject(stype=TAtom, value="test"))
        op_rdrop(self.c)
        assert self.c.rstack.depth() == 0

    def test_op_2rdup(self) -> None:
        self.c.symbol.s_id = "first"
        make_ratom(self.c)
        self.c.symbol.s_id = "second"
        make_ratom(self.c)
        op_2rdup(self.c)
        assert self.c.rstack.depth() == 4
        item1 = self.c.rstack.pop()
        item2 = self.c.rstack.pop()
        item3 = self.c.rstack.pop()
        item4 = self.c.rstack.pop()
        assert item1.value == item3.value
        assert item2.value == item4.value
        assert item1.value != item2.value
        assert self.c.rstack.depth() == 0

    def test_rstack(self) -> None:
        op_rstack(self.c)
        make_ratom(self.c)
        op_rstack(self.c)
        self.c.prompt = None
        op_rstack(self.c)

    def test_move_between_stacks(self) -> None:
        self.c.symbol.s_id = "test"
        make_ratom(self.c)
        assert self.c.rstack.tos().value == "test"
        assert self.c.stack.depth() == 0
        op_mov_to_dstack(self.c)
        assert self.c.stack.tos().value == "test"
        assert self.c.rstack.depth() == 0
        op_mov_to_rstack(self.c)
        assert self.c.rstack.tos().value == "test"
        assert self.c.stack.depth() == 0