test_instruction_call.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. import unittest
  2. from modelverse_kernel.main import ModelverseKernel
  3. from test.utils import execute_until_finished, MvSWrapper, get_inst, get_phase, get_returnvalue, get_phase_ref
  4. class Testcall(unittest.TestCase):
  5. def setUp(self):
  6. self.mvs = MvSWrapper()
  7. self.root = self.mvs.execute("RR", [])
  8. self.mvk = ModelverseKernel(self.root)
  9. self.task_root = self.mvs.execute("CN", [])
  10. self.task_frame = self.mvs.execute("CN", [])
  11. self.symbols = self.mvs.execute("CN", [])
  12. self.evalstack = self.mvs.execute("CN", [])
  13. self.returnvalue = self.mvs.execute("CN", [])
  14. self.phase = self.mvs.execute("CNV", ["init"])
  15. self.mvs.execute("CD", [self.root, "task_1", self.task_root])
  16. self.mvs.execute("CD", [self.task_root, "frame", self.task_frame])
  17. self.mvs.execute("CD", [self.task_frame, "symbols", self.symbols])
  18. self.mvs.execute("CD", [self.task_frame, "evalstack", self.evalstack])
  19. self.mvs.execute("CD", [self.task_frame, "phase", self.phase])
  20. self.mvs.execute("CD", [self.task_frame, "returnvalue", self.returnvalue])
  21. def test_no_params(self):
  22. """
  23. Test the code:
  24. def function_A():
  25. return
  26. function_A()
  27. a
  28. """
  29. self.params = self.mvs.execute("CN", [])
  30. self.var_function = self.mvs.execute("CN", [])
  31. self.signature = self.mvs.execute("CN", [])
  32. self.val_function = self.mvs.execute("CN", [])
  33. self.inst = self.mvs.execute("CNV", [{"value":"call"}])
  34. self.access = self.mvs.execute("CNV", [{"value":"access"}])
  35. self.resolve = self.mvs.execute("CNV", [{"value":"resolve"}])
  36. self.ret = self.mvs.execute("CNV", [{"value":"return"}])
  37. self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])
  38. self.value_a = self.mvs.execute("CNV", ["a"])
  39. self.mvs.execute("CD", [self.task_frame, "IP", self.inst])
  40. self.mvs.execute("CD", [self.inst, "func", self.access])
  41. self.mvs.execute("CD", [self.inst, "next", self.const_a])
  42. self.mvs.execute("CD", [self.access, "var", self.resolve])
  43. self.mvs.execute("CD", [self.resolve, "var", self.var_function])
  44. self.mvs.execute("CD", [self.val_function, "value", self.signature])
  45. self.mvs.execute("CD", [self.signature, "body", self.ret])
  46. self.mvs.execute("CD", [self.signature, "params", self.params])
  47. self.mvs.execute("CD", [self.const_a, "node", self.value_a])
  48. t = self.mvs.execute("CE", [self.symbols, self.val_function])
  49. self.mvs.execute("CE", [t, self.var_function])
  50. ### Execute rules
  51. self.assertEquals(get_inst(self.root, self.mvs), "call")
  52. self.assertEquals(get_phase(self.root, self.mvs), "init")
  53. execute_until_finished(self.mvk, self.mvs)
  54. self.assertEquals(get_inst(self.root, self.mvs), "access")
  55. self.assertEquals(get_phase(self.root, self.mvs), "init")
  56. execute_until_finished(self.mvk, self.mvs)
  57. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  58. self.assertEquals(get_phase(self.root, self.mvs), "init")
  59. execute_until_finished(self.mvk, self.mvs)
  60. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  61. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  62. execute_until_finished(self.mvk, self.mvs)
  63. self.assertEquals(get_inst(self.root, self.mvs), "access")
  64. self.assertEquals(get_phase(self.root, self.mvs), "eval")
  65. execute_until_finished(self.mvk, self.mvs)
  66. self.assertEquals(get_inst(self.root, self.mvs), "access")
  67. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  68. execute_until_finished(self.mvk, self.mvs)
  69. self.assertEquals(get_inst(self.root, self.mvs), "call")
  70. self.assertEquals(get_phase(self.root, self.mvs), "call")
  71. execute_until_finished(self.mvk, self.mvs)
  72. self.assertEquals(get_inst(self.root, self.mvs), "return")
  73. self.assertEquals(get_phase(self.root, self.mvs), "init")
  74. execute_until_finished(self.mvk, self.mvs)
  75. self.assertEquals(get_inst(self.root, self.mvs), "call")
  76. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  77. execute_until_finished(self.mvk, self.mvs)
  78. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  79. self.assertEquals(get_phase(self.root, self.mvs), "init")
  80. execute_until_finished(self.mvk, self.mvs)
  81. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  82. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  83. self.assertEquals(get_returnvalue(self.root, self.mvs), "a")
  84. def test_single_param(self):
  85. """
  86. Test the code:
  87. def function_A(abc):
  88. return
  89. function_A(abc="def")
  90. a
  91. """
  92. self.params = self.mvs.execute("CN", [])
  93. self.var_function = self.mvs.execute("CN", [])
  94. self.signature = self.mvs.execute("CN", [])
  95. self.val_function = self.mvs.execute("CN", [])
  96. self.var_abc = self.mvs.execute("CN", [])
  97. self.actual_arg = self.mvs.execute("CN", [])
  98. self.inst = self.mvs.execute("CNV", [{"value":"call"}])
  99. self.access = self.mvs.execute("CNV", [{"value":"access"}])
  100. self.resolve = self.mvs.execute("CNV", [{"value":"resolve"}])
  101. self.ret = self.mvs.execute("CNV", [{"value":"return"}])
  102. self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])
  103. self.const_def = self.mvs.execute("CNV", [{"value":"constant"}])
  104. self.value_a = self.mvs.execute("CNV", ["a"])
  105. self.value_abc = self.mvs.execute("CNV", ["abc"])
  106. self.value_def = self.mvs.execute("CNV", ["def"])
  107. self.mvs.execute("CD", [self.task_frame, "IP", self.inst])
  108. self.mvs.execute("CD", [self.inst, "func", self.access])
  109. self.mvs.execute("CD", [self.inst, "next", self.const_a])
  110. self.mvs.execute("CD", [self.inst, "params", self.actual_arg])
  111. self.mvs.execute("CD", [self.inst, "last_param", self.actual_arg])
  112. self.mvs.execute("CD", [self.actual_arg, "value", self.const_def])
  113. self.mvs.execute("CD", [self.actual_arg, "name", self.mvs.execute("CNV", ["abc"])])
  114. self.mvs.execute("CD", [self.const_def, "node", self.value_def])
  115. self.mvs.execute("CD", [self.access, "var", self.resolve])
  116. self.mvs.execute("CD", [self.resolve, "var", self.var_function])
  117. self.mvs.execute("CD", [self.val_function, "value", self.signature])
  118. self.mvs.execute("CD", [self.signature, "body", self.ret])
  119. self.mvs.execute("CD", [self.signature, "params", self.params])
  120. self.mvs.execute("CD", [self.const_a, "node", self.value_a])
  121. t = self.mvs.execute("CE", [self.symbols, self.val_function])
  122. self.mvs.execute("CE", [t, self.var_function])
  123. self.mvs.execute("CD", [self.params, "abc", self.var_abc])
  124. self.mvs.execute("CD", [self.var_abc, "name", self.value_abc])
  125. ### Execute rules
  126. self.assertEquals(get_inst(self.root, self.mvs), "call")
  127. self.assertEquals(get_phase(self.root, self.mvs), "init")
  128. execute_until_finished(self.mvk, self.mvs)
  129. self.assertEquals(get_inst(self.root, self.mvs), "access")
  130. self.assertEquals(get_phase(self.root, self.mvs), "init")
  131. execute_until_finished(self.mvk, self.mvs)
  132. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  133. self.assertEquals(get_phase(self.root, self.mvs), "init")
  134. execute_until_finished(self.mvk, self.mvs)
  135. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  136. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  137. execute_until_finished(self.mvk, self.mvs)
  138. self.assertEquals(get_inst(self.root, self.mvs), "access")
  139. self.assertEquals(get_phase(self.root, self.mvs), "eval")
  140. execute_until_finished(self.mvk, self.mvs)
  141. self.assertEquals(get_inst(self.root, self.mvs), "access")
  142. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  143. execute_until_finished(self.mvk, self.mvs)
  144. self.assertEquals(get_inst(self.root, self.mvs), "call")
  145. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg)
  146. execute_until_finished(self.mvk, self.mvs)
  147. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  148. self.assertEquals(get_phase(self.root, self.mvs), "init")
  149. execute_until_finished(self.mvk, self.mvs)
  150. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  151. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  152. execute_until_finished(self.mvk, self.mvs)
  153. self.assertEquals(get_inst(self.root, self.mvs), "call")
  154. self.assertEquals(get_phase(self.root, self.mvs), "call")
  155. execute_until_finished(self.mvk, self.mvs)
  156. self.assertEquals(get_inst(self.root, self.mvs), "return")
  157. self.assertEquals(get_phase(self.root, self.mvs), "init")
  158. execute_until_finished(self.mvk, self.mvs)
  159. self.assertEquals(get_inst(self.root, self.mvs), "call")
  160. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  161. execute_until_finished(self.mvk, self.mvs)
  162. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  163. self.assertEquals(get_phase(self.root, self.mvs), "init")
  164. execute_until_finished(self.mvk, self.mvs)
  165. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  166. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  167. self.assertEquals(get_returnvalue(self.root, self.mvs), "a")
  168. def test_two_params(self):
  169. """
  170. Test the code:
  171. def function_A(a, b):
  172. return
  173. function_A(a="d", b="e")
  174. f
  175. """
  176. self.params = self.mvs.execute("CN", [])
  177. self.var_function = self.mvs.execute("CN", [])
  178. self.signature = self.mvs.execute("CN", [])
  179. self.val_function = self.mvs.execute("CN", [])
  180. self.var_a = self.mvs.execute("CN", [])
  181. self.var_b = self.mvs.execute("CN", [])
  182. self.actual_arg_a = self.mvs.execute("CN", [])
  183. self.actual_arg_b = self.mvs.execute("CN", [])
  184. self.inst = self.mvs.execute("CNV", [{"value":"call"}])
  185. self.access = self.mvs.execute("CNV", [{"value":"access"}])
  186. self.resolve = self.mvs.execute("CNV", [{"value":"resolve"}])
  187. self.ret = self.mvs.execute("CNV", [{"value":"return"}])
  188. self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])
  189. self.const_b = self.mvs.execute("CNV", [{"value":"constant"}])
  190. self.const_d = self.mvs.execute("CNV", [{"value":"constant"}])
  191. self.const_e = self.mvs.execute("CNV", [{"value":"constant"}])
  192. self.const_f = self.mvs.execute("CNV", [{"value":"constant"}])
  193. self.value_a = self.mvs.execute("CNV", ["a"])
  194. self.value_b = self.mvs.execute("CNV", ["b"])
  195. self.value_d = self.mvs.execute("CNV", ["d"])
  196. self.value_e = self.mvs.execute("CNV", ["e"])
  197. self.value_f = self.mvs.execute("CNV", ["f"])
  198. self.mvs.execute("CD", [self.task_frame, "IP", self.inst])
  199. self.mvs.execute("CD", [self.inst, "func", self.access])
  200. self.mvs.execute("CD", [self.inst, "next", self.const_a])
  201. self.mvs.execute("CD", [self.inst, "params", self.actual_arg_a])
  202. self.mvs.execute("CD", [self.actual_arg_a, "next_param", self.actual_arg_b])
  203. self.mvs.execute("CD", [self.inst, "last_param", self.actual_arg_b])
  204. self.mvs.execute("CD", [self.actual_arg_a, "value", self.const_d])
  205. self.mvs.execute("CD", [self.actual_arg_a, "name", self.mvs.execute("CNV", ["a"])])
  206. self.mvs.execute("CD", [self.actual_arg_b, "value", self.const_e])
  207. self.mvs.execute("CD", [self.actual_arg_b, "name", self.mvs.execute("CNV", ["b"])])
  208. self.mvs.execute("CD", [self.const_a, "node", self.value_a])
  209. self.mvs.execute("CD", [self.const_b, "node", self.value_b])
  210. self.mvs.execute("CD", [self.const_d, "node", self.value_d])
  211. self.mvs.execute("CD", [self.const_e, "node", self.value_e])
  212. self.mvs.execute("CD", [self.const_f, "node", self.value_f])
  213. self.mvs.execute("CD", [self.access, "var", self.resolve])
  214. self.mvs.execute("CD", [self.resolve, "var", self.var_function])
  215. self.mvs.execute("CD", [self.val_function, "value", self.signature])
  216. self.mvs.execute("CD", [self.signature, "body", self.ret])
  217. self.mvs.execute("CD", [self.signature, "params", self.params])
  218. t = self.mvs.execute("CE", [self.symbols, self.val_function])
  219. self.mvs.execute("CE", [t, self.var_function])
  220. self.mvs.execute("CD", [self.params, "a", self.var_a])
  221. self.mvs.execute("CD", [self.params, "b", self.var_b])
  222. self.mvs.execute("CD", [self.var_a, "name", self.value_a])
  223. self.mvs.execute("CD", [self.var_b, "name", self.value_b])
  224. ### Execute rules
  225. self.assertEquals(get_inst(self.root, self.mvs), "call")
  226. self.assertEquals(get_phase(self.root, self.mvs), "init")
  227. execute_until_finished(self.mvk, self.mvs)
  228. self.assertEquals(get_inst(self.root, self.mvs), "access")
  229. self.assertEquals(get_phase(self.root, self.mvs), "init")
  230. execute_until_finished(self.mvk, self.mvs)
  231. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  232. self.assertEquals(get_phase(self.root, self.mvs), "init")
  233. execute_until_finished(self.mvk, self.mvs)
  234. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  235. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  236. execute_until_finished(self.mvk, self.mvs)
  237. self.assertEquals(get_inst(self.root, self.mvs), "access")
  238. self.assertEquals(get_phase(self.root, self.mvs), "eval")
  239. execute_until_finished(self.mvk, self.mvs)
  240. self.assertEquals(get_inst(self.root, self.mvs), "access")
  241. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  242. execute_until_finished(self.mvk, self.mvs)
  243. self.assertEquals(get_inst(self.root, self.mvs), "call")
  244. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_a)
  245. execute_until_finished(self.mvk, self.mvs)
  246. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  247. self.assertEquals(get_phase(self.root, self.mvs), "init")
  248. execute_until_finished(self.mvk, self.mvs)
  249. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  250. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  251. execute_until_finished(self.mvk, self.mvs)
  252. self.assertEquals(get_inst(self.root, self.mvs), "call")
  253. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_b)
  254. execute_until_finished(self.mvk, self.mvs)
  255. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  256. self.assertEquals(get_phase(self.root, self.mvs), "init")
  257. execute_until_finished(self.mvk, self.mvs)
  258. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  259. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  260. execute_until_finished(self.mvk, self.mvs)
  261. self.assertEquals(get_inst(self.root, self.mvs), "call")
  262. self.assertEquals(get_phase(self.root, self.mvs), "call")
  263. execute_until_finished(self.mvk, self.mvs)
  264. self.assertEquals(get_inst(self.root, self.mvs), "return")
  265. self.assertEquals(get_phase(self.root, self.mvs), "init")
  266. execute_until_finished(self.mvk, self.mvs)
  267. self.assertEquals(get_inst(self.root, self.mvs), "call")
  268. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  269. execute_until_finished(self.mvk, self.mvs)
  270. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  271. self.assertEquals(get_phase(self.root, self.mvs), "init")
  272. execute_until_finished(self.mvk, self.mvs)
  273. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  274. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  275. self.assertEquals(get_returnvalue(self.root, self.mvs), "a")
  276. def test_three_params(self):
  277. """
  278. Test the code:
  279. def function_A(a, b, c):
  280. return
  281. function_A(a="d", b="e", c="f")
  282. f
  283. """
  284. self.params = self.mvs.execute("CN", [])
  285. self.var_function = self.mvs.execute("CN", [])
  286. self.signature = self.mvs.execute("CN", [])
  287. self.val_function = self.mvs.execute("CN", [])
  288. self.var_a = self.mvs.execute("CN", [])
  289. self.var_b = self.mvs.execute("CN", [])
  290. self.var_c = self.mvs.execute("CN", [])
  291. self.actual_arg_a = self.mvs.execute("CN", [])
  292. self.actual_arg_b = self.mvs.execute("CN", [])
  293. self.actual_arg_c = self.mvs.execute("CN", [])
  294. self.inst = self.mvs.execute("CNV", [{"value":"call"}])
  295. self.access = self.mvs.execute("CNV", [{"value":"access"}])
  296. self.resolve = self.mvs.execute("CNV", [{"value":"resolve"}])
  297. self.ret = self.mvs.execute("CNV", [{"value":"return"}])
  298. self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])
  299. self.const_b = self.mvs.execute("CNV", [{"value":"constant"}])
  300. self.const_c = self.mvs.execute("CNV", [{"value":"constant"}])
  301. self.const_d = self.mvs.execute("CNV", [{"value":"constant"}])
  302. self.const_e = self.mvs.execute("CNV", [{"value":"constant"}])
  303. self.const_f = self.mvs.execute("CNV", [{"value":"constant"}])
  304. self.value_a = self.mvs.execute("CNV", ["a"])
  305. self.value_b = self.mvs.execute("CNV", ["b"])
  306. self.value_c = self.mvs.execute("CNV", ["c"])
  307. self.value_d = self.mvs.execute("CNV", ["d"])
  308. self.value_e = self.mvs.execute("CNV", ["e"])
  309. self.value_f = self.mvs.execute("CNV", ["f"])
  310. self.mvs.execute("CD", [self.task_frame, "IP", self.inst])
  311. self.mvs.execute("CD", [self.inst, "func", self.access])
  312. self.mvs.execute("CD", [self.inst, "next", self.const_a])
  313. self.mvs.execute("CD", [self.inst, "params", self.actual_arg_a])
  314. self.mvs.execute("CD", [self.actual_arg_a, "next_param", self.actual_arg_b])
  315. self.mvs.execute("CD", [self.actual_arg_b, "next_param", self.actual_arg_c])
  316. self.mvs.execute("CD", [self.inst, "last_param", self.actual_arg_c])
  317. self.mvs.execute("CD", [self.actual_arg_a, "value", self.const_d])
  318. self.mvs.execute("CD", [self.actual_arg_a, "name", self.mvs.execute("CNV", ["a"])])
  319. self.mvs.execute("CD", [self.actual_arg_b, "value", self.const_e])
  320. self.mvs.execute("CD", [self.actual_arg_b, "name", self.mvs.execute("CNV", ["b"])])
  321. self.mvs.execute("CD", [self.actual_arg_c, "value", self.const_f])
  322. self.mvs.execute("CD", [self.actual_arg_c, "name", self.mvs.execute("CNV", ["c"])])
  323. self.mvs.execute("CD", [self.const_a, "node", self.value_a])
  324. self.mvs.execute("CD", [self.const_b, "node", self.value_b])
  325. self.mvs.execute("CD", [self.const_c, "node", self.value_c])
  326. self.mvs.execute("CD", [self.const_d, "node", self.value_d])
  327. self.mvs.execute("CD", [self.const_e, "node", self.value_e])
  328. self.mvs.execute("CD", [self.const_f, "node", self.value_f])
  329. self.mvs.execute("CD", [self.access, "var", self.resolve])
  330. self.mvs.execute("CD", [self.resolve, "var", self.var_function])
  331. self.mvs.execute("CD", [self.val_function, "value", self.signature])
  332. self.mvs.execute("CD", [self.signature, "body", self.ret])
  333. self.mvs.execute("CD", [self.signature, "params", self.params])
  334. t = self.mvs.execute("CE", [self.symbols, self.val_function])
  335. self.mvs.execute("CE", [t, self.var_function])
  336. self.mvs.execute("CD", [self.params, "a", self.var_a])
  337. self.mvs.execute("CD", [self.params, "b", self.var_b])
  338. self.mvs.execute("CD", [self.params, "c", self.var_c])
  339. self.mvs.execute("CD", [self.var_a, "name", self.value_a])
  340. self.mvs.execute("CD", [self.var_b, "name", self.value_b])
  341. self.mvs.execute("CD", [self.var_c, "name", self.value_c])
  342. ### Execute rules
  343. self.assertEquals(get_inst(self.root, self.mvs), "call")
  344. self.assertEquals(get_phase(self.root, self.mvs), "init")
  345. execute_until_finished(self.mvk, self.mvs)
  346. self.assertEquals(get_inst(self.root, self.mvs), "access")
  347. self.assertEquals(get_phase(self.root, self.mvs), "init")
  348. execute_until_finished(self.mvk, self.mvs)
  349. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  350. self.assertEquals(get_phase(self.root, self.mvs), "init")
  351. execute_until_finished(self.mvk, self.mvs)
  352. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  353. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  354. execute_until_finished(self.mvk, self.mvs)
  355. self.assertEquals(get_inst(self.root, self.mvs), "access")
  356. self.assertEquals(get_phase(self.root, self.mvs), "eval")
  357. execute_until_finished(self.mvk, self.mvs)
  358. self.assertEquals(get_inst(self.root, self.mvs), "access")
  359. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  360. execute_until_finished(self.mvk, self.mvs)
  361. self.assertEquals(get_inst(self.root, self.mvs), "call")
  362. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_a)
  363. execute_until_finished(self.mvk, self.mvs)
  364. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  365. self.assertEquals(get_phase(self.root, self.mvs), "init")
  366. execute_until_finished(self.mvk, self.mvs)
  367. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  368. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  369. execute_until_finished(self.mvk, self.mvs)
  370. self.assertEquals(get_inst(self.root, self.mvs), "call")
  371. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_b)
  372. execute_until_finished(self.mvk, self.mvs)
  373. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  374. self.assertEquals(get_phase(self.root, self.mvs), "init")
  375. execute_until_finished(self.mvk, self.mvs)
  376. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  377. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  378. execute_until_finished(self.mvk, self.mvs)
  379. self.assertEquals(get_inst(self.root, self.mvs), "call")
  380. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_c)
  381. execute_until_finished(self.mvk, self.mvs)
  382. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  383. self.assertEquals(get_phase(self.root, self.mvs), "init")
  384. execute_until_finished(self.mvk, self.mvs)
  385. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  386. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  387. execute_until_finished(self.mvk, self.mvs)
  388. self.assertEquals(get_inst(self.root, self.mvs), "call")
  389. self.assertEquals(get_phase(self.root, self.mvs), "call")
  390. execute_until_finished(self.mvk, self.mvs)
  391. self.assertEquals(get_inst(self.root, self.mvs), "return")
  392. self.assertEquals(get_phase(self.root, self.mvs), "init")
  393. execute_until_finished(self.mvk, self.mvs)
  394. self.assertEquals(get_inst(self.root, self.mvs), "call")
  395. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  396. execute_until_finished(self.mvk, self.mvs)
  397. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  398. self.assertEquals(get_phase(self.root, self.mvs), "init")
  399. execute_until_finished(self.mvk, self.mvs)
  400. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  401. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  402. self.assertEquals(get_returnvalue(self.root, self.mvs), "a")