test_constructors_al.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  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_global_and_assign(self):
  171. commands = ['"global"',
  172. '"my_global"',
  173. 'true',
  174. '"assign"',
  175. '"resolve"', '"my_global"',
  176. '"const"', '5',
  177. 'true',
  178. '"output"',
  179. '"access"', '"resolve"', '"my_global"',
  180. 'true',
  181. '"return"',
  182. 'true',
  183. '"const"', "true",
  184. ]
  185. self.assertTrue(run_barebone(flatten(commands), ["5"], 1))
  186. def test_constructors_funcdecl(self):
  187. commands = ['"global"',
  188. '"my_global"',
  189. 'true',
  190. '"funcdef"', '"my_global"',
  191. '2',
  192. 2,
  193. 3,
  194. '"return"', 'true',
  195. '"call"',
  196. '"deref"', '"primitives/integer_addition"',
  197. '2',
  198. '"access"', '"resolve"', 2,
  199. '"access"', '"resolve"', 3,
  200. 'false',
  201. 'true',
  202. '"output"',
  203. '"call"',
  204. '"access"', '"resolve"', '"my_global"',
  205. '2',
  206. '"input"',
  207. '"input"',
  208. 'false',
  209. 'true',
  210. '"return"', 'true',
  211. '"const"', 'true',
  212. ]
  213. self.assertTrue(run_barebone(flatten(commands) + ['2', '5'], ["7"], 1))
  214. def test_constructors_fibonacci(self):
  215. commands = ['"global"',
  216. '"fibonacci"',
  217. 'true',
  218. '"funcdef"', '"fibonacci"',
  219. '1',
  220. 2,
  221. '"if"',
  222. '"call"',
  223. '"deref"', '"primitives/integer_lte"',
  224. '2',
  225. '"access"', '"resolve"', 2,
  226. '"const"', '2',
  227. 'false',
  228. '"return"', 'true', '"const"', '1',
  229. 'true',
  230. '"return"', 'true',
  231. '"call"',
  232. '"deref"', '"primitives/integer_addition"',
  233. '2',
  234. '"call"',
  235. '"access"', '"resolve"', '"fibonacci"',
  236. '1',
  237. '"call"',
  238. '"deref"', '"primitives/integer_subtraction"',
  239. '2',
  240. '"access"', '"resolve"', 2,
  241. '"const"', '1',
  242. 'false',
  243. 'false',
  244. '"call"',
  245. '"access"', '"resolve"', '"fibonacci"',
  246. '1',
  247. '"call"',
  248. '"deref"', '"primitives/integer_subtraction"',
  249. '2',
  250. '"access"', '"resolve"', 2,
  251. '"const"', '2',
  252. 'false',
  253. 'false',
  254. 'false',
  255. 'false',
  256. 'true',
  257. '"while"',
  258. '"const"', 'true',
  259. '"output"',
  260. '"call"',
  261. '"access"', '"resolve"', '"fibonacci"',
  262. '1',
  263. '"input"',
  264. 'false',
  265. 'false',
  266. 'false',
  267. ]
  268. self.assertTrue(run_barebone(flatten(commands) + ['1', '2', '3', '4', '5', '6', '7', '8'], ['1', '1', '2', '3', '5', '8', '13', '21'], 1))
  269. def test_constructors_continue(self):
  270. commands = ['"while"',
  271. '"const"', 'true',
  272. '"output"', '"const"', '1',
  273. 'true',
  274. '"if"',
  275. '"const"', 'true',
  276. '"continue"',
  277. 'false',
  278. 'true',
  279. '"output"', '"const"', '2',
  280. 'false',
  281. 'true',
  282. '"output"', '"const"', '3',
  283. 'true',
  284. '"return"', 'true',
  285. '"const"', 'true',
  286. ]
  287. self.assertTrue(run_barebone(flatten(commands), ['1', '1', '1', '1', '1'], 1))
  288. def test_constructors_break(self):
  289. commands = ['"while"',
  290. '"const"', 'true',
  291. '"output"', '"const"', '1',
  292. 'true',
  293. '"if"',
  294. '"const"', 'true',
  295. '"break"',
  296. 'false',
  297. 'true',
  298. '"output"', '"const"', '2',
  299. 'false',
  300. 'true',
  301. '"output"', '"const"', '3',
  302. 'true',
  303. '"return"', 'true',
  304. '"const"', 'true',
  305. ]
  306. self.assertTrue(run_barebone(flatten(commands), ['1', '3'], 1))