Skip to content

Commit 032f480

Browse files
authored
Thoroughly refactor the cases generator (#107151)
This mostly extracts a whole bunch of stuff out of generate_cases.py into separate files, but there are a few other things going on here. - analysis.py: `Analyzer` etc. - instructions.py: `Instruction` etc. - flags.py: `InstructionFlags`, `variable_used`, `variable_used_unspecialized` - formatting.py: `Formatter` etc. - Rename parser.py to parsing.py, to avoid conflict with stdlib parser.py - Blackify most things - Fix most mypy errors - Remove output filenames from Generator state, add them to `write_instructions()` etc. - Fix unit tests
1 parent ff5f94b commit 032f480

File tree

7 files changed

+1304
-1169
lines changed

7 files changed

+1304
-1169
lines changed

Lib/test/test_generated_cases.py

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77
test_tools.skip_if_missing('cases_generator')
88
with test_tools.imports_under_tool('cases_generator'):
9+
import analysis
10+
import formatting
911
import generate_cases
10-
from parser import StackEffect
12+
from parsing import StackEffect
1113

1214

1315
class TestEffects(unittest.TestCase):
@@ -27,37 +29,37 @@ def test_effect_sizes(self):
2729
StackEffect("q", "", "", ""),
2830
StackEffect("r", "", "", ""),
2931
]
30-
self.assertEqual(generate_cases.effect_size(x), (1, ""))
31-
self.assertEqual(generate_cases.effect_size(y), (0, "oparg"))
32-
self.assertEqual(generate_cases.effect_size(z), (0, "oparg*2"))
32+
self.assertEqual(formatting.effect_size(x), (1, ""))
33+
self.assertEqual(formatting.effect_size(y), (0, "oparg"))
34+
self.assertEqual(formatting.effect_size(z), (0, "oparg*2"))
3335

3436
self.assertEqual(
35-
generate_cases.list_effect_size(input_effects),
37+
formatting.list_effect_size(input_effects),
3638
(1, "oparg + oparg*2"),
3739
)
3840
self.assertEqual(
39-
generate_cases.list_effect_size(output_effects),
41+
formatting.list_effect_size(output_effects),
4042
(2, "oparg*4"),
4143
)
4244
self.assertEqual(
43-
generate_cases.list_effect_size(other_effects),
45+
formatting.list_effect_size(other_effects),
4446
(2, "(oparg<<1)"),
4547
)
4648

4749
self.assertEqual(
48-
generate_cases.string_effect_size(
49-
generate_cases.list_effect_size(input_effects),
50+
formatting.string_effect_size(
51+
formatting.list_effect_size(input_effects),
5052
), "1 + oparg + oparg*2",
5153
)
5254
self.assertEqual(
53-
generate_cases.string_effect_size(
54-
generate_cases.list_effect_size(output_effects),
55+
formatting.string_effect_size(
56+
formatting.list_effect_size(output_effects),
5557
),
5658
"2 + oparg*4",
5759
)
5860
self.assertEqual(
59-
generate_cases.string_effect_size(
60-
generate_cases.list_effect_size(other_effects),
61+
formatting.string_effect_size(
62+
formatting.list_effect_size(other_effects),
6163
),
6264
"2 + (oparg<<1)",
6365
)
@@ -90,23 +92,17 @@ def tearDown(self) -> None:
9092

9193
def run_cases_test(self, input: str, expected: str):
9294
with open(self.temp_input_filename, "w+") as temp_input:
93-
temp_input.write(generate_cases.BEGIN_MARKER)
95+
temp_input.write(analysis.BEGIN_MARKER)
9496
temp_input.write(input)
95-
temp_input.write(generate_cases.END_MARKER)
97+
temp_input.write(analysis.END_MARKER)
9698
temp_input.flush()
9799

98-
a = generate_cases.Analyzer(
99-
[self.temp_input_filename],
100-
self.temp_output_filename,
101-
self.temp_metadata_filename,
102-
self.temp_pymetadata_filename,
103-
self.temp_executor_filename,
104-
)
100+
a = generate_cases.Generator([self.temp_input_filename])
105101
a.parse()
106102
a.analyze()
107103
if a.errors:
108104
raise RuntimeError(f"Found {a.errors} errors")
109-
a.write_instructions()
105+
a.write_instructions(self.temp_output_filename, False)
110106

111107
with open(self.temp_output_filename) as temp_output:
112108
lines = temp_output.readlines()

0 commit comments

Comments
 (0)