You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit badc527
Browse filesBrowse the repository at this point in the historyBrowse files
test(go): sweep the dataflow relations over every position, not one
The existing tests pin each property at one hand-picked position; these keep
the relations and add the sampling. R1 depth monotonicity, R2 a capped slice
is a prefix (not merely a subset) and reports the whole total, R3
flows_to_argument implies flows_to_call, R4 a returned path implies the
predicate, R7 every edge endpoint is an id get_source can read -- each on
both backends over every addressable position, capped at 60.
This is the part of the analyzer's metamorphic design that transfers: it
varies the input program and holds the analyzer fixed, which the SDK cannot
do because it produces no analysis, so the SDK's dual is to vary the query
and hold the analysis fixed. Not generative -- a property-based library over
this space found nothing a deterministic sweep did not.
The sweeps found a parity gap on their first run: get_source accepted a
body-node id on the graph backend and raised on the local one, whose index
held only types, callables and fields, though every edge endpoint and
SliceNode.ref is one. Fixing it exposed describe diverging the other way --
local accepted a bare id, the graph silently dropped it. Both now accept
both forms.
Verified by mutation rather than by passing: six behavior-changing mutations
in the shapes these relations guard are all caught. R7 anchors on
GoBodyNode.id, the analyzer's own string, because comparing the SDK's
composed id against the SDK's own lookup let a corrupted join move both
sides together.
Also tidies prose in the Go docstrings and tests.
Refs #436
0 commit comments