[patch] long double FFT tests

Nathan (Jasper) Myers ncm at codesourcery.com
Thu Dec 22 08:22:55 UTC 2005


Per Jules's orders, tests for FFTs applied to long-double elements
where supported.  

Committed.

Nathan Myers
ncm

Index: ChangeLog
===================================================================
RCS file: /home/cvs/Repository/vpp/ChangeLog,v
retrieving revision 1.348
diff -u -p -r1.348 ChangeLog
--- ChangeLog	22 Dec 2005 06:53:51 -0000	1.348
+++ ChangeLog	22 Dec 2005 08:12:54 -0000
@@ -1,5 +1,14 @@
 2005-12-21  Nathan Myers  <ncm at codesourcery.com>
 
+	* src/vsip/fft-core.hpp: mention long double in comments
+	* src/vsip/fft-ldouble.cpp: new file, long-double element FFTs
+	* tests/fft.cpp, tests/fftm.cpp: add tests for long double.
+	* tests/fft.cpp: typo; test variant data organizations & axes
+	  with float, double or long double, whichever is first found 
+	  to be supported.
+
+2005-12-21  Nathan Myers  <ncm at codesourcery.com>
+
 	* configure.ac, vendor/GNUmakefile.inc.in: fix "make clean"
 	  for fftw libs, other cleanup, install in $(libdir).
 
Index: src/vsip/fft-ldouble.cpp
===================================================================
RCS file: src/vsip/fft-ldouble.cpp
diff -N src/vsip/fft-ldouble.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/vsip/fft-ldouble.cpp	22 Dec 2005 08:12:54 -0000
@@ -0,0 +1,15 @@
+/* Copyright (c) 2005 by CodeSourcery, LLC.  All rights reserved. */
+
+/** @file    vsip/fft-ldouble.cpp
+    @author  Nathan Myers
+    @date    2005-12-21
+    @brief   VSIPL++ Library: long-double-precision Fft instantiation
+*/
+
+//  This file is just here to persuade Make to give us an fft-ldouble.o.
+
+#include <vsip/impl/acconfig.hpp>
+#ifdef VSIP_IMPL_FFT_USE_LONG_DOUBLE
+#define VSIP_IMPL_FFT_LONG_DOUBLE
+#include <vsip/impl/fft-core.hpp>
+#endif
Index: src/vsip/impl/fft-core.hpp
===================================================================
RCS file: /home/cvs/Repository/vpp/src/vsip/impl/fft-core.hpp,v
retrieving revision 1.18
diff -u -p -r1.18 fft-core.hpp
--- src/vsip/impl/fft-core.hpp	29 Sep 2005 02:01:09 -0000	1.18
+++ src/vsip/impl/fft-core.hpp	22 Dec 2005 08:12:54 -0000
@@ -34,6 +34,7 @@
 //
 //   VSIP_IMPL_FFT_FLOAT
 //   VSIP_IMPL_FFT_DOUBLE
+//   VSIP_IMPL_FFT_LONG_DOUBLE
 
 #ifndef VSIP_IMPL_FFT_CORE_HPP
 #define VSIP_IMPL_FFT_CORE_HPP
@@ -59,7 +60,7 @@ extern "C"
 #endif
 
 #if defined(VSIP_IMPL_FFTW3)
-# include <fftw3.h>    // fftw3 has decls for float and double here.
+# include <fftw3.h>    // fftw3 has decls for all sizes here.
 #endif
 
 #if defined(VSIP_IMPL_IPP_FFT)
Index: tests/fft.cpp
===================================================================
RCS file: /home/cvs/Repository/vpp/tests/fft.cpp,v
retrieving revision 1.9
diff -u -p -r1.9 fft.cpp
--- tests/fft.cpp	20 Dec 2005 12:48:40 -0000	1.9
+++ tests/fft.cpp	22 Dec 2005 08:12:54 -0000
@@ -957,6 +957,27 @@ main()
 
 #endif 
 
+#if defined(VSIP_IMPL_FFT_USE_LONG_DOUBLE)
+
+#if ! defined(VSIP_IMPL_IPP_FFT)
+  test_by_ref<complex<long double> >(2, 64);
+  test_by_ref<complex<long double> >(1, 68);
+  test_by_ref<complex<long double> >(2, 256);
+  test_by_ref<complex<long double> >(2, 252);
+  test_by_ref<complex<long double> >(3, 17);
+
+  test_by_val<complex<long double> >(1, 128);
+  test_by_val<complex<long double> >(2, 256);
+  test_by_val<complex<long double> >(3, 512);
+
+  test_real<long double>(1, 128);
+  test_real<long double>(2, 242);
+  test_real<long double>(3, 16);
+#endif
+
+#endif 
+
+
 
 //
 // check 2D, 3D
@@ -995,14 +1016,32 @@ main()
 
 #endif
 
+#if defined(VSIP_IMPL_FFT_USE_LONG_DOUBLE)
+
+#if ! defined(VSIP_IMPL_IPP_FFT)
+  test_fft<0,0,double,false,2,vsip::fft_fwd>();
+  test_fft<0,0,double,false,3,vsip::fft_fwd>();
+
+  test_fft<0,0,double,true,2,1>();
+  test_fft<0,0,double,true,2,0>();
+
+  test_fft<0,0,double,true,3,2>();
+  test_fft<0,0,double,true,3,1>();
+  test_fft<0,0,double,true,3,0>();
+#endif  /* VSIP_IMPL_IPP_FFT */
+
+#endif
+
 //
 // check with different block types
 //
 
 #if defined(VSIP_IMPL_FFT_USE_FLOAT)
 # define SCALAR float
-#elif defined(VSIP_IMPL_FFT_USE_FLOAT)
+#elif defined(VSIP_IMPL_FFT_USE_DOUBLE)
 # define SCALAR double
+#elif defined(VSIP_IMPL_FFT_USE_LONG_DOUBLE)
+# define SCALAR long double
 #endif
 
 #if defined(SCALAR)
Index: tests/fftm.cpp
===================================================================
RCS file: /home/cvs/Repository/vpp/tests/fftm.cpp,v
retrieving revision 1.9
diff -u -p -r1.9 fftm.cpp
--- tests/fftm.cpp	20 Dec 2005 12:48:40 -0000	1.9
+++ tests/fftm.cpp	22 Dec 2005 08:12:54 -0000
@@ -532,5 +532,32 @@ main()
   test_real<double>(16);
 #endif
 
+#if defined(VSIP_IMPL_FFT_USE_LONG_DOUBLE)
+
+#if ! defined(VSIP_IMPL_IPP_FFT)
+  test_by_ref_x<complex<long double> >(18);
+  test_by_ref_x<complex<long double> >(64);
+  test_by_ref_x<complex<long double> >(68);
+  test_by_ref_x<complex<long double> >(256);
+  test_by_ref_x<complex<long double> >(252);
+
+  test_by_ref_y<complex<long double> >(68);
+  test_by_ref_y<complex<long double> >(256);
+
+  test_by_val_x<complex<long double> >(128);
+  test_by_val_x<complex<long double> >(256);
+  test_by_val_x<complex<long double> >(512);
+
+  test_by_val_y<complex<long double> >(18);
+  test_by_val_y<complex<long double> >(256);
+
+  // Tests for test r->c, c->r.
+  test_real<long double>(128);
+  test_real<long double>(242);
+  test_real<long double>(16);
+#endif /* VSIP_IMPL_IPP_FFT */
+
+#endif
+
   return 0;
 }



More information about the vsipl++ mailing list