test_rules_resolve.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import unittest
  2. from modelverse_kernel.main import ModelverseKernel
  3. from utils import execute_until_finished, MvSWrapper
  4. class Testresolve(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. def test_resolve_init_local(self):
  10. root = self.root
  11. task_root = self.mvs.execute("CN", [])[0]
  12. task_frame = self.mvs.execute("CN", [])[0]
  13. phase = self.mvs.execute("CNV", ["init"])[0]
  14. inst = self.mvs.execute("CNV", [{"value":"resolve"}])[0]
  15. var_inst = self.mvs.execute("CN", [])[0]
  16. symbols = self.mvs.execute("CN", [])[0]
  17. returnvalue = self.mvs.execute("CN", [])[0]
  18. entry = self.mvs.execute("CN", [])[0]
  19. self.mvs.execute("CD", [root, "task_1", task_root])
  20. self.mvs.execute("CD", [task_root, "frame", task_frame])
  21. self.mvs.execute("CD", [task_frame, "phase", phase])
  22. self.mvs.execute("CD", [task_frame, "IP", inst])
  23. self.mvs.execute("CD", [inst, "var", var_inst])
  24. self.mvs.execute("CD", [task_frame, "symbols", symbols])
  25. self.mvs.execute("CD", [task_frame, "returnvalue", self.mvs.execute("CN", [])[0]])
  26. self.mvs.execute("CD", [task_frame, "evalstack", self.mvs.execute("CN", [])[0]])
  27. t1 = self.mvs.execute("CE", [symbols, entry])[0]
  28. self.mvs.execute("CE", [t1, var_inst])[0]
  29. # Do the invocation until it returns None
  30. execute_until_finished(self.mvk, self.mvs)
  31. # Execution of the command finished, so the MvS should be in the correct new state right now
  32. self.assertEquals(self.mvs.execute("RD", [root, "task_1"])[0], task_root)
  33. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"])[0], task_frame)
  34. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])[0]])[0], "finish")
  35. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"])[0], inst)
  36. self.assertEquals(self.mvs.execute("RD", [task_frame, "returnvalue"])[0], entry)
  37. def test_resolve_init_global(self):
  38. root = self.root
  39. task_root = self.mvs.execute("CN", [])[0]
  40. task_frame = self.mvs.execute("CN", [])[0]
  41. _globals = self.mvs.execute("CN", [])[0]
  42. self.mvs.execute("CD", [task_root, "globals", _globals])
  43. global_task = self.mvs.execute("RD", [task_root, "globals"])[0]
  44. phase = self.mvs.execute("CNV", ["init"])[0]
  45. inst = self.mvs.execute("CNV", [{"value":"resolve"}])[0]
  46. var_inst = self.mvs.execute("CNV", ["var"])[0]
  47. symbols = self.mvs.execute("CN", [])[0]
  48. returnvalue = self.mvs.execute("CN", [])[0]
  49. entry = self.mvs.execute("CN", [])[0]
  50. self.mvs.execute("CD", [root, "task_1", task_root])
  51. self.mvs.execute("CD", [task_root, "frame", task_frame])
  52. self.mvs.execute("CD", [task_frame, "phase", phase])
  53. self.mvs.execute("CD", [task_frame, "IP", inst])
  54. self.mvs.execute("CD", [inst, "var", var_inst])
  55. self.mvs.execute("CD", [task_frame, "symbols", symbols])
  56. self.mvs.execute("CD", [task_frame, "returnvalue", self.mvs.execute("CN", [])[0]])
  57. self.mvs.execute("CD", [task_frame, "evalstack", self.mvs.execute("CN", [])[0]])
  58. t1 = self.mvs.execute("CE", [global_task, entry])[0]
  59. self.mvs.execute("CE", [t1, var_inst])[0]
  60. # Do the invocation until it returns None
  61. execute_until_finished(self.mvk, self.mvs)
  62. # Execution of the command finished, so the MvS should be in the correct new state right now
  63. self.assertEquals(self.mvs.execute("RD", [root, "task_1"])[0], task_root)
  64. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"])[0], task_frame)
  65. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])[0]])[0], "finish")
  66. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"])[0], inst)
  67. self.assertEquals(self.mvs.execute("RD", [task_frame, "returnvalue"])[0], entry)
  68. def test_resolve_init_local_over_global(self):
  69. root = self.root
  70. task_root = self.mvs.execute("CN", [])[0]
  71. task_frame = self.mvs.execute("CN", [])[0]
  72. global_task = self.mvs.execute("RD", [task_root, "globals"])[0]
  73. phase = self.mvs.execute("CNV", ["init"])[0]
  74. inst = self.mvs.execute("CNV", [{"value":"resolve"}])[0]
  75. var_inst = self.mvs.execute("CNV", ["var"])[0]
  76. symbols = self.mvs.execute("CN", [])[0]
  77. returnvalue = self.mvs.execute("CN", [])[0]
  78. local_entry = self.mvs.execute("CN", [])[0]
  79. global_entry = self.mvs.execute("CN", [])[0]
  80. self.mvs.execute("CD", [root, "task_1", task_root])
  81. self.mvs.execute("CD", [task_root, "frame", task_frame])
  82. self.mvs.execute("CD", [task_frame, "phase", phase])
  83. self.mvs.execute("CD", [task_frame, "IP", inst])
  84. self.mvs.execute("CD", [inst, "var", var_inst])
  85. self.mvs.execute("CD", [task_frame, "symbols", symbols])
  86. self.mvs.execute("CD", [task_frame, "returnvalue", self.mvs.execute("CN", [])[0]])
  87. self.mvs.execute("CD", [task_frame, "evalstack", self.mvs.execute("CN", [])[0]])
  88. t1 = self.mvs.execute("CE", [global_task, global_entry])[0]
  89. self.mvs.execute("CE", [t1, var_inst])[0]
  90. t2 = self.mvs.execute("CE", [symbols, local_entry])[0]
  91. self.mvs.execute("CE", [t2, var_inst])[0]
  92. # Do the invocation until it returns None
  93. execute_until_finished(self.mvk, self.mvs)
  94. # Execution of the command finished, so the MvS should be in the correct new state right now
  95. self.assertEquals(self.mvs.execute("RD", [root, "task_1"])[0], task_root)
  96. self.assertEquals(self.mvs.execute("RD", [task_root, "frame"])[0], task_frame)
  97. self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [task_frame, "phase"])[0]])[0], "finish")
  98. self.assertEquals(self.mvs.execute("RD", [task_frame, "IP"])[0], inst)
  99. self.assertEquals(self.mvs.execute("RD", [task_frame, "returnvalue"])[0], local_entry)