MCPcopy Index your code
hub / github.com/RustPython/RustPython / test_stack_effect_jump

Method test_stack_effect_jump

Lib/test/test__opcode.py:85–114  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

83 self.assertRaises(ValueError, stack_effect, code, 0)
84
85 def test_stack_effect_jump(self):
86 FOR_ITER = dis.opmap['FOR_ITER']
87 self.assertEqual(stack_effect(FOR_ITER, 0), 1)
88 self.assertEqual(stack_effect(FOR_ITER, 0, jump=True), 1)
89 self.assertEqual(stack_effect(FOR_ITER, 0, jump=False), 1)
90 JUMP_FORWARD = dis.opmap['JUMP_FORWARD']
91 self.assertEqual(stack_effect(JUMP_FORWARD, 0), 0)
92 self.assertEqual(stack_effect(JUMP_FORWARD, 0, jump=True), 0)
93 self.assertEqual(stack_effect(JUMP_FORWARD, 0, jump=False), 0)
94 # All defined opcodes
95 has_arg = dis.hasarg
96 has_exc = dis.hasexc
97 has_jump = dis.hasjabs + dis.hasjrel
98 for name, code in filter(lambda item: item[0] not in dis.deoptmap, dis.opmap.items()):
99 if code >= opcode.MIN_INSTRUMENTED_OPCODE:
100 continue
101 with self.subTest(opname=name):
102 if code not in has_arg:
103 common = stack_effect(code)
104 jump = stack_effect(code, jump=True)
105 nojump = stack_effect(code, jump=False)
106 else:
107 common = stack_effect(code, 0)
108 jump = stack_effect(code, 0, jump=True)
109 nojump = stack_effect(code, 0, jump=False)
110 if code in has_jump or code in has_exc:
111 self.assertEqual(common, max(jump, nojump))
112 else:
113 self.assertEqual(jump, common)
114 self.assertEqual(nojump, common)
115
116
117class SpecializationStatsTests(unittest.TestCase):

Callers

nothing calls this directly

Calls 6

stack_effectFunction · 0.90
filterFunction · 0.85
maxFunction · 0.85
subTestMethod · 0.80
assertEqualMethod · 0.45
itemsMethod · 0.45

Tested by

no test coverage detected