Skip to content

Commit 72fb6d3

Browse files
committed
test: fix a test failure on ppc64(le) and aarch64
Caused by different results in -O0 vs -O2. The resulting array differs only slightly but the initial sequence has one extra zero. That triggers our assert, no other compiler flag seem to be affecting this. Compiled with -O0: Breakpoint 1, test_nonzero_x_linear () at test-bezier.c:157 157 assert(bezier[x] > bezier[x-1]); (gdb) p bezier $6 = {0 <repeats 409 times>, 1, 2, 4, 5, 7, 9, 10, 12, 14, 15, 17, 19, 21, 22, Compiled with -O2: (gdb) p bezier $1 = {0 <repeats 410 times>, 1, 3, 5, 7, 9, 10, 12, 14, 15, 17, 19, 20, 22, Printing of the temporary numbers in the decasteljau function shows that a few of them are off by one, e.g. 408.530612/0.836735 with O0, but 409.510204/0.836735 with O2 Note: these are not rounding errors caused by the code, the cast to int happens afterwards. Hack around this by allowing for one extra zero before we check that the rest of the curve is ascending again. https://bugs.freedesktop.org/show_bug.cgi?id=99992 Signed-off-by: Peter Hutterer <[email protected]>
1 parent aae2c8a commit 72fb6d3

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

test/test-bezier.c

+7
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ test_nonzero_x_linear(void)
153153
assert(bezier[x] == 0);
154154
} while (++x < size * 0.2 - 1);
155155

156+
/* ppc64le, ppc64, aarch64 have different math results at -O2,
157+
resulting in one extra zero at the beginning of the array.
158+
some other numbers are different too but within the error
159+
margin (#99992) */
160+
if (bezier[x] == 0)
161+
x++;
162+
156163
do {
157164
assert(bezier[x] > bezier[x-1]);
158165
} while (++x < size * 0.8 - 1);

0 commit comments

Comments
 (0)