Skip to content

Clone sweep goes quiet when two new siblings share a divergence #200

Closed

Description

@CaffeinatedCoder

Found while adding the float families (#153, PRs #198 and #199).

CloneDivergenceTests / dotnet run tools/oracles.cs clones report a member only where one sibling differs from the family consensus (lone body, extra, missing). When Float64Range/Float64Set landed alone, the sweep listed 28 divergences (the finite guard, the non-positional unbounded variants, the float8out formatter, …), each waived with a reason. Adding Float32Range/Float32Set — which share every one of them — made 24 of those divergences disappear and their waivers go stale, and the sweep accepted that. The same happened earlier on a smaller scale: StringSet's NormalizeElement waivers went stale once Float64Set also had a NormalizeElement.

So two hand-copied siblings that drift together from the family are invisible to the sweep, which is exactly how a pair added in one change (or a defect copied into two siblings) would look.

Possible directions: report a member present in a minority (say, fewer than a third of the family) rather than in exactly one sibling; or key waivers by member and accept a set of units, so a waiver names both floats and fails as stale only when neither diverges any more.

Done when the float pair's shared divergences are reported (and waived once, naming both units), with a seed that copies a defect into two siblings and is caught.

Metadata

Metadata

Assignees

No one assigned

    Labels

    testsAdds or changes tests only (oracles, harnesses); no library code

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions