test_constructors_al.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  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_funcdecl(self):
  171. commands = ['"declare"',
  172. 1,
  173. 'true',
  174. '"funcdef"', 1,
  175. '2',
  176. 2,
  177. 3,
  178. '"return"', 'true',
  179. '"call"',
  180. '"deref"', '"primitives/integer_addition"',
  181. '2',
  182. '"access"', '"resolve"', 2,
  183. '"access"', '"resolve"', 3,
  184. 'false',
  185. 'true',
  186. '"output"',
  187. '"call"',
  188. '"access"', '"resolve"', 1,
  189. '2',
  190. '"input"',
  191. '"input"',
  192. 'false',
  193. 'true',
  194. '"return"', 'true',
  195. '"const"', 'true',
  196. ]
  197. self.assertTrue(run_barebone(flatten(commands) + ['2', '5'], ["7"], 1))
  198. def test_constructors_continue(self):
  199. commands = ['"while"',
  200. '"const"', 'true',
  201. '"output"', '"const"', '1',
  202. 'true',
  203. '"if"',
  204. '"const"', 'true',
  205. '"continue"',
  206. 'false',
  207. 'true',
  208. '"output"', '"const"', '2',
  209. 'false',
  210. 'true',
  211. '"output"', '"const"', '3',
  212. 'true',
  213. '"return"', 'true',
  214. '"const"', 'true',
  215. ]
  216. self.assertTrue(run_barebone(flatten(commands), ['1', '1', '1', '1', '1'], 1))
  217. def test_constructors_break(self):
  218. commands = ['"while"',
  219. '"const"', 'true',
  220. '"output"', '"const"', '1',
  221. 'true',
  222. '"if"',
  223. '"const"', 'true',
  224. '"break"',
  225. 'false',
  226. 'true',
  227. '"output"', '"const"', '2',
  228. 'false',
  229. 'true',
  230. '"output"', '"const"', '3',
  231. 'true',
  232. '"return"', 'true',
  233. '"const"', 'true',
  234. ]
  235. self.assertTrue(run_barebone(flatten(commands), ['1', '3'], 1))