Run the eleven tests the suite skips - #110
Merged
estebanzimanyi merged 1 commit intoSep 1, 2026
Merged
Conversation
A green run of this suite reads `257 passed, 11 skipped`. A skipped test asserts
nothing and is indistinguishable from a passing one in the job's conclusion, so
eleven assertions had stopped holding the model to MEOS without anything saying
so. Every one of them guards on a precondition this job already had the material
for and never named. Supplied and asserted, the suite reads 268 passed, 0 skipped.
Three causes, and the second is a defect rather than a circumstance.
`MEOS_LIBRARY_PATH` and `MEOS_INCLUDE_DIR` were unset. The ctypes engine suite
decodes, invokes and round-trips against a real libmeos, and the vendored test
splits the installed headers by owner; the job builds and installs both and
pointed neither at the tests. That is nine of the eleven.
`object_model_parity.py` read `sys.argv` at IMPORT time to resolve its paths.
The test suite imports it, so it read the RUNNER's flags: under
`pytest tests/ -q -rs` the PyMEOS oracle resolved to the literal path `-rs`,
which no checkout has, and both parity gates skipped themselves. The command
line is now read in `main()`, where it belongs, and the oracle also honours
`$PYMEOS_FACTORY` so a job whose PyMEOS checkout is not a sibling can name it.
CI checks PyMEOS out and names it.
Turning the engine suite on exposed what it had stopped catching.
`build_type_encodings()` picks the decoder for the opaque `Temporal` by an
alphabetical tiebreak it documents as arbitrary — there is no generic
`temporal_in` to prefer — and the tests asserted the identity of that tiebreak's
winner, `tbool_in`, together with a `tbool` literal. MobilityDB gaining
`tbigint` moved the pick, so the suite decoded `{t@...}` with `tbigint_in`. The
first assertion failed on the name and the resulting MEOS error state carried
into two more tests, one of them reporting a garbage `-374120624`. The tests now
follow the pick instead of naming it: a literal per subtype keyed by decoder, and
an assertion of what the design does guarantee — the decoder is one of the
subtype-narrow readers, the encoder IS the generic `temporal_out`.
A `Refuse a silent skip` step fails the job on any skip. With every precondition
supplied and asserted, a skip means a guard reads a condition this job no longer
satisfies, which is a defect worth a red.
`.gitignore` gains `.prefix/` and `_pymeos/`: the suite now runs against a built
libmeos and a PyMEOS checkout, so both appear in a working tree and neither is
the tree's to carry.
Running the engine suite also exposed a test that could not have been reliable.
`test_opaque_outparam_round_trip` called `encode("geo_as_ewkt", ptr)` with no
aux, but `geo_as_ewkt(const GSERIALIZED *, int maxdd)` takes two arguments and
`encode()` builds its argtypes from the aux it is given, so `maxdd` read
whatever the register held. Measured over six runs it raised
`The value must be strictly positive` on four of them, with a different value
each time, and passed on two — the pass being luck of the address, not evidence.
With `maxdd` supplied it is 6 of 6, and the engine suite is 8 of 8 over repeated
runs. The defect predates this change; it was invisible because the test never
ran.
estebanzimanyi
force-pushed
the
ci/run-the-tests-ci-skips
branch
from
August 31, 2026 22:59
59b075f to
ae7f7de
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A green run of this suite reads
257 passed, 11 skipped. A skipped test assertsnothing and is indistinguishable from a passing one in the job's conclusion, so
eleven assertions had stopped holding the model to MEOS without anything saying
so. Every one of them guards on a precondition this job already had the material
for and never named. Supplied and asserted, the suite reads 268 passed, 0 skipped.
Three causes, and the second is a defect rather than a circumstance.
MEOS_LIBRARY_PATHandMEOS_INCLUDE_DIRwere unset. The ctypes engine suitedecodes, invokes and round-trips against a real libmeos, and the vendored test
splits the installed headers by owner; the job builds and installs both and
pointed neither at the tests. That is nine of the eleven.
object_model_parity.pyreadsys.argvat IMPORT time to resolve its paths.The test suite imports it, so it read the RUNNER's flags: under
pytest tests/ -q -rsthe PyMEOS oracle resolved to the literal path-rs,which no checkout has, and both parity gates skipped themselves. The command
line is now read in
main(), where it belongs, and the oracle also honours$PYMEOS_FACTORYso a job whose PyMEOS checkout is not a sibling can name it.CI checks PyMEOS out and names it.
Turning the engine suite on exposed what it had stopped catching.
build_type_encodings()picks the decoder for the opaqueTemporalby analphabetical tiebreak it documents as arbitrary — there is no generic
temporal_into prefer — and the tests asserted the identity of that tiebreak'swinner,
tbool_in, together with atboolliteral. MobilityDB gainingtbigintmoved the pick, so the suite decoded{t@...}withtbigint_in. Thefirst assertion failed on the name and the resulting MEOS error state carried
into two more tests, one of them reporting a garbage
-374120624. The tests nowfollow the pick instead of naming it: a literal per subtype keyed by decoder, and
an assertion of what the design does guarantee — the decoder is one of the
subtype-narrow readers, the encoder IS the generic
temporal_out.A
Refuse a silent skipstep fails the job on any skip. With every preconditionsupplied and asserted, a skip means a guard reads a condition this job no longer
satisfies, which is a defect worth a red.
.gitignoregains.prefix/and_pymeos/: the suite now runs against a builtlibmeos and a PyMEOS checkout, so both appear in a working tree and neither is
the tree's to carry.
Running the engine suite also exposed a test that could not have been reliable.
test_opaque_outparam_round_tripcalledencode("geo_as_ewkt", ptr)with noaux, but
geo_as_ewkt(const GSERIALIZED *, int maxdd)takes two arguments andencode()builds its argtypes from the aux it is given, somaxddreadwhatever the register held. Measured over six runs it raised
The value must be strictly positiveon four of them, with a different valueeach time, and passed on two — the pass being luck of the address, not evidence.
With
maxddsupplied it is 6 of 6, and the engine suite is 8 of 8 over repeatedruns. The defect predates this change; it was invisible because the test never
ran.