123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- import unittest
- import sys
- import os
- from utils import execute, kill, run_file, run_barebone
- def flatten(lst):
- new_lst = []
- for f in lst:
- if isinstance(f, (list, tuple)):
- new_lst.extend(flatten(f))
- else:
- new_lst.append(f)
- return new_lst
- class TestConstructorsActionLanguage(unittest.TestCase):
- def test_constructors_simple(self):
- commands = [('"output"', # Output
- ('"const"', 'true'),
- 'true', # (has next)
- ('"return"', # Return
- 'true', # (has value)
- ('"const"', 'true'),
- ),
- )
- ]
- self.assertTrue(run_barebone(flatten(commands), ["True"], 1))
- 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"),
- ),
- )
- ]
- self.assertTrue(run_barebone(flatten(commands), ["True"], 1))
- 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"),
- ),
- )
- ]
- self.assertTrue(run_barebone(flatten(commands), ["False"], 1))
- 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"),
- ),
- )
- ]
- self.assertTrue(run_barebone(flatten(commands), ["True"], 1))
- 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"),
- ),
- )
- ]
- self.assertTrue(run_barebone(flatten(commands), [None], 1, timeout=True))
- def test_constructors_addition(self):
- commands = [('"output"',
- ('"call"',
- ('"deref"', '"primitives/integer_addition"'),
- '2',
- ('"const"', '1'),
- ('"const"', '5'),
- 'false',
- ),
- 'true',
- ('"return"', 'true', '"const"', 'true'),
- )
- ]
- self.assertTrue(run_barebone(flatten(commands), ["6"], 1))
- 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"),
- ),
- ),
- )
- ]
- self.assertTrue(run_barebone(flatten(commands), ["False"], 1))
- 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",
- ]
- self.assertTrue(run_barebone(flatten(commands), ["True", "True", "True", "True"], 1))
- 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",
- ]
- self.assertTrue(run_barebone(flatten(commands), ["5"], 1))
- def test_constructors_output_input(self):
- commands = ['"output"',
- '"input"',
- 'true',
- '"return"',
- 'true',
- '"const"', "true",
- ]
- self.assertTrue(run_barebone(flatten(commands) + ['123456'], ["123456"], 1))
- def test_constructors_global_and_assign(self):
- commands = ['"global"',
- '"my_global"',
- 'true',
- '"assign"',
- '"resolve"', '"my_global"',
- '"const"', '5',
- 'true',
- '"output"',
- '"access"', '"resolve"', '"my_global"',
- 'true',
- '"return"',
- 'true',
- '"const"', "true",
- ]
- self.assertTrue(run_barebone(flatten(commands), ["5"], 1))
- def test_constructors_funcdecl(self):
- commands = ['"global"',
- '"my_global"',
- 'true',
- '"funcdef"', '"my_global"',
- '2',
- 2,
- 3,
- '"return"', 'true',
- '"call"',
- '"deref"', '"primitives/integer_addition"',
- '2',
- '"access"', '"resolve"', 2,
- '"access"', '"resolve"', 3,
- 'false',
- 'true',
- '"output"',
- '"call"',
- '"access"', '"resolve"', '"my_global"',
- '2',
- '"input"',
- '"input"',
- 'false',
- 'true',
- '"return"', 'true',
- '"const"', 'true',
- ]
- self.assertTrue(run_barebone(flatten(commands) + ['2', '5'], ["7"], 1))
- def test_constructors_fibonacci(self):
- commands = ['"global"',
- '"fibonacci"',
- 'true',
- '"funcdef"', '"fibonacci"',
- '1',
- 2,
- '"if"',
- '"call"',
- '"deref"', '"primitives/integer_lte"',
- '2',
- '"access"', '"resolve"', 2,
- '"const"', '2',
- 'false',
- '"return"', 'true', '"const"', '1',
- 'true',
- '"return"', 'true',
- '"call"',
- '"deref"', '"primitives/integer_addition"',
- '2',
- '"call"',
- '"access"', '"resolve"', '"fibonacci"',
- '1',
- '"call"',
- '"deref"', '"primitives/integer_subtraction"',
- '2',
- '"access"', '"resolve"', 2,
- '"const"', '1',
- 'false',
- 'false',
- '"call"',
- '"access"', '"resolve"', '"fibonacci"',
- '1',
- '"call"',
- '"deref"', '"primitives/integer_subtraction"',
- '2',
- '"access"', '"resolve"', 2,
- '"const"', '2',
- 'false',
- 'false',
- 'false',
- 'false',
- 'true',
- '"while"',
- '"const"', 'true',
- '"output"',
- '"call"',
- '"access"', '"resolve"', '"fibonacci"',
- '1',
- '"input"',
- 'false',
- 'false',
- 'false',
- ]
- self.assertTrue(run_barebone(flatten(commands) + ['1', '2', '3', '4', '5', '6', '7', '8'], ['1', '1', '2', '3', '5', '8', '13', '21'], 1))
- 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',
- ]
- self.assertTrue(run_barebone(flatten(commands), ['1', '1', '1', '1', '1'], 1))
- 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',
- ]
- self.assertTrue(run_barebone(flatten(commands), ['1', '3'], 1))
|