Repository navigation
test: captured collection probe sweep over every range and set type - #138
Merged
Merged
Conversation
This was referenced Oct 17, 2026
Open
Closed
CapturedCollectionProbeTests (integration) adds the captured collection to the EF Core operand-position axis. It reads every discovered range and value set type through: - a captured array, List, HashSet and IEnumerable - six lists that tell a list from the multirange it would collapse into (empty, overlapping, adjacent, with an empty value, duplicate, every shape) - Contains, Any and Count, alone and beside a Contains that reads the same collection The oracle is the same projection compiled and run over the rows as loaded. The lists hold loaded values, so the store's microsecond truncation does not count as a disagreement. Two families, registered as candidates: - #76, measured wider: a range collection that no Contains reads also fails loudly. Any(==) is rewritten to = ANY and fails with 42809, and timerange cannot be written at all. - #137 (new): Any/Count with a predicate over an empty collection throws "Empty collections are not supported as inline query roots". It affects every value set type, and ranges beside Contains. The sweep is registered in oracles.json and named in the heldBy of E36 and E37. It is seeded with set-collection-sent-as-one-parameter (the #46 defect), which tools/oracles.cs reports CAUGHT. Reverting #77 fails it too (42809 on every Contains). axes.md gains the value. It runs in about 5 seconds. Closes #136 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CaffeinatedCoder
force-pushed
the
test/captured-collection-probe
branch
from
October 17, 2026 23:28
afc3e8f to
4943e68
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.
Closes #136
Problem
No oracle sends a range or value set as a captured collection.
DifferentialFuzzParityTestsbinds operands only as a column, a constant or a single parameter. The oracle check on #105 found that three bugs in this position would pass every registered oracle:wanted.Contains(valueSetColumn)threwInvalidCastException.wanted.Contains(rangeColumn)failed on the server with42809.Any/Countover a range list silently merge overlapping ranges and drop empty ones.For #46 and #71 I reverted the fix and ran every oracle, and they stayed green.
Change
CapturedCollectionProbeTests, in the integration project against live PostgreSQL, sweeps this product:List,HashSetandIEnumerableContains,Any(==),Any(Overlaps),Any(IsEmpty),Count(Overlaps | IsAdjacentTo | IsSubsetOf)andCount()Containsthat reads the same collection, which decides how the plugin binds a range collectionThe oracle is the same projection compiled and run over the rows as loaded. The lists hold loaded values, so the store's microsecond truncation doesn't count as a disagreement. The sweep reuses
FuzzTypesdiscovery and linksRangeProbes/SetProbesfrom the conventions project. It runs in about 5 s.Wiring: registered in
oracles.json, named in theheldByof E36 and E37, seeded withset-collection-sent-as-one-parameter, and the value is added toaxes.md.docs/oracles.md,docs/testing.mdandAGENTS.mddescribe it.Findings, registered in
candidates.json:Containsreads goes out as one multirange parameter, so the answers are wrong. It also fails loudly in two ways:Any(w => w == c)is rewritten to= ANYand fails with42809, andtimerangecan't be written at all. That is 1,710 lines.Any/Countwith a predicate over an empty captured collection throws "Empty collections are not supported as inline query roots". It hits every value set type, and ranges besideContains. Any/Count over a captured list of ranges silently merge overlapping ranges and drop empty ones #76's fix would widen it to every range collection, so the two need to be fixed together. That is 1,136 lines.Tests
SKIPPED [known candidate …].dotnet run tools/oracles.cs seeds set-collection-sent-as-one-parameterreports CAUGHT: 5,760 failing value-set lines, and the range method stays green.src/diff on this branch fails the range method:42809on everyContainsbeside-shape row.🤖 Generated with Claude Code