(self)
| 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 | |
| 117 | class SpecializationStatsTests(unittest.TestCase): |
nothing calls this directly
no test coverage detected