Test FFT with ModularExtended<double> failing on i386
d-torrance opened this issue · comments
After applying the patch from #292, I still get the following failure in an i386 Debian experimental chroot:
$ tests/test-fft -
Writing report data to cout (intermingled with brief report)
# To rerun this test: test-fft-new -s 1639518228
# seed = 1639518228
Testing polynomial fft transforms... 0%
... [snip] ...
********************************************************************************
Test FFT with ModularExtended<double>, p=242239433635841 (50 bits, 2^11 divides p-1)
** with n=2^1
DIF<NoSimd<double>> ........................................ success
DIF_reversed<NoSimd<double>> ........................................ success
DIT<NoSimd<double>> ........................................ success
DIT_reversed<NoSimd<double>> ........................................ success
FFT_direct<NoSimd<double>> ........................................ success
FFT_inverse<NoSimd<double>> ........................................ success
** with n=2^2
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^3
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^4
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^5
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^6
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^7
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^8
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^9
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^10
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
** with n=2^11
DIF<NoSimd<double>> ........................................ failure
DIF_reversed<NoSimd<double>> ........................................ failure
DIT<NoSimd<double>> ........................................ failure
DIT_reversed<NoSimd<double>> ........................................ failure
FFT_direct<NoSimd<double>> ........................................ failure
FFT_inverse<NoSimd<double>> ........................................ failure
I was able to reproduce the issue, I will investigate
The bug comes from the usage of dom_power (implemented in Givaro) in fft_utils.h where one of its argument is casted from size_t to long. I will open a PR on Givaro to try to fix the issue.
Let me just reopen this issue (automatically closed upon merging linbox-team/givaro#197) so @d-torrance can confirm that the problem is fixed on his side.
Works for me now, thanks! Closing.