|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
| 3 | +import pprint |
3 | 4 | import unittest |
4 | 5 |
|
5 | | -from mypyc.codegen.emit import Emitter, EmitterContext |
| 6 | +from mypyc.codegen.emit import Emitter, EmitterContext, pformat_deterministic |
6 | 7 | from mypyc.common import HAVE_IMMORTAL |
7 | 8 | from mypyc.ir.class_ir import ClassIR |
8 | 9 | from mypyc.ir.ops import BasicBlock, Register, Value |
|
21 | 22 | from mypyc.namegen import NameGenerator |
22 | 23 |
|
23 | 24 |
|
| 25 | +class TestPformatDeterministic(unittest.TestCase): |
| 26 | + def test_frozenset_elements_sorted(self) -> None: |
| 27 | + fs_small = frozenset({("a", 1)}) |
| 28 | + fs_large = frozenset({("a", 1), ("b", 2)}) |
| 29 | + literal_a = frozenset({fs_large, fs_small}) |
| 30 | + literal_b = frozenset({fs_small, fs_large}) |
| 31 | + expected = "frozenset({frozenset({('a', 1)}), frozenset({('a', 1), ('b', 2)})})" |
| 32 | + |
| 33 | + assert pformat_deterministic(literal_a, 80) == expected |
| 34 | + assert pformat_deterministic(literal_b, 80) == expected |
| 35 | + |
| 36 | + def test_nested_supported_literals(self) -> None: |
| 37 | + nested_frozen = frozenset({("m", 0), ("n", 1)}) |
| 38 | + item_a = ("outer", 1, nested_frozen) |
| 39 | + item_b = ("outer", 2, frozenset({("x", 3)})) |
| 40 | + literal_a = frozenset({item_a, item_b}) |
| 41 | + literal_b = frozenset({item_b, item_a}) |
| 42 | + expected = ( |
| 43 | + "frozenset({('outer', 1, frozenset({('m', 0), ('n', 1)})), " |
| 44 | + "('outer', 2, frozenset({('x', 3)}))})" |
| 45 | + ) |
| 46 | + |
| 47 | + assert pformat_deterministic(literal_a, 120) == expected |
| 48 | + assert pformat_deterministic(literal_b, 120) == expected |
| 49 | + |
| 50 | + def test_restores_default_safe_key(self) -> None: |
| 51 | + original_safe_key = pprint._safe_key |
| 52 | + pformat_deterministic({"key": "value"}, 80) |
| 53 | + assert pprint._safe_key is original_safe_key |
| 54 | + |
| 55 | + |
24 | 56 | class TestEmitter(unittest.TestCase): |
25 | 57 | def setUp(self) -> None: |
26 | 58 | self.n = Register(int_rprimitive, "n") |
|
0 commit comments