Skip to content

Commit 0720bdd

Browse files
authored
Merge pull request #8 from wimglenn/extra
extra context
2 parents d23ca57 + 9571ddc commit 0720bdd

File tree

4 files changed

+54
-19
lines changed

4 files changed

+54
-19
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,10 @@ jobs:
3030
run: uv python install ${{ matrix.py-version }}
3131

3232
- name: Install
33-
run: |
34-
uv venv
35-
uv pip install -r tests/requirements.txt --editable .
33+
run: uv venv && uv pip install -r tests/requirements.txt --editable .
3634

3735
- name: Run tests for ${{ matrix.python-version }} on ${{ matrix.os }}
3836
run: uv run pytest
3937

4038
- name: Upload coverage to Codecov
4139
uses: codecov/codecov-action@v4
42-
with:
43-
token: ${{ secrets.CODECOV_TOKEN }}

aocd_example_parser/examples.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@
793793
{
794794
"answer_a": "a_code[-5]",
795795
"answer_b": "None",
796-
"extra": {"microchips": [5, 2]}
796+
"extra": {"chip1": 5, "chip2": 2}
797797
}
798798
],
799799
"2016/12": [
@@ -1183,7 +1183,8 @@
11831183
],
11841184
"2017/16": [
11851185
{
1186-
"input_data": "','.join([li.codes[0] for li in a_li[3:]])"
1186+
"input_data": "','.join([li.codes[0] for li in a_li[3:]])",
1187+
"extra": {"n_programs": 5, "iterations": 2}
11871188
}
11881189
],
11891190
"2017/17": [
@@ -1757,12 +1758,12 @@
17571758
{
17581759
"answer_a": "a_code[-4]",
17591760
"answer_b": "b_code[0]",
1760-
"extra": {"ta": 10}
1761+
"extra": {"iterations": 10}
17611762
},
17621763
{
17631764
"input_data": "a_pre[3]",
17641765
"answer_a": "a_pre[4].split()[-1]",
1765-
"extra": {"ta": 100}
1766+
"extra": {"iterations": 100}
17661767
}
17671768
],
17681769
"2019/13": [],
@@ -1892,7 +1893,7 @@
18921893
"2019/24": [
18931894
{
18941895
"input_data": "a_pre[0][15:45]",
1895-
"extra": {"tb": 10}
1896+
"extra": {"iterations": 10}
18961897
}
18971898
],
18981899
"2019/25": [],
@@ -2518,7 +2519,7 @@
25182519
],
25192520
"2023/21": [
25202521
{
2521-
"answer_a": "a_code[-3]",
2522+
"answer_a": "a_code[-4]",
25222523
"answer_b": "b_code[6]",
25232524
"extra": {"n_steps": 6}
25242525
},

tests/integration.py

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/env python3
2+
import ast
23
import pathlib
34
import sys
45

@@ -11,13 +12,40 @@
1112
input_dir = here.parent.parent / "advent-of-code-wim" / "tests"
1213

1314

14-
def remove_trailing_comments(lines):
15+
def split_trailing_comments(lines):
16+
extra = []
1517
while lines and (not lines[-1].strip() or lines[-1].startswith("#")):
16-
lines.pop()
17-
if len(lines):
18-
lines[-1] = lines[-1].split("#")[0].strip()
19-
if len(lines) > 1:
20-
lines[-2] = lines[-2].split("#")[0].strip()
18+
extra.append(lines.pop())
19+
if len(lines) and "#" in lines[-1]:
20+
line, comment = lines[-1].split("#", 1)
21+
lines[-1] = line.strip()
22+
extra.append(comment.strip())
23+
if len(lines) > 1 and "#" in lines[-2]:
24+
line, comment = lines[-2].split("#", 1)
25+
lines[-2] = line.strip()
26+
extra.append(comment.strip())
27+
extra = [x.strip() for x in extra if x.strip()]
28+
return extra
29+
30+
31+
def parse_extra_context(extra):
32+
result = {}
33+
for line in extra:
34+
equals = line.count("=")
35+
commas = line.count(",")
36+
if equals and equals == commas + 1:
37+
for part in line.split(","):
38+
k, v = part.strip().split("=")
39+
k = k.strip()
40+
v = v.strip()
41+
try:
42+
v = ast.literal_eval(v)
43+
except ValueError:
44+
pass
45+
if k in result:
46+
raise NotImplementedError(f"Duplicate key {k!r}")
47+
result[k] = v
48+
return result
2149

2250

2351
def main():
@@ -40,7 +68,8 @@ def main():
4068
rc += 1
4169
continue
4270
lines = example_file.read_text(encoding="utf-8").splitlines()
43-
remove_trailing_comments(lines)
71+
extra = split_trailing_comments(lines)
72+
expected_extra = parse_extra_context(extra)
4473
*lines, expected_answer_a, expected_answer_b = lines
4574
expected_input_data = "\n".join(lines).rstrip()
4675
diff = compare(
@@ -60,6 +89,15 @@ def main():
6089
if diff is not None:
6190
print(f"incorrect answer {part} ({i}) for", puzzle.url, diff)
6291
rc += 1
92+
if example.extra or expected_extra:
93+
diff = compare(
94+
actual=example.extra,
95+
expected=expected_extra,
96+
raises=False,
97+
)
98+
if diff is not None:
99+
print(f"incorrect extra ({i}) for", puzzle.url, diff)
100+
rc += 1
63101
sys.exit(rc)
64102

65103

tests/test_extra_context.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ def test_locator_extra_context():
1919
page = Page.from_raw(html=fake_prose)
2020
examples = extract_examples(page)
2121
[example] = examples
22-
assert example.extra == {"microchips": [5, 2]}
22+
assert example.extra == {"chip1": 5, "chip2": 2}

0 commit comments

Comments
 (0)