test_instruction_call.py 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. import unittest
  2. from modelverse_kernel.main import ModelverseKernel
  3. from 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", [])[0]
  8. self.mvk = ModelverseKernel(self.root)
  9. self.user_root = self.mvs.execute("CN", [])[0]
  10. self.user_frame = self.mvs.execute("CN", [])[0]
  11. self.symbols = self.mvs.execute("CN", [])[0]
  12. self.evalstack = self.mvs.execute("CN", [])[0]
  13. self.returnvalue = self.mvs.execute("CN", [])[0]
  14. self.phase = self.mvs.execute("CNV", ["init"])[0]
  15. self.mvs.execute("CD", [self.root, "user_1", self.user_root])
  16. self.mvs.execute("CD", [self.user_root, "frame", self.user_frame])
  17. self.mvs.execute("CD", [self.user_frame, "symbols", self.symbols])
  18. self.mvs.execute("CD", [self.user_frame, "evalstack", self.evalstack])
  19. self.mvs.execute("CD", [self.user_frame, "phase", self.phase])
  20. self.mvs.execute("CD", [self.user_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", [])[0]
  30. self.var_function = self.mvs.execute("CN", [])[0]
  31. self.signature = self.mvs.execute("CN", [])[0]
  32. self.val_function = self.mvs.execute("CN", [])[0]
  33. self.inst = self.mvs.execute("CNV", [{"value":"call"}])[0]
  34. self.access = self.mvs.execute("CNV", [{"value":"access"}])[0]
  35. self.resolve = self.mvs.execute("CNV", [{"value":"resolve"}])[0]
  36. self.ret = self.mvs.execute("CNV", [{"value":"return"}])[0]
  37. self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  38. self.value_a = self.mvs.execute("CNV", ["a"])[0]
  39. self.mvs.execute("CD", [self.user_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])[0]
  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", [])[0]
  93. self.var_function = self.mvs.execute("CN", [])[0]
  94. self.signature = self.mvs.execute("CN", [])[0]
  95. self.val_function = self.mvs.execute("CN", [])[0]
  96. self.var_abc = self.mvs.execute("CN", [])[0]
  97. self.actual_arg = self.mvs.execute("CN", [])[0]
  98. self.inst = self.mvs.execute("CNV", [{"value":"call"}])[0]
  99. self.access = self.mvs.execute("CNV", [{"value":"access"}])[0]
  100. self.resolve = self.mvs.execute("CNV", [{"value":"resolve"}])[0]
  101. self.ret = self.mvs.execute("CNV", [{"value":"return"}])[0]
  102. self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  103. self.const_def = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  104. self.value_a = self.mvs.execute("CNV", ["a"])[0]
  105. self.value_abc = self.mvs.execute("CNV", ["abc"])[0]
  106. self.value_def = self.mvs.execute("CNV", ["def"])[0]
  107. self.mvs.execute("CD", [self.user_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"])[0]])
  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])[0]
  122. self.mvs.execute("CE", [t, self.var_function])
  123. self.mvs.execute("CD", [self.params, "abc", self.var_abc])
  124. ### Execute rules
  125. self.assertEquals(get_inst(self.root, self.mvs), "call")
  126. self.assertEquals(get_phase(self.root, self.mvs), "init")
  127. execute_until_finished(self.mvk, self.mvs)
  128. self.assertEquals(get_inst(self.root, self.mvs), "access")
  129. self.assertEquals(get_phase(self.root, self.mvs), "init")
  130. execute_until_finished(self.mvk, self.mvs)
  131. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  132. self.assertEquals(get_phase(self.root, self.mvs), "init")
  133. execute_until_finished(self.mvk, self.mvs)
  134. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  135. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  136. execute_until_finished(self.mvk, self.mvs)
  137. self.assertEquals(get_inst(self.root, self.mvs), "access")
  138. self.assertEquals(get_phase(self.root, self.mvs), "eval")
  139. execute_until_finished(self.mvk, self.mvs)
  140. self.assertEquals(get_inst(self.root, self.mvs), "access")
  141. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  142. execute_until_finished(self.mvk, self.mvs)
  143. self.assertEquals(get_inst(self.root, self.mvs), "call")
  144. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg)
  145. execute_until_finished(self.mvk, self.mvs)
  146. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  147. self.assertEquals(get_phase(self.root, self.mvs), "init")
  148. execute_until_finished(self.mvk, self.mvs)
  149. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  150. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  151. execute_until_finished(self.mvk, self.mvs)
  152. self.assertEquals(get_inst(self.root, self.mvs), "call")
  153. self.assertEquals(get_phase(self.root, self.mvs), "call")
  154. execute_until_finished(self.mvk, self.mvs)
  155. self.assertEquals(get_inst(self.root, self.mvs), "return")
  156. self.assertEquals(get_phase(self.root, self.mvs), "init")
  157. execute_until_finished(self.mvk, self.mvs)
  158. self.assertEquals(get_inst(self.root, self.mvs), "call")
  159. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  160. execute_until_finished(self.mvk, self.mvs)
  161. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  162. self.assertEquals(get_phase(self.root, self.mvs), "init")
  163. execute_until_finished(self.mvk, self.mvs)
  164. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  165. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  166. self.assertEquals(get_returnvalue(self.root, self.mvs), "a")
  167. def test_two_params(self):
  168. """
  169. Test the code:
  170. def function_A(a, b):
  171. return
  172. function_A(a="d", b="e")
  173. f
  174. """
  175. self.params = self.mvs.execute("CN", [])[0]
  176. self.var_function = self.mvs.execute("CN", [])[0]
  177. self.signature = self.mvs.execute("CN", [])[0]
  178. self.val_function = self.mvs.execute("CN", [])[0]
  179. self.var_a = self.mvs.execute("CN", [])[0]
  180. self.var_b = self.mvs.execute("CN", [])[0]
  181. self.actual_arg_a = self.mvs.execute("CN", [])[0]
  182. self.actual_arg_b = self.mvs.execute("CN", [])[0]
  183. self.inst = self.mvs.execute("CNV", [{"value":"call"}])[0]
  184. self.access = self.mvs.execute("CNV", [{"value":"access"}])[0]
  185. self.resolve = self.mvs.execute("CNV", [{"value":"resolve"}])[0]
  186. self.ret = self.mvs.execute("CNV", [{"value":"return"}])[0]
  187. self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  188. self.const_b = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  189. self.const_d = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  190. self.const_e = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  191. self.const_f = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  192. self.value_a = self.mvs.execute("CNV", ["a"])[0]
  193. self.value_b = self.mvs.execute("CNV", ["b"])[0]
  194. self.value_d = self.mvs.execute("CNV", ["d"])[0]
  195. self.value_e = self.mvs.execute("CNV", ["e"])[0]
  196. self.value_f = self.mvs.execute("CNV", ["f"])[0]
  197. self.mvs.execute("CD", [self.user_frame, "IP", self.inst])
  198. self.mvs.execute("CD", [self.inst, "func", self.access])
  199. self.mvs.execute("CD", [self.inst, "next", self.const_a])
  200. self.mvs.execute("CD", [self.inst, "params", self.actual_arg_a])
  201. self.mvs.execute("CD", [self.actual_arg_a, "next_param", self.actual_arg_b])
  202. self.mvs.execute("CD", [self.inst, "last_param", self.actual_arg_b])
  203. self.mvs.execute("CD", [self.actual_arg_a, "value", self.const_d])
  204. self.mvs.execute("CD", [self.actual_arg_a, "name", self.mvs.execute("CNV", ["a"])[0]])
  205. self.mvs.execute("CD", [self.actual_arg_b, "value", self.const_e])
  206. self.mvs.execute("CD", [self.actual_arg_b, "name", self.mvs.execute("CNV", ["b"])[0]])
  207. self.mvs.execute("CD", [self.const_a, "node", self.value_a])
  208. self.mvs.execute("CD", [self.const_b, "node", self.value_b])
  209. self.mvs.execute("CD", [self.const_d, "node", self.value_d])
  210. self.mvs.execute("CD", [self.const_e, "node", self.value_e])
  211. self.mvs.execute("CD", [self.const_f, "node", self.value_f])
  212. self.mvs.execute("CD", [self.access, "var", self.resolve])
  213. self.mvs.execute("CD", [self.resolve, "var", self.var_function])
  214. self.mvs.execute("CD", [self.val_function, "value", self.signature])
  215. self.mvs.execute("CD", [self.signature, "body", self.ret])
  216. self.mvs.execute("CD", [self.signature, "params", self.params])
  217. t = self.mvs.execute("CE", [self.symbols, self.val_function])[0]
  218. self.mvs.execute("CE", [t, self.var_function])
  219. self.mvs.execute("CD", [self.params, "a", self.var_a])
  220. self.mvs.execute("CD", [self.params, "b", self.var_b])
  221. ### Execute rules
  222. self.assertEquals(get_inst(self.root, self.mvs), "call")
  223. self.assertEquals(get_phase(self.root, self.mvs), "init")
  224. execute_until_finished(self.mvk, self.mvs)
  225. self.assertEquals(get_inst(self.root, self.mvs), "access")
  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), "resolve")
  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), "finish")
  233. execute_until_finished(self.mvk, self.mvs)
  234. self.assertEquals(get_inst(self.root, self.mvs), "access")
  235. self.assertEquals(get_phase(self.root, self.mvs), "eval")
  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), "finish")
  239. execute_until_finished(self.mvk, self.mvs)
  240. self.assertEquals(get_inst(self.root, self.mvs), "call")
  241. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_a)
  242. execute_until_finished(self.mvk, self.mvs)
  243. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  244. self.assertEquals(get_phase(self.root, self.mvs), "init")
  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), "finish")
  248. execute_until_finished(self.mvk, self.mvs)
  249. self.assertEquals(get_inst(self.root, self.mvs), "call")
  250. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_b)
  251. execute_until_finished(self.mvk, self.mvs)
  252. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  253. self.assertEquals(get_phase(self.root, self.mvs), "init")
  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), "finish")
  257. execute_until_finished(self.mvk, self.mvs)
  258. self.assertEquals(get_inst(self.root, self.mvs), "call")
  259. self.assertEquals(get_phase(self.root, self.mvs), "call")
  260. execute_until_finished(self.mvk, self.mvs)
  261. self.assertEquals(get_inst(self.root, self.mvs), "return")
  262. self.assertEquals(get_phase(self.root, self.mvs), "init")
  263. execute_until_finished(self.mvk, self.mvs)
  264. self.assertEquals(get_inst(self.root, self.mvs), "call")
  265. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  266. execute_until_finished(self.mvk, self.mvs)
  267. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  268. self.assertEquals(get_phase(self.root, self.mvs), "init")
  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), "finish")
  272. self.assertEquals(get_returnvalue(self.root, self.mvs), "a")
  273. def test_three_params(self):
  274. """
  275. Test the code:
  276. def function_A(a, b, c):
  277. return
  278. function_A(a="d", b="e", c="f")
  279. f
  280. """
  281. self.params = self.mvs.execute("CN", [])[0]
  282. self.var_function = self.mvs.execute("CN", [])[0]
  283. self.signature = self.mvs.execute("CN", [])[0]
  284. self.val_function = self.mvs.execute("CN", [])[0]
  285. self.var_a = self.mvs.execute("CN", [])[0]
  286. self.var_b = self.mvs.execute("CN", [])[0]
  287. self.var_c = self.mvs.execute("CN", [])[0]
  288. self.actual_arg_a = self.mvs.execute("CN", [])[0]
  289. self.actual_arg_b = self.mvs.execute("CN", [])[0]
  290. self.actual_arg_c = self.mvs.execute("CN", [])[0]
  291. self.inst = self.mvs.execute("CNV", [{"value":"call"}])[0]
  292. self.access = self.mvs.execute("CNV", [{"value":"access"}])[0]
  293. self.resolve = self.mvs.execute("CNV", [{"value":"resolve"}])[0]
  294. self.ret = self.mvs.execute("CNV", [{"value":"return"}])[0]
  295. self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  296. self.const_b = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  297. self.const_c = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  298. self.const_d = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  299. self.const_e = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  300. self.const_f = self.mvs.execute("CNV", [{"value":"constant"}])[0]
  301. self.value_a = self.mvs.execute("CNV", ["a"])[0]
  302. self.value_b = self.mvs.execute("CNV", ["b"])[0]
  303. self.value_c = self.mvs.execute("CNV", ["c"])[0]
  304. self.value_d = self.mvs.execute("CNV", ["d"])[0]
  305. self.value_e = self.mvs.execute("CNV", ["e"])[0]
  306. self.value_f = self.mvs.execute("CNV", ["f"])[0]
  307. self.mvs.execute("CD", [self.user_frame, "IP", self.inst])
  308. self.mvs.execute("CD", [self.inst, "func", self.access])
  309. self.mvs.execute("CD", [self.inst, "next", self.const_a])
  310. self.mvs.execute("CD", [self.inst, "params", self.actual_arg_a])
  311. self.mvs.execute("CD", [self.actual_arg_a, "next_param", self.actual_arg_b])
  312. self.mvs.execute("CD", [self.actual_arg_b, "next_param", self.actual_arg_c])
  313. self.mvs.execute("CD", [self.inst, "last_param", self.actual_arg_c])
  314. self.mvs.execute("CD", [self.actual_arg_a, "value", self.const_d])
  315. self.mvs.execute("CD", [self.actual_arg_a, "name", self.mvs.execute("CNV", ["a"])[0]])
  316. self.mvs.execute("CD", [self.actual_arg_b, "value", self.const_e])
  317. self.mvs.execute("CD", [self.actual_arg_b, "name", self.mvs.execute("CNV", ["b"])[0]])
  318. self.mvs.execute("CD", [self.actual_arg_c, "value", self.const_f])
  319. self.mvs.execute("CD", [self.actual_arg_c, "name", self.mvs.execute("CNV", ["c"])[0]])
  320. self.mvs.execute("CD", [self.const_a, "node", self.value_a])
  321. self.mvs.execute("CD", [self.const_b, "node", self.value_b])
  322. self.mvs.execute("CD", [self.const_c, "node", self.value_c])
  323. self.mvs.execute("CD", [self.const_d, "node", self.value_d])
  324. self.mvs.execute("CD", [self.const_e, "node", self.value_e])
  325. self.mvs.execute("CD", [self.const_f, "node", self.value_f])
  326. self.mvs.execute("CD", [self.access, "var", self.resolve])
  327. self.mvs.execute("CD", [self.resolve, "var", self.var_function])
  328. self.mvs.execute("CD", [self.val_function, "value", self.signature])
  329. self.mvs.execute("CD", [self.signature, "body", self.ret])
  330. self.mvs.execute("CD", [self.signature, "params", self.params])
  331. t = self.mvs.execute("CE", [self.symbols, self.val_function])[0]
  332. self.mvs.execute("CE", [t, self.var_function])
  333. self.mvs.execute("CD", [self.params, "a", self.var_a])
  334. self.mvs.execute("CD", [self.params, "b", self.var_b])
  335. self.mvs.execute("CD", [self.params, "c", self.var_c])
  336. ### Execute rules
  337. self.assertEquals(get_inst(self.root, self.mvs), "call")
  338. self.assertEquals(get_phase(self.root, self.mvs), "init")
  339. execute_until_finished(self.mvk, self.mvs)
  340. self.assertEquals(get_inst(self.root, self.mvs), "access")
  341. self.assertEquals(get_phase(self.root, self.mvs), "init")
  342. execute_until_finished(self.mvk, self.mvs)
  343. self.assertEquals(get_inst(self.root, self.mvs), "resolve")
  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), "resolve")
  347. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  348. execute_until_finished(self.mvk, self.mvs)
  349. self.assertEquals(get_inst(self.root, self.mvs), "access")
  350. self.assertEquals(get_phase(self.root, self.mvs), "eval")
  351. execute_until_finished(self.mvk, self.mvs)
  352. self.assertEquals(get_inst(self.root, self.mvs), "access")
  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), "call")
  356. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_a)
  357. execute_until_finished(self.mvk, self.mvs)
  358. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  359. self.assertEquals(get_phase(self.root, self.mvs), "init")
  360. execute_until_finished(self.mvk, self.mvs)
  361. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  362. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  363. execute_until_finished(self.mvk, self.mvs)
  364. self.assertEquals(get_inst(self.root, self.mvs), "call")
  365. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_b)
  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), "init")
  369. execute_until_finished(self.mvk, self.mvs)
  370. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  371. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  372. execute_until_finished(self.mvk, self.mvs)
  373. self.assertEquals(get_inst(self.root, self.mvs), "call")
  374. self.assertEquals(get_phase_ref(self.root, self.mvs), self.actual_arg_c)
  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), "init")
  378. execute_until_finished(self.mvk, self.mvs)
  379. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  380. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  381. execute_until_finished(self.mvk, self.mvs)
  382. self.assertEquals(get_inst(self.root, self.mvs), "call")
  383. self.assertEquals(get_phase(self.root, self.mvs), "call")
  384. execute_until_finished(self.mvk, self.mvs)
  385. self.assertEquals(get_inst(self.root, self.mvs), "return")
  386. self.assertEquals(get_phase(self.root, self.mvs), "init")
  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), "finish")
  390. execute_until_finished(self.mvk, self.mvs)
  391. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  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), "constant")
  395. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  396. self.assertEquals(get_returnvalue(self.root, self.mvs), "a")