test_instruction_return.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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
  4. class Testreturn(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_return(self):
  22. """
  23. Test the code:
  24. return True
  25. """
  26. prev_task_frame = self.mvs.execute("CN", [])
  27. prev_symbols = self.mvs.execute("CN", [])
  28. prev_evalstack = self.mvs.execute("CN", [])
  29. prev_returnvalue = self.mvs.execute("CN", [])
  30. prev_phase = self.mvs.execute("CNV", ["init"])
  31. prev_IP = self.mvs.execute("CNV", [{"value":"constant"}])
  32. self.mvs.execute("CD", [self.task_frame, "prev", prev_task_frame])
  33. self.mvs.execute("CD", [prev_task_frame, "symbols", prev_symbols])
  34. self.mvs.execute("CD", [prev_task_frame, "evalstack", prev_evalstack])
  35. self.mvs.execute("CD", [prev_task_frame, "phase", prev_phase])
  36. self.mvs.execute("CD", [prev_task_frame, "IP", prev_IP])
  37. self.mvs.execute("CD", [prev_task_frame, "returnvalue", prev_returnvalue])
  38. self.inst = self.mvs.execute("CNV", [{"value":"return"}])
  39. self.const_true = self.mvs.execute("CNV", [{"value":"constant"}])
  40. self.value_true = self.mvs.execute("CNV", [True])
  41. self.mvs.execute("CD", [self.task_frame, "IP", self.inst])
  42. self.mvs.execute("CD", [self.inst, "value", self.const_true])
  43. self.mvs.execute("CD", [self.const_true, "node", self.value_true])
  44. ### Execute rules
  45. self.assertEquals(get_inst(self.root, self.mvs), "return")
  46. self.assertEquals(get_phase(self.root, self.mvs), "init")
  47. execute_until_finished(self.mvk, self.mvs)
  48. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  49. self.assertEquals(get_phase(self.root, self.mvs), "init")
  50. execute_until_finished(self.mvk, self.mvs)
  51. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  52. self.assertEquals(get_phase(self.root, self.mvs), "finish")
  53. self.assertEquals(get_returnvalue(self.root, self.mvs), True)
  54. execute_until_finished(self.mvk, self.mvs)
  55. self.assertEquals(get_inst(self.root, self.mvs), "return")
  56. self.assertEquals(get_phase(self.root, self.mvs), "eval")
  57. execute_until_finished(self.mvk, self.mvs)
  58. self.assertEquals(get_inst(self.root, self.mvs), "constant")
  59. self.assertEquals(get_phase(self.root, self.mvs), "init")
  60. self.assertEquals(get_returnvalue(self.root, self.mvs), True)
  61. t = self.mvs.execute("RD", [self.root, "task_1"])
  62. t = self.mvs.execute("RD", [t, "frame"])
  63. self.assertEquals(t, prev_task_frame)