Browse Source

Fixed some tests for new break/continue

Yentl Van Tendeloo 8 years ago
parent
commit
0308328975

+ 4 - 5
kernel/test/instructions/test_instruction_break.py

@@ -28,18 +28,15 @@ class TestBreak(unittest.TestCase):
             while True:
                 a
                 break
-                b
             c
         """
         self.inst = self.mvs.execute("CNV", [{"value":"while"}])[0]
 
         self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])[0]
-        self.const_b = self.mvs.execute("CNV", [{"value":"constant"}])[0]
         self.const_c = self.mvs.execute("CNV", [{"value":"constant"}])[0]
         self.const_cond = self.mvs.execute("CNV", [{"value":"constant"}])[0]
 
         self.value_a = self.mvs.execute("CNV", ["a"])[0]
-        self.value_b = self.mvs.execute("CNV", ["b"])[0]
         self.value_c = self.mvs.execute("CNV", ["c"])[0]
         self.value_cond = self.mvs.execute("CNV", [True])[0]
         self.break_inst = self.mvs.execute("CNV", [{"value":"break"}])[0]
@@ -50,9 +47,7 @@ class TestBreak(unittest.TestCase):
         self.mvs.execute("CD", [self.inst, "next", self.const_c])
         self.mvs.execute("CD", [self.const_a, "node", self.value_a])
         self.mvs.execute("CD", [self.const_a, "next", self.break_inst])
-        self.mvs.execute("CD", [self.break_inst, "next", self.const_b])
         self.mvs.execute("CD", [self.break_inst, "while", self.inst])
-        self.mvs.execute("CD", [self.const_b, "node", self.value_b])
         self.mvs.execute("CD", [self.const_c, "node", self.value_c])
         self.mvs.execute("CD", [self.const_cond, "node", self.value_cond])
 
@@ -87,6 +82,10 @@ class TestBreak(unittest.TestCase):
         self.assertEquals(get_phase(self.root, self.mvs), "init")
         execute_until_finished(self.mvk, self.mvs)
 
+        self.assertEquals(get_inst(self.root, self.mvs), "break")
+        self.assertEquals(get_phase(self.root, self.mvs), "finish")
+        execute_until_finished(self.mvk, self.mvs)
+
         self.assertEquals(get_inst(self.root, self.mvs), "while")
         self.assertEquals(get_phase(self.root, self.mvs), "finish")
         execute_until_finished(self.mvk, self.mvs)

+ 12 - 5
kernel/test/instructions/test_instruction_continue.py

@@ -28,18 +28,15 @@ class Testcontinue(unittest.TestCase):
             while True:
                 a
                 continue
-                b
             c
         """
         self.inst = self.mvs.execute("CNV", [{"value":"while"}])[0]
 
         self.const_a = self.mvs.execute("CNV", [{"value":"constant"}])[0]
-        self.const_b = self.mvs.execute("CNV", [{"value":"constant"}])[0]
         self.const_c = self.mvs.execute("CNV", [{"value":"constant"}])[0]
         self.const_cond = self.mvs.execute("CNV", [{"value":"constant"}])[0]
 
         self.value_a = self.mvs.execute("CNV", ["a"])[0]
-        self.value_b = self.mvs.execute("CNV", ["b"])[0]
         self.value_c = self.mvs.execute("CNV", ["c"])[0]
         self.value_cond = self.mvs.execute("CNV", [True])[0]
         self.continue_inst = self.mvs.execute("CNV", [{"value":"continue"}])[0]
@@ -50,9 +47,7 @@ class Testcontinue(unittest.TestCase):
         self.mvs.execute("CD", [self.inst, "next", self.const_c])
         self.mvs.execute("CD", [self.const_a, "node", self.value_a])
         self.mvs.execute("CD", [self.const_a, "next", self.continue_inst])
-        self.mvs.execute("CD", [self.continue_inst, "next", self.const_b])
         self.mvs.execute("CD", [self.continue_inst, "while", self.inst])
-        self.mvs.execute("CD", [self.const_b, "node", self.value_b])
         self.mvs.execute("CD", [self.const_c, "node", self.value_c])
         self.mvs.execute("CD", [self.const_cond, "node", self.value_cond])
 
@@ -87,6 +82,10 @@ class Testcontinue(unittest.TestCase):
         self.assertEquals(get_phase(self.root, self.mvs), "init")
         execute_until_finished(self.mvk, self.mvs)
 
+        self.assertEquals(get_inst(self.root, self.mvs), "continue")
+        self.assertEquals(get_phase(self.root, self.mvs), "finish")
+        execute_until_finished(self.mvk, self.mvs)
+
         # Loop 2
         self.assertEquals(get_inst(self.root, self.mvs), "while")
         self.assertEquals(get_phase(self.root, self.mvs), "init")
@@ -118,6 +117,10 @@ class Testcontinue(unittest.TestCase):
         self.assertEquals(get_phase(self.root, self.mvs), "init")
         execute_until_finished(self.mvk, self.mvs)
 
+        self.assertEquals(get_inst(self.root, self.mvs), "continue")
+        self.assertEquals(get_phase(self.root, self.mvs), "finish")
+        execute_until_finished(self.mvk, self.mvs)
+
         # Loop 3
         self.assertEquals(get_inst(self.root, self.mvs), "while")
         self.assertEquals(get_phase(self.root, self.mvs), "init")
@@ -149,3 +152,7 @@ class Testcontinue(unittest.TestCase):
         self.assertEquals(get_phase(self.root, self.mvs), "init")
         execute_until_finished(self.mvk, self.mvs)
 
+        self.assertEquals(get_inst(self.root, self.mvs), "continue")
+        self.assertEquals(get_phase(self.root, self.mvs), "finish")
+        execute_until_finished(self.mvk, self.mvs)
+

+ 9 - 1
kernel/test/rules/test_rules_break.py

@@ -16,7 +16,14 @@ class Testbreak(unittest.TestCase):
         phase = self.mvs.execute("CNV", ["init"])[0]
         inst = self.mvs.execute("CNV", [{"value":"break"}])[0]
         while_inst = self.mvs.execute("CNV", ["while"])[0]
+        evalstack_top = self.mvs.execute("CN", [])[0]
+        evalstack_bottom = self.mvs.execute("CN", [])[0]
+        finish_phase = self.mvs.execute("CNV", ["finish"])[0]
 
+        self.mvs.execute("CD", [user_frame, "evalstack", evalstack_top])
+        self.mvs.execute("CD", [evalstack_top, "prev", evalstack_bottom])
+        self.mvs.execute("CD", [evalstack_bottom, "inst", while_inst])
+        self.mvs.execute("CD", [evalstack_bottom, "phase", finish_phase])
         self.mvs.execute("CD", [root, "user_1", user_root])
         self.mvs.execute("CD", [user_root, "frame", user_frame])
         self.mvs.execute("CD", [user_frame, "phase", phase])
@@ -30,5 +37,6 @@ class Testbreak(unittest.TestCase):
         self.assertEquals(self.mvs.execute("RD", [root, "user_1"])[0], user_root)
         self.assertEquals(self.mvs.execute("RD", [user_root, "frame"])[0], user_frame)
         self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [user_frame, "phase"])[0]])[0], "finish")
-        self.assertEquals(self.mvs.execute("RD", [user_frame, "IP"])[0], while_inst)
+        self.assertEquals(self.mvs.execute("RD", [user_frame, "IP"])[0], inst)
         self.assertEquals(self.mvs.execute("RD", [inst, "while"])[0], while_inst)
+        self.assertNotEquals(self.mvs.execute("RD", [user_frame, "evalstack"])[0], evalstack_top)

+ 12 - 4
kernel/test/rules/test_rules_continue.py

@@ -9,14 +9,21 @@ class Testcontinue(unittest.TestCase):
         self.mvk = ModelverseKernel(self.root)
 
     def test_basic(self):
-        # Create a break construct
+        # Create a continue construct
         root = self.root
         user_root = self.mvs.execute("CN", [])[0]
         user_frame = self.mvs.execute("CN", [])[0]
         phase = self.mvs.execute("CNV", ["init"])[0]
         inst = self.mvs.execute("CNV", [{"value":"continue"}])[0]
         while_inst = self.mvs.execute("CNV", ["while"])[0]
+        evalstack_top = self.mvs.execute("CN", [])[0]
+        evalstack_bottom = self.mvs.execute("CN", [])[0]
+        init_phase = self.mvs.execute("CNV", ["finish"])[0]
 
+        self.mvs.execute("CD", [user_frame, "evalstack", evalstack_top])
+        self.mvs.execute("CD", [evalstack_top, "prev", evalstack_bottom])
+        self.mvs.execute("CD", [evalstack_bottom, "inst", while_inst])
+        self.mvs.execute("CD", [evalstack_bottom, "phase", init_phase])
         self.mvs.execute("CD", [root, "user_1", user_root])
         self.mvs.execute("CD", [user_root, "frame", user_frame])
         self.mvs.execute("CD", [user_frame, "phase", phase])
@@ -26,9 +33,10 @@ class Testcontinue(unittest.TestCase):
         # Do the invocation until it returns None
         execute_until_finished(self.mvk, self.mvs)
 
-        # Execution of the command finished, so the MvS should be in the correct new state right now
+        # Execution of the command inited, so the MvS should be in the correct new state right now
         self.assertEquals(self.mvs.execute("RD", [root, "user_1"])[0], user_root)
         self.assertEquals(self.mvs.execute("RD", [user_root, "frame"])[0], user_frame)
-        self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [user_frame, "phase"])[0]])[0], "init")
-        self.assertEquals(self.mvs.execute("RD", [user_frame, "IP"])[0], while_inst)
+        self.assertEquals(self.mvs.execute("RV", [self.mvs.execute("RD", [user_frame, "phase"])[0]])[0], "finish")
+        self.assertEquals(self.mvs.execute("RD", [user_frame, "IP"])[0], inst)
         self.assertEquals(self.mvs.execute("RD", [inst, "while"])[0], while_inst)
+        self.assertNotEquals(self.mvs.execute("RD", [user_frame, "evalstack"])[0], evalstack_top)

+ 1 - 0
scripts/run_local_modelverse.py

@@ -8,3 +8,4 @@ if len(sys.argv) < 2:
 else:
     subprocess.check_call([sys.executable, "-m", "sccd.compiler.sccdc", "-p", "threads", "server.xml"], cwd="hybrid_server")
     subprocess.call([sys.executable, "run_mvk_server.py"] + sys.argv[1:] + ["--kernel=baseline-jit"], cwd="hybrid_server")
+    #subprocess.call([sys.executable, "run_mvk_server.py"] + sys.argv[1:] + ["--kernel=legacy-interpreter"], cwd="hybrid_server")