test_constructors_al.py 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. import unittest
  2. import sys
  3. import os
  4. from utils import execute, kill, run_file, run_barebone
  5. def flatten(lst):
  6. new_lst = []
  7. for f in lst:
  8. if isinstance(f, (list, tuple)):
  9. new_lst.extend(flatten(f))
  10. else:
  11. new_lst.append(f)
  12. return new_lst
  13. class TestConstructorsActionLanguage(unittest.TestCase):
  14. def test_constructors_simple(self):
  15. commands = [('"output"', # Output
  16. ('"const"', 'true'),
  17. 'true', # (has next)
  18. ('"return"', # Return
  19. 'true', # (has value)
  20. ('"const"', 'true'),
  21. ),
  22. )
  23. ]
  24. self.assertTrue(run_barebone(flatten(commands), ["True"], 1))
  25. def test_constructors_if_else_true(self):
  26. commands = [('"if"', # If
  27. ('"const"', 'true'), # Condition
  28. ('"output"', # True-part
  29. ('"const"', 'true'),
  30. 'false', # Has next
  31. ),
  32. 'true', # Has else
  33. ('"output"', # False-part
  34. ('"const"', 'false'),
  35. 'false', # Has next
  36. ),
  37. 'true', # Has next
  38. ('"return"', # Return
  39. 'true', # Has value
  40. ('"const"', "true"),
  41. ),
  42. )
  43. ]
  44. self.assertTrue(run_barebone(flatten(commands), ["True"], 1))
  45. def test_constructors_if_else_false(self):
  46. commands = [('"if"', # If
  47. ('"const"', 'false'), # Condition
  48. ('"output"', # True-part
  49. ('"const"', 'true'),
  50. 'false', # Has next
  51. ),
  52. 'true', # Has else
  53. ('"output"', # False-part
  54. ('"const"', 'false'),
  55. 'false', # Has next
  56. ),
  57. 'true', # Has next
  58. ('"return"', # Return
  59. 'true', # Has value
  60. ('"const"', "true"),
  61. ),
  62. )
  63. ]
  64. self.assertTrue(run_barebone(flatten(commands), ["False"], 1))
  65. def test_constructors_if_true(self):
  66. commands = [('"if"', # If
  67. ('"const"', 'true'), # Condition
  68. ('"output"', # True-part
  69. ('"const"', 'true'),
  70. 'false', # Has next
  71. ),
  72. 'false', # Has else
  73. 'true', # Has next
  74. ('"return"', # Return
  75. 'true', # Has value
  76. ('"const"', "true"),
  77. ),
  78. )
  79. ]
  80. self.assertTrue(run_barebone(flatten(commands), ["True"], 1))
  81. def test_constructors_if_false(self):
  82. commands = [('"if"', # If
  83. ('"const"', 'false'), # Condition
  84. ('"output"', # True-part
  85. ('"const"', 'true'),
  86. 'false', # Has next
  87. ),
  88. 'false', # Has else
  89. 'true', # Has next
  90. ('"return"', # Return
  91. 'true', # Has value
  92. ('"const"', "true"),
  93. ),
  94. )
  95. ]
  96. self.assertTrue(run_barebone(flatten(commands), [None], 1, timeout=True))
  97. def test_constructors_addition(self):
  98. commands = [('"output"',
  99. ('"call"',
  100. ('"deref"', '"primitives/integer_addition"'),
  101. '2',
  102. ('"const"', '1'),
  103. ('"const"', '5'),
  104. 'false',
  105. ),
  106. 'true',
  107. ('"return"', 'true', '"const"', 'true'),
  108. )
  109. ]
  110. self.assertTrue(run_barebone(flatten(commands), ["6"], 1))
  111. def test_constructors_while_false(self):
  112. commands = [('"while"', # While
  113. ('"const"', 'false'), # Condition
  114. ('"output"', # True-part
  115. ('"const"', 'true'),
  116. 'false', # Has next
  117. ),
  118. 'true', # Has next
  119. ('"output"', # Output false
  120. ('"const"', 'false'),
  121. 'true', # Has next
  122. ('"return"', # Return
  123. 'true', # Has value
  124. ('"const"', "true"),
  125. ),
  126. ),
  127. )
  128. ]
  129. self.assertTrue(run_barebone(flatten(commands), ["False"], 1))
  130. def test_constructors_while_true(self):
  131. commands = ['"while"', # While
  132. '"const"', 'true', # Condition
  133. '"output"', # True-part
  134. '"const"', 'true',
  135. 'false', # Has next
  136. 'true', # Has next
  137. '"output"', # False-part
  138. '"const"', 'false',
  139. 'true', # Has next
  140. '"return"', # Return
  141. 'true', # Has value
  142. '"const"', "true",
  143. ]
  144. self.assertTrue(run_barebone(flatten(commands), ["True", "True", "True", "True"], 1))
  145. def test_constructors_declare_and_assign(self):
  146. commands = ['"declare"',
  147. '"1"',
  148. 'true',
  149. '"assign"',
  150. '"resolve"', '"1"',
  151. '"const"', '5',
  152. 'true',
  153. '"output"',
  154. '"access"', '"resolve"', '"1"',
  155. 'true',
  156. '"return"',
  157. 'true',
  158. '"const"', "true",
  159. ]
  160. self.assertTrue(run_barebone(flatten(commands), ["5"], 1))
  161. def test_constructors_output_input(self):
  162. commands = ['"output"',
  163. '"input"',
  164. 'true',
  165. '"return"',
  166. 'true',
  167. '"const"', "true",
  168. ]
  169. self.assertTrue(run_barebone(flatten(commands) + ['123456'], ["123456"], 1))
  170. def test_constructors_continue(self):
  171. commands = ['"while"',
  172. '"const"', 'true',
  173. '"output"', '"const"', '1',
  174. 'true',
  175. '"if"',
  176. '"const"', 'true',
  177. '"continue"',
  178. 'false',
  179. 'true',
  180. '"output"', '"const"', '2',
  181. 'false',
  182. 'true',
  183. '"output"', '"const"', '3',
  184. 'true',
  185. '"return"', 'true',
  186. '"const"', 'true',
  187. ]
  188. self.assertTrue(run_barebone(flatten(commands), ['1', '1', '1', '1', '1'], 1))
  189. def test_constructors_break(self):
  190. commands = ['"while"',
  191. '"const"', 'true',
  192. '"output"', '"const"', '1',
  193. 'true',
  194. '"if"',
  195. '"const"', 'true',
  196. '"break"',
  197. 'false',
  198. 'true',
  199. '"output"', '"const"', '2',
  200. 'false',
  201. 'true',
  202. '"output"', '"const"', '3',
  203. 'true',
  204. '"return"', 'true',
  205. '"const"', 'true',
  206. ]
  207. self.assertTrue(run_barebone(flatten(commands), ['1', '3'], 1))