compiletest: ignore SVG y offset in by-lines comparison#157350
Conversation
|
Some changes occurred in src/tools/compiletest cc @jieyouxu |
|
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @clubby789 (or someone else) some time within the next two weeks. Please see the contribution instructions for more information. Namely, in order to ensure the minimum review times lag, PR authors and assigned reviewers should ensure that the review label (
Why was this reviewer chosen?The reviewer was selected based on:
|
| // such a reordering is not reported as a difference. The normalization | ||
| // is comparison-only: on mismatch the original strings are kept for | ||
| // the diff and for blessing. Single-threaded runs take the | ||
| // exact-comparison path above and still check `y`. |
There was a problem hiding this comment.
@zetanumbers
At least the root cause analyses look plausible (although they need to be verified by a human of course), and may be potentially put into the tracking issue, even if the change is not merged.
There was a problem hiding this comment.
When running the SVG test under the parallel frontend at head, then any run fails the existing line by line comparison, and compiletest writes the actual rendered SVG to disk:
RS=tests/ui/error-emitter/multiline-removal-suggestion.rs
for i in $(seq 1 40); do
./x test $RS --test-args "--parallel-frontend-threads=16" --force-rerun
done
# each failing run prints: Saved the actual svg to `<build>/.../multiline-removal-suggestion.svg`
Raw sorted line comparison, which is what the test does before this PR:
$ diff <(sort A.svg) <(sort B.svg) | grep -c '^[<>]'
232 # nonzero, so the comparison reports a difference
By comparison, with this PR, we drop the <svg> header line, replace y="..px" with a constant, then sort:
$ norm(){ tail -n +2 "$1" | sed -E 's/y="[0-9]+px"/y="0px"/g' | sort; }
$ diff <(norm A.svg) <(norm B.svg) | grep -c '^[<>]'
0 # identical as a multiset
Each differing line is the same row at a different height. For example the rows for the span at :39:2:
A: <tspan x="10px" y="1648px"> ... rs:39:2</tspan>
B: <tspan x="10px" y="370px"> ... rs:39:2</tspan>
The content is the same but the y changes. After the substitution both become y="0px" and match.
There was a problem hiding this comment.
This change should also be reflected in diff_by_lines function for rendering the line difference.
There was a problem hiding this comment.
We can confirm it works if test passes now, but it seems to be about right.
UPDATE: I've checked it works.
|
А ты говоришь на русском? |
75a155b to
01b7983
Compare
01b7983 to
bb47676
Compare
Tracked in #154314.
SVG diagnostic snapshots render one terminal row per line, laid out top to bottom. Under the parallel front-end, independent diagnostics can be emitted in a different order. That permutes the rows and re-renders each one at a different vertical
yoffset, even though the content of every row is unchanged.This change strips the
ycoordinate (and the<svg>header line, whose width and height are already ignored by the exact comparison) before the multiset comparison, so a reordering of whole rows is no longer treated as a difference.