123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- import unittest
- import sys
- import os
- from utils import execute, kill, run_file, run_barebone
- def extend_commands(commands):
- # Initially we communicate with the compilation_manager to add the bytecodes
- pre = [
- 3,
- "upload",
- "test.o",
- "MD5_HASH",
- True, # use NEW interface for constructors
- "funcdef", "main", 0, # Main function
- ]
- # We only have to define "main" for now
- post = [
- True,
- "main",
- True,
- False,
- ]
- return pre + commands + post
- class TestConstructorsActionLanguageLinkable(unittest.TestCase):
- def test_constructors_simple(self):
- commands = [
- "output",
- "const", True,
- True,
- "return",
- True,
- "const", True,
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [True], None, link=["test.o"]))
- def test_constructors_if_else_true(self):
- commands = [
- "if", # If
- "const", True, # Condition
- "output", # True-part
- "const", True,
- False, # Has next
- True, # Has else
- "output", # False-part
- "const", False,
- False, # Has next
- True, # Has next
- "return", # Return
- True, # Has value
- "const", "true",
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [True], None, link=["test.o"]))
- def test_constructors_if_else_false(self):
- commands = [
- "if", # If
- "const", False, # Condition
- "output", # True-part
- "const", True,
- False, # Has next
- True, # Has else
- "output", # False-part
- "const", False,
- False, # Has next
- True, # Has next
- "return", # Return
- True, # Has value
- "const", "true",
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [False], None, link=["test.o"]))
- def test_constructors_if_true(self):
- commands = [
- "if", # If
- "const", True, # Condition
- "output", # True-part
- "const", True,
- False, # Has next
- False, # Has else
- True, # Has next
- "return", # Return
- True, # Has value
- "const", "true",
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [True], None, link=["test.o"]))
- def test_constructors_if_false(self):
- commands = [
- "if", # If
- "const", False, # Condition
- "output", # True-part
- "const", True,
- False, # Has next
- False, # Has else
- True, # Has next
- "return", # Return
- True, # Has value
- "const", "true",
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [None], None, timeout=True, link=["test.o"]))
- def test_constructors_while_false(self):
- commands = [
- "while", # While
- "const", False, # Condition
- "output", # True-part
- "const", True,
- False, # Has next
- True, # Has next
- "output", # Output false
- "const", False,
- True, # Has next
- "return", # Return
- True, # Has value
- "const", "true",
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [False], None, link=["test.o"]))
- def test_constructors_while_true(self):
- commands = [
- "while", # While
- "const", True, # Condition
- "output", # True-part
- "const", True,
- False, # Has next
- True, # Has next
- "output", # False-part
- "const", False,
- True, # Has next
- "return", # Return
- True, # Has value
- "const", "true",
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [True, True, True, True], None, link=["test.o"]))
- def test_constructors_declare_and_assign(self):
- commands = [
- "declare",
- "1",
- True,
- "assign",
- "resolve", "1",
- "const", 5,
- True,
- "output",
- "access", "resolve", "1",
- True,
- "return",
- True,
- "const", "true",
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [5], None, link=["test.o"]))
- def test_constructors_output_input(self):
- commands = [
- "output",
- "input",
- True,
- "return",
- True,
- "const", "true",
- False,
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [123456], None, link=["test.o"], inputs=["123456"]))
- def test_constructors_continue(self):
- commands = ["while",
- "const", True,
- "output", "const", 1,
- True,
- "if",
- "const", True,
- "continue",
- False,
- True,
- "output", "const", 2,
- False,
- True,
- "output", "const", 3,
- True,
- "return", True,
- "const", True,
- False
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [1, 1, 1, 1, 1], None, link=["test.o"]))
- def test_constructors_break(self):
- commands = ["while",
- "const", True,
- "output", "const", 1,
- True,
- "if",
- "const", True,
- "break",
- False,
- True,
- "output", "const", 2,
- False,
- True,
- "output", "const", 3,
- True,
- "return", True,
- "const", True,
- False
- ]
- commands = extend_commands(commands)
- self.assertTrue(run_barebone(commands, [1, 3], None, link=["test.o"]))
|