Spaces:
Sleeping
Sleeping
| """Unit tests for the M2 parser using inline-string M2 fragments.""" | |
| from __future__ import annotations | |
| import io | |
| from pathlib import Path | |
| from gec.m2 import apply_edits, iter_m2 | |
| M2_FIXTURE = """S This are gramamtically incorect . | |
| A 0 2|||R:VERB:SVA|||This is|||REQUIRED|||-NONE-|||0 | |
| A 2 3|||R:SPELL|||grammatically|||REQUIRED|||-NONE-|||0 | |
| A 3 4|||R:SPELL|||incorrect|||REQUIRED|||-NONE-|||0 | |
| S I really go to school . | |
| A -1 -1|||noop|||-NONE-|||REQUIRED|||-NONE-|||0 | |
| S She have did it . | |
| A 1 3|||R:VERB:TENSE|||did|||REQUIRED|||-NONE-|||0 | |
| """ | |
| def test_iter_m2_basic(tmp_path: Path): | |
| p = tmp_path / "x.m2" | |
| p.write_text(M2_FIXTURE, encoding="utf-8") | |
| sents = list(iter_m2(p)) | |
| assert len(sents) == 3 | |
| assert sents[0].source_tokens == ["This", "are", "gramamtically", "incorect", "."] | |
| assert sents[0].target == "This is grammatically incorrect ." | |
| assert [e.error_type for e in sents[0].edits] == [ | |
| "R:VERB:SVA", | |
| "R:SPELL", | |
| "R:SPELL", | |
| ] | |
| # noop sentence: zero edits, target == source | |
| assert sents[1].edits == [] | |
| assert sents[1].target == sents[1].source | |
| # multi-token replacement | |
| assert sents[2].target == "She did it ." | |
| def test_apply_edits_handles_insertion_and_deletion(): | |
| src = ["I", "to", "school"] | |
| from gec.m2 import Edit | |
| edits = [Edit(1, 1, "go")] | |
| assert apply_edits(src, edits) == ["I", "go", "to", "school"] | |
| src2 = ["I", "really", "go"] | |
| edits2 = [Edit(1, 2, "")] | |
| assert apply_edits(src2, edits2) == ["I", "go"] | |