test_constructors_al_linkable.py 9.0 KB

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