# Czech RGL regression tests

From the RGL checkout, run:

    sh tests/czech/check.sh

The script uses `gf` from `PATH` when `GF` is unset or empty. To select another
executable, including a path containing spaces, use:

    GF='/path/to/gf' sh tests/czech/check.sh

`GF` names one executable, not a command with flags. Generated files go into
a temporary directory removed on exit. No application grammar is required.

`regressions.gfs` checks morphology and grammatical composition through the
source API, grouped by feature. Its expected output is in `regressions.out`.
`markup.gfs` separately checks clitic movement through fronting, embedding
and coordination, including discontinuous marked constituents. It also checks
that NP predetermination preserves markup scope when inserting before a modifier.
Source computation exposes `Predef.BIND` and `Predef.SOFT_BIND` markers;
PGF linearization handles them as token joining and punctuation.

The runner also builds `AllCze`, `TryCze` and `SymbolicCze` into a fresh
directory, then compiles `CzeTests.gf` using only that distribution.
Typed declarations check every public V2/V3 paradigm overload. The runner
requires the consumer's `.gfo`, since GF can report errors and still exit
successfully.

`CzeRoundTrip` and `roundtrip.tsv` check PGF generation and parsing, including
joined negation, polarity recovery and polite/plural ambiguity.
`CzeExtensionRoundTrip` and `extension-roundtrip.tsv` cover secondary and
dative predicates, bound objects, subject omission, complement forms and
predeterminer placement with a modified pronoun. Compound cardinals are checked
with possessives, oblique case and predicate agreement, including agreement
with the leading scale in sums such as 2,200.
The abstract fragments are acyclic: parsing must return the complete
expected set of trees, without truncation or reliance on enumeration order.
Repeated strings record distinct intended analyses. These small fragments
do not establish parsing coverage for the full Czech RGL.

Preserve the empty `Pol.s` constituent: selecting a verb form with `pol.p`
alone does not recover polarity. For example, parsing `nečti ji` should give:

    UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a read_V2) (UsePron she_Pron)))

Removing the constituent leaves `?1` in place of `PNeg`, even though the
negative spelling is recognized.

Prefer treebank coverage where practical. Keep source checks for paradigms
and distinctions outside those fragments; do not repeat treebank examples
unless the source API adds a separate contract. These tests cover present
clauses, infinitives and imperatives, not the unimplemented RGL tenses or
anteriority.

Coordinated-subject person/number agreement and subordinate-clause punctuation
also retain inherited gaps. The finite fragments do not establish coverage
of those constructions.
