test_rules_call.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. import unittest
  2. from modelverse_kernel.main import ModelverseKernel
  3. from utils import execute_until_finished, MvSWrapper
  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. def test_call_resolve_none(self):
  10. root = self.root
  11. task_root = self.mvs.execute("CN", [])
  12. task_frame = self.mvs.execute("CN", [])
  13. phase = self.mvs.execute("CNV", ["init"])
  14. inst = self.mvs.execute("CNV", [{"value":"call"}])
  15. evalstack = self.mvs.execute("CN", [])
  16. func = self.mvs.execute("CN", [])
  17. self.mvs.execute("CD", [root, "task_1", task_root])
  18. self.mvs.execute("CD", [task_root, "frame", task_frame])
  19. self.mvs.execute("CD", [task_frame, "phase", phase])
  20. self.mvs.execute("CD", [task_frame, "symbols", self.mvs.execute("CN", [])])
  21. self.mvs.execute("CD", [task_frame, "IP", inst])
  22. self.mvs.execute("CD", [inst, "func", func])
  23. self.mvs.execute("CD", [task_frame, "evalstack", evalstack])
  24. # Do the invocation until it returns None
  25. execute_until_finished(self.mvk, self.mvs)
  26. # Execution of the command finished, so the MvS should be in the correct new state right now
  27. self.assertEquals(self.mvs.execute("RD", [root, "task_1"]), task_root)
  28. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"]), task_frame)
  29. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])]), "init")
  30. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"]), func)
  31. new_evalstack = self.mvs.execute("RD", [task_frame, "evalstack"])
  32. self.assertNotEquals(evalstack, new_evalstack)
  33. self.assertEquals(self.mvs.execute("RD", [new_evalstack, "prev"]), evalstack)
  34. self.assertEquals(self.mvs.execute("RD", [evalstack, "inst"]), inst)
  35. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [evalstack, "phase"])]), "call")
  36. def test_call_resolve_params(self):
  37. root = self.root
  38. task_root = self.mvs.execute("CN", [])
  39. task_frame = self.mvs.execute("CN", [])
  40. phase = self.mvs.execute("CNV", ["init"])
  41. inst = self.mvs.execute("CNV", [{"value":"call"}])
  42. evalstack = self.mvs.execute("CN", [])
  43. func = self.mvs.execute("CN", [])
  44. params = self.mvs.execute("CN", [])
  45. self.mvs.execute("CD", [root, "task_1", task_root])
  46. self.mvs.execute("CD", [task_root, "frame", task_frame])
  47. self.mvs.execute("CD", [task_frame, "phase", phase])
  48. self.mvs.execute("CD", [task_frame, "IP", inst])
  49. self.mvs.execute("CD", [task_frame, "symbols", self.mvs.execute("CN", [])])
  50. self.mvs.execute("CD", [inst, "func", func])
  51. self.mvs.execute("CD", [task_frame, "evalstack", evalstack])
  52. self.mvs.execute("CD", [inst, "params", params])
  53. # Do the invocation until it returns None
  54. execute_until_finished(self.mvk, self.mvs)
  55. # Execution of the command finished, so the MvS should be in the correct new state right now
  56. self.assertEquals(self.mvs.execute("RD", [root, "task_1"]), task_root)
  57. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"]), task_frame)
  58. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])]), "init")
  59. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"]), func)
  60. new_evalstack = self.mvs.execute("RD", [task_frame, "evalstack"])
  61. self.assertNotEquals(evalstack, new_evalstack)
  62. self.assertEquals(self.mvs.execute("RD", [new_evalstack, "prev"]), evalstack)
  63. self.assertEquals(self.mvs.execute("RD", [evalstack, "inst"]), inst)
  64. self.assertEquals(self.mvs.execute("RD", [evalstack, "phase"]), params)
  65. def test_call_execute_none(self):
  66. root = self.root
  67. task_root = self.mvs.execute("CN", [])
  68. task_frame = self.mvs.execute("CN", [])
  69. phase = self.mvs.execute("CNV", ["call"])
  70. inst = self.mvs.execute("CNV", [{"value":"call"}])
  71. returnvalue = self.mvs.execute("CN", [])
  72. body = self.mvs.execute("CN", [])
  73. self.mvs.execute("CD", [root, "task_1", task_root])
  74. self.mvs.execute("CD", [task_root, "frame", task_frame])
  75. self.mvs.execute("CD", [task_frame, "phase", phase])
  76. self.mvs.execute("CD", [task_frame, "IP", inst])
  77. self.mvs.execute("CD", [task_frame, "symbols", self.mvs.execute("CN", [])])
  78. self.mvs.execute("CD", [task_frame, "returnvalue", returnvalue])
  79. self.mvs.execute("CD", [returnvalue, "body", body])
  80. # Do the invocation until it returns None
  81. execute_until_finished(self.mvk, self.mvs)
  82. # Execution of the command finished, so the MvS should be in the correct new state right now
  83. self.assertEquals(self.mvs.execute("RD", [root, "task_1"]), task_root)
  84. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])]), "finish")
  85. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"]), inst)
  86. new_frame = self.mvs.execute("RD", [task_root, "frame"])
  87. self.assertNotEquals(new_frame, None)
  88. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"]), new_frame)
  89. new_evalstack = self.mvs.execute("RD", [new_frame, "evalstack"])
  90. self.assertNotEquals(new_evalstack, None)
  91. new_symbols = self.mvs.execute("RD", [new_frame, "symbols"])
  92. self.assertNotEquals(new_symbols, None)
  93. new_returnvalue = self.mvs.execute("RD", [new_frame, "returnvalue"])
  94. self.assertNotEquals(new_returnvalue, None)
  95. new_caller = self.mvs.execute("RD", [new_frame, "caller"])
  96. self.assertNotEquals(new_caller, None)
  97. new_phase = self.mvs.execute("RD", [new_frame, "phase"])
  98. self.assertNotEquals(new_phase, None)
  99. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [new_frame, "phase"])]), "init")
  100. new_IP = self.mvs.execute("RD", [new_frame, "IP"])
  101. self.assertNotEquals(new_IP, None)
  102. self.assertEquals(self.mvs.execute("RD", [new_frame, "IP"]), body)
  103. self.assertEquals(self.mvs.execute("RD", [new_frame, "caller"]), inst)
  104. self.assertEquals(self.mvs.execute("RD", [new_frame, "prev"]), task_frame)
  105. def test_call_execute_params(self):
  106. root = self.root
  107. task_root = self.mvs.execute("CN", [])
  108. task_frame = self.mvs.execute("CN", [])
  109. phase = self.mvs.execute("CNV", ["call"])
  110. inst = self.mvs.execute("CNV", [{"value":"call"}])
  111. returnvalue = self.mvs.execute("CN", [])
  112. body = self.mvs.execute("CN", [])
  113. new_frame = self.mvs.execute("CN", [])
  114. symbols = self.mvs.execute("CN", [])
  115. signature = self.mvs.execute("CN", [])
  116. params = self.mvs.execute("CN", [])
  117. name = self.mvs.execute("CNV", ["param_a"])
  118. last_param = self.mvs.execute("CN", [])
  119. formal_parameter = self.mvs.execute("CN", [])
  120. self.mvs.execute("CD", [root, "task_1", task_root])
  121. self.mvs.execute("CD", [task_root, "frame", task_frame])
  122. self.mvs.execute("CD", [task_frame, "phase", phase])
  123. self.mvs.execute("CD", [task_frame, "IP", inst])
  124. self.mvs.execute("CD", [task_frame, "returnvalue", returnvalue])
  125. self.mvs.execute("CD", [new_frame, "caller", inst])
  126. self.mvs.execute("CD", [new_frame, "prev", task_frame])
  127. self.mvs.execute("CD", [new_frame, "symbols", symbols])
  128. self.mvs.execute("CD", [signature, "body", body])
  129. self.mvs.execute("CD", [signature, "params", params])
  130. self.mvs.execute("CD", [new_frame, "IP", body])
  131. self.mvs.execute("CD", [inst, "last_param", last_param])
  132. self.mvs.execute("CD", [last_param, "name", name])
  133. t1 = self.mvs.execute("CE", [params, formal_parameter])
  134. self.mvs.execute("CE", [t1, name])
  135. # Do the invocation until it returns None
  136. execute_until_finished(self.mvk, self.mvs)
  137. # Execution of the command finished, so the MvS should be in the correct new state right now
  138. self.assertEquals(self.mvs.execute("RD", [root, "task_1"]), task_root)
  139. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"]), new_frame)
  140. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])]), "finish")
  141. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"]), inst)
  142. new_frame = self.mvs.execute("RD", [task_root, "frame"])
  143. self.assertNotEquals(new_frame, None)
  144. self.assertEquals(self.mvs.execute("RD", [new_frame, "IP"]), body)
  145. self.assertEquals(self.mvs.execute("RD", [new_frame, "caller"]), inst)
  146. self.assertEquals(self.mvs.execute("RD", [new_frame, "prev"]), task_frame)
  147. def test_call_param_first_multi(self):
  148. root = self.root
  149. task_root = self.mvs.execute("CN", [])
  150. task_frame = self.mvs.execute("CN", [])
  151. inst = self.mvs.execute("CNV", [{"value":"call"}])
  152. returnvalue = self.mvs.execute("CN", [])
  153. body = self.mvs.execute("CN", [])
  154. new_frame = self.mvs.execute("CN", [])
  155. symbols = self.mvs.execute("CN", [])
  156. signature = self.mvs.execute("CN", [])
  157. params = self.mvs.execute("CN", [])
  158. param_value = self.mvs.execute("CN", [])
  159. next_param = self.mvs.execute("CN", [])
  160. evalstack = self.mvs.execute("CN", [])
  161. self.mvs.execute("CD", [root, "task_1", task_root])
  162. self.mvs.execute("CD", [task_root, "frame", task_frame])
  163. self.mvs.execute("CD", [task_frame, "phase", params])
  164. self.mvs.execute("CD", [task_frame, "IP", inst])
  165. self.mvs.execute("CD", [task_frame, "returnvalue", returnvalue])
  166. self.mvs.execute("CD", [signature, "body", body])
  167. self.mvs.execute("CD", [signature, "params", params])
  168. self.mvs.execute("CD", [inst, "params", params])
  169. self.mvs.execute("CD", [inst, "last_param", self.mvs.execute("CN", [])])
  170. self.mvs.execute("CD", [params, "next_param", next_param])
  171. self.mvs.execute("CD", [params, "value", param_value])
  172. self.mvs.execute("CD", [returnvalue, "body", body])
  173. self.mvs.execute("CD", [task_frame, "evalstack", evalstack])
  174. # Do the invocation until it returns None
  175. execute_until_finished(self.mvk, self.mvs)
  176. # Execution of the command finished, so the MvS should be in the correct new state right now
  177. self.assertEquals(self.mvs.execute("RD", [root, "task_1"]), task_root)
  178. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"]), task_frame)
  179. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])]), "init")
  180. new_frame = self.mvs.execute("RRD", [task_frame, "prev"])
  181. self.assertNotEquals(new_frame, None)
  182. new_frame = new_frame[0]
  183. new_evalstack = self.mvs.execute("RD", [new_frame, "evalstack"])
  184. self.assertNotEquals(new_evalstack, None)
  185. new_symbols = self.mvs.execute("RD", [new_frame, "symbols"])
  186. self.assertNotEquals(new_symbols, None)
  187. new_returnvalue = self.mvs.execute("RD", [new_frame, "returnvalue"])
  188. self.assertNotEquals(new_returnvalue, None)
  189. new_caller = self.mvs.execute("RD", [new_frame, "caller"])
  190. self.assertNotEquals(new_caller, None)
  191. new_phase = self.mvs.execute("RD", [new_frame, "phase"])
  192. self.assertNotEquals(new_phase, None)
  193. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [new_frame, "phase"])]), "init")
  194. new_IP = self.mvs.execute("RD", [new_frame, "IP"])
  195. self.assertNotEquals(new_IP, None)
  196. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"]), param_value)
  197. self.assertEquals(self.mvs.execute("RD", [new_frame, "caller"]), inst)
  198. self.assertEquals(self.mvs.execute("RD", [new_frame, "prev"]), task_frame)
  199. self.assertEquals(self.mvs.execute("RD", [evalstack, "inst"]), inst)
  200. self.assertEquals(self.mvs.execute("RD", [evalstack, "phase"]), next_param)
  201. def test_call_param_first_single(self):
  202. root = self.root
  203. task_root = self.mvs.execute("CN", [])
  204. task_frame = self.mvs.execute("CN", [])
  205. inst = self.mvs.execute("CNV", [{"value":"call"}])
  206. returnvalue = self.mvs.execute("CN", [])
  207. body = self.mvs.execute("CN", [])
  208. new_frame = self.mvs.execute("CN", [])
  209. symbols = self.mvs.execute("CN", [])
  210. signature = self.mvs.execute("CN", [])
  211. params = self.mvs.execute("CN", [])
  212. param_value = self.mvs.execute("CN", [])
  213. evalstack = self.mvs.execute("CN", [])
  214. self.mvs.execute("CD", [root, "task_1", task_root])
  215. self.mvs.execute("CD", [task_root, "frame", task_frame])
  216. self.mvs.execute("CD", [task_frame, "phase", params])
  217. self.mvs.execute("CD", [task_frame, "IP", inst])
  218. self.mvs.execute("CD", [task_frame, "returnvalue", returnvalue])
  219. self.mvs.execute("CD", [signature, "body", body])
  220. self.mvs.execute("CD", [inst, "params", params])
  221. self.mvs.execute("CD", [inst, "last_param", params])
  222. self.mvs.execute("CD", [params, "value", param_value])
  223. self.mvs.execute("CD", [returnvalue, "body", body])
  224. self.mvs.execute("CD", [task_frame, "evalstack", evalstack])
  225. # Do the invocation until it returns None
  226. execute_until_finished(self.mvk, self.mvs)
  227. # Execution of the command finished, so the MvS should be in the correct new state right now
  228. self.assertEquals(self.mvs.execute("RD", [root, "task_1"]), task_root)
  229. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"]), task_frame)
  230. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])]), "init")
  231. new_frame = self.mvs.execute("RRD", [task_frame, "prev"])
  232. self.assertNotEquals(new_frame, None)
  233. new_frame = new_frame[0]
  234. new_evalstack = self.mvs.execute("RD", [new_frame, "evalstack"])
  235. self.assertNotEquals(new_evalstack, None)
  236. new_symbols = self.mvs.execute("RD", [new_frame, "symbols"])
  237. self.assertNotEquals(new_symbols, None)
  238. new_returnvalue = self.mvs.execute("RD", [new_frame, "returnvalue"])
  239. self.assertNotEquals(new_returnvalue, None)
  240. new_caller = self.mvs.execute("RD", [new_frame, "caller"])
  241. self.assertNotEquals(new_caller, None)
  242. new_phase = self.mvs.execute("RD", [new_frame, "phase"])
  243. self.assertNotEquals(new_phase, None)
  244. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [new_frame, "phase"])]), "init")
  245. new_IP = self.mvs.execute("RD", [new_frame, "IP"])
  246. self.assertNotEquals(new_IP, None)
  247. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"]), param_value)
  248. self.assertEquals(self.mvs.execute("RD", [new_frame, "caller"]), inst)
  249. self.assertEquals(self.mvs.execute("RD", [new_frame, "prev"]), task_frame)
  250. self.assertEquals(self.mvs.execute("RD", [evalstack, "inst"]), inst)
  251. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [evalstack, "phase"])]), "call")
  252. new_evalstack = self.mvs.execute("RD", [task_frame, "evalstack"])
  253. self.assertNotEquals(evalstack, new_evalstack)
  254. self.assertEquals(self.mvs.execute("RD", [new_evalstack, "prev"]), evalstack)
  255. self.assertEquals(self.mvs.execute("RD", [evalstack, "inst"]), inst)
  256. def test_params_last(self):
  257. root = self.root
  258. task_root = self.mvs.execute("CN", [])
  259. task_frame = self.mvs.execute("CN", [])
  260. inst = self.mvs.execute("CNV", [{"value":"call"}])
  261. returnvalue = self.mvs.execute("CN", [])
  262. body = self.mvs.execute("CN", [])
  263. new_frame = self.mvs.execute("CN", [])
  264. symbols = self.mvs.execute("CN", [])
  265. signature = self.mvs.execute("CN", [])
  266. params = self.mvs.execute("CN", [])
  267. param_value = self.mvs.execute("CN", [])
  268. evalstack = self.mvs.execute("CN", [])
  269. last_param = self.mvs.execute("CN", [])
  270. prev_param = self.mvs.execute("CN", [])
  271. formal_parameter = self.mvs.execute("CN", [])
  272. formal_parameter_name = self.mvs.execute("CNV", ["param_a"])
  273. self.mvs.execute("CD", [root, "task_1", task_root])
  274. self.mvs.execute("CD", [task_root, "frame", task_frame])
  275. self.mvs.execute("CD", [task_frame, "phase", last_param])
  276. self.mvs.execute("CD", [task_frame, "IP", inst])
  277. self.mvs.execute("CD", [task_frame, "returnvalue", returnvalue])
  278. self.mvs.execute("CD", [inst, "last_param", last_param])
  279. self.mvs.execute("CD", [inst, "params", prev_param])
  280. self.mvs.execute("CD", [params, "value", param_value])
  281. self.mvs.execute("CD", [task_frame, "evalstack", evalstack])
  282. self.mvs.execute("CD", [new_frame, "caller", inst])
  283. self.mvs.execute("CD", [new_frame, "prev", task_frame])
  284. self.mvs.execute("CD", [new_frame, "symbols", symbols])
  285. self.mvs.execute("CD", [new_frame, "IP", body])
  286. self.mvs.execute("CD", [signature, "body", body])
  287. self.mvs.execute("CD", [signature, "params", params])
  288. self.mvs.execute("CD", [prev_param, "next_param", last_param])
  289. self.mvs.execute("CD", [prev_param, "name", formal_parameter_name])
  290. self.mvs.execute("CD", [last_param, "value", param_value])
  291. t1 = self.mvs.execute("CE", [params, formal_parameter])
  292. self.mvs.execute("CE", [t1, formal_parameter_name])
  293. # Do the invocation until it returns None
  294. execute_until_finished(self.mvk, self.mvs)
  295. # Execution of the command finished, so the MvS should be in the correct new state right now
  296. self.assertEquals(self.mvs.execute("RD", [root, "task_1"]), task_root)
  297. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"]), task_frame)
  298. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])]), "init")
  299. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"]), param_value)
  300. var = self.mvs.execute("RDN", [symbols, formal_parameter])
  301. self.assertNotEquals(var, None)
  302. self.assertEquals(self.mvs.execute("RD", [var, "value"]), returnvalue)
  303. new_evalstack = self.mvs.execute("RD", [task_frame, "evalstack"])
  304. self.assertNotEquals(evalstack, new_evalstack)
  305. self.assertEquals(self.mvs.execute("RD", [new_evalstack, "prev"]), evalstack)
  306. self.assertEquals(self.mvs.execute("RD", [evalstack, "inst"]), inst)
  307. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [evalstack, "phase"])]), "call")
  308. def test_params_next(self):
  309. root = self.root
  310. task_root = self.mvs.execute("CN", [])
  311. task_frame = self.mvs.execute("CN", [])
  312. inst = self.mvs.execute("CNV", [{"value":"call"}])
  313. returnvalue = self.mvs.execute("CN", [])
  314. body = self.mvs.execute("CN", [])
  315. new_frame = self.mvs.execute("CN", [])
  316. symbols = self.mvs.execute("CN", [])
  317. signature = self.mvs.execute("CN", [])
  318. params = self.mvs.execute("CN", [])
  319. param_value = self.mvs.execute("CN", [])
  320. evalstack = self.mvs.execute("CN", [])
  321. formal_parameter = self.mvs.execute("CN", [])
  322. formal_parameter_name = self.mvs.execute("CNV", ["param_a"])
  323. param_a = self.mvs.execute("CN", [])
  324. param_b = self.mvs.execute("CN", [])
  325. param_c = self.mvs.execute("CN", [])
  326. self.mvs.execute("CD", [root, "task_1", task_root])
  327. self.mvs.execute("CD", [task_root, "frame", task_frame])
  328. self.mvs.execute("CD", [task_frame, "phase", param_b])
  329. self.mvs.execute("CD", [task_frame, "IP", inst])
  330. self.mvs.execute("CD", [inst, "params", self.mvs.execute("CN", [])])
  331. self.mvs.execute("CD", [inst, "last_param", self.mvs.execute("CN", [])])
  332. self.mvs.execute("CD", [task_frame, "returnvalue", returnvalue])
  333. self.mvs.execute("CD", [params, "value", param_value])
  334. self.mvs.execute("CD", [task_frame, "evalstack", evalstack])
  335. self.mvs.execute("CD", [new_frame, "caller", inst])
  336. self.mvs.execute("CD", [new_frame, "prev", task_frame])
  337. self.mvs.execute("CD", [new_frame, "symbols", symbols])
  338. self.mvs.execute("CD", [new_frame, "IP", body])
  339. self.mvs.execute("CD", [signature, "body", body])
  340. self.mvs.execute("CD", [signature, "params", params])
  341. self.mvs.execute("CD", [param_a, "name", formal_parameter_name])
  342. self.mvs.execute("CD", [param_b, "value", param_value])
  343. self.mvs.execute("CD", [param_a, "next_param", param_b])
  344. self.mvs.execute("CD", [param_b, "next_param", param_c])
  345. t1 = self.mvs.execute("CE", [params, formal_parameter])
  346. self.mvs.execute("CE", [t1, formal_parameter_name])
  347. # Do the invocation until it returns None
  348. execute_until_finished(self.mvk, self.mvs)
  349. # Execution of the command finished, so the MvS should be in the correct new state right now
  350. self.assertEquals(self.mvs.execute("RD", [root, "task_1"]), task_root)
  351. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"]), task_frame)
  352. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])]), "init")
  353. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"]), param_value)
  354. new_evalstack = self.mvs.execute("RD", [task_frame, "evalstack"])
  355. self.assertNotEquals(evalstack, new_evalstack)
  356. self.assertEquals(self.mvs.execute("RD", [new_evalstack, "prev"]), evalstack)
  357. self.assertEquals(self.mvs.execute("RD", [evalstack, "inst"]), inst)
  358. self.assertEquals(self.mvs.execute("RD", [evalstack, "phase"]), param_c)
  359. var = self.mvs.execute("RDN", [symbols, formal_parameter])
  360. self.assertNotEquals(var, None)
  361. self.assertEquals(self.mvs.execute("RD", [var, "value"]), returnvalue)