demos/spectrum/3rdparty/fftreal/test.cpp
changeset 25 e24348a560a6
equal deleted inserted replaced
23:89e065397ea6 25:e24348a560a6
       
     1 /*****************************************************************************
       
     2 
       
     3         test.cpp
       
     4         Copyright (c) 2005 Laurent de Soras
       
     5 
       
     6 --- Legal stuff ---
       
     7 
       
     8 This library is free software; you can redistribute it and/or
       
     9 modify it under the terms of the GNU Lesser General Public
       
    10 License as published by the Free Software Foundation; either
       
    11 version 2.1 of the License, or (at your option) any later version.
       
    12 
       
    13 This library is distributed in the hope that it will be useful,
       
    14 but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    16 Lesser General Public License for more details.
       
    17 
       
    18 You should have received a copy of the GNU Lesser General Public
       
    19 License along with this library; if not, write to the Free Software
       
    20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
       
    21 
       
    22 *Tab=3***********************************************************************/
       
    23 
       
    24 
       
    25 
       
    26 #if defined (_MSC_VER)
       
    27 	#pragma warning (4 : 4786) // "identifier was truncated to '255' characters in the debug information"
       
    28 	#pragma warning (4 : 4800) // "forcing value to bool 'true' or 'false' (performance warning)"
       
    29 #endif
       
    30 
       
    31 
       
    32 
       
    33 /*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
       
    34 
       
    35 #include	"test_settings.h"
       
    36 #include	"TestHelperFixLen.h"
       
    37 #include	"TestHelperNormal.h"
       
    38 
       
    39 #if defined (_MSC_VER)
       
    40 #include	<crtdbg.h>
       
    41 #include	<new.h>
       
    42 #endif	// _MSC_VER
       
    43 
       
    44 #include	<new>
       
    45 
       
    46 #include	<cassert>
       
    47 #include	<cstdio>
       
    48 
       
    49 
       
    50 
       
    51 #define	TEST_
       
    52 
       
    53 
       
    54 /*\\\ FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
       
    55 
       
    56 
       
    57 
       
    58 static int	TEST_perform_test_accuracy_all ();
       
    59 static int	TEST_perform_test_speed_all ();
       
    60 
       
    61 static void	TEST_prog_init ();
       
    62 static void	TEST_prog_end ();
       
    63 
       
    64 
       
    65 
       
    66 int main (int argc, char *argv [])
       
    67 {
       
    68 	using namespace std;
       
    69 
       
    70 	int				ret_val = 0;
       
    71 
       
    72 	TEST_prog_init ();
       
    73 
       
    74 	try
       
    75 	{
       
    76 		if (ret_val == 0)
       
    77 		{
       
    78 			ret_val = TEST_perform_test_accuracy_all ();
       
    79 		}
       
    80 
       
    81 		if (ret_val == 0)
       
    82 		{
       
    83 			ret_val = TEST_perform_test_speed_all ();
       
    84 		}
       
    85 	}
       
    86 
       
    87 	catch (std::exception &e)
       
    88 	{
       
    89 		printf ("\n*** main(): Exception (std::exception) : %s\n", e.what ());
       
    90 		ret_val = -1;
       
    91 	}
       
    92 
       
    93 	catch (...)
       
    94 	{
       
    95 		printf ("\n*** main(): Undefined exception\n");
       
    96 		ret_val = -1;
       
    97 	}
       
    98 
       
    99 	TEST_prog_end ();
       
   100 
       
   101 	return (ret_val);
       
   102 }
       
   103 
       
   104 
       
   105 
       
   106 int	TEST_perform_test_accuracy_all ()
       
   107 {
       
   108    int            ret_val = 0;
       
   109 
       
   110 	TestHelperNormal <float >::perform_test_accuracy (ret_val);
       
   111 	TestHelperNormal <double>::perform_test_accuracy (ret_val);
       
   112 
       
   113    TestHelperFixLen < 1>::perform_test_accuracy (ret_val);
       
   114    TestHelperFixLen < 2>::perform_test_accuracy (ret_val);
       
   115    TestHelperFixLen < 3>::perform_test_accuracy (ret_val);
       
   116    TestHelperFixLen < 4>::perform_test_accuracy (ret_val);
       
   117    TestHelperFixLen < 7>::perform_test_accuracy (ret_val);
       
   118    TestHelperFixLen < 8>::perform_test_accuracy (ret_val);
       
   119    TestHelperFixLen <10>::perform_test_accuracy (ret_val);
       
   120    TestHelperFixLen <12>::perform_test_accuracy (ret_val);
       
   121    TestHelperFixLen <13>::perform_test_accuracy (ret_val);
       
   122 
       
   123 	return (ret_val);
       
   124 }
       
   125 
       
   126 
       
   127 
       
   128 int	TEST_perform_test_speed_all ()
       
   129 {
       
   130    int            ret_val = 0;
       
   131 
       
   132 #if defined (test_settings_SPEED_TEST_ENABLED)
       
   133 
       
   134 	TestHelperNormal <float >::perform_test_speed (ret_val);
       
   135 	TestHelperNormal <double>::perform_test_speed (ret_val);
       
   136 
       
   137    TestHelperFixLen < 1>::perform_test_speed (ret_val);
       
   138    TestHelperFixLen < 2>::perform_test_speed (ret_val);
       
   139    TestHelperFixLen < 3>::perform_test_speed (ret_val);
       
   140    TestHelperFixLen < 4>::perform_test_speed (ret_val);
       
   141    TestHelperFixLen < 7>::perform_test_speed (ret_val);
       
   142    TestHelperFixLen < 8>::perform_test_speed (ret_val);
       
   143    TestHelperFixLen <10>::perform_test_speed (ret_val);
       
   144    TestHelperFixLen <12>::perform_test_speed (ret_val);
       
   145    TestHelperFixLen <14>::perform_test_speed (ret_val);
       
   146    TestHelperFixLen <16>::perform_test_speed (ret_val);
       
   147    TestHelperFixLen <20>::perform_test_speed (ret_val);
       
   148 
       
   149 #endif
       
   150 
       
   151    return (ret_val);
       
   152 }
       
   153 
       
   154 
       
   155 
       
   156 #if defined (_MSC_VER)
       
   157 static int __cdecl	TEST_new_handler_cb (size_t dummy)
       
   158 {
       
   159 	throw std::bad_alloc ();
       
   160 	return (0);
       
   161 }
       
   162 #endif	// _MSC_VER
       
   163 
       
   164 
       
   165 
       
   166 #if defined (_MSC_VER) && ! defined (NDEBUG)
       
   167 static int	__cdecl	TEST_debug_alloc_hook_cb (int alloc_type, void *user_data_ptr, size_t size, int block_type, long request_nbr, const unsigned char *filename_0, int line_nbr)
       
   168 {
       
   169 	if (block_type != _CRT_BLOCK)	// Ignore CRT blocks to prevent infinite recursion
       
   170 	{
       
   171 		switch (alloc_type)
       
   172 		{
       
   173 		case	_HOOK_ALLOC:
       
   174 		case	_HOOK_REALLOC:
       
   175 		case	_HOOK_FREE:
       
   176 
       
   177 			// Put some debug code here
       
   178 
       
   179 			break;
       
   180 
       
   181 		default:
       
   182 			assert (false);	// Undefined allocation type
       
   183 			break;
       
   184 		}
       
   185 	}
       
   186 
       
   187 	return (1);
       
   188 }
       
   189 #endif
       
   190 
       
   191 
       
   192 
       
   193 #if defined (_MSC_VER) && ! defined (NDEBUG)
       
   194 static int	__cdecl	TEST_debug_report_hook_cb (int report_type, char *user_msg_0, int *ret_val_ptr)
       
   195 {
       
   196 	*ret_val_ptr = 0;	// 1 to override the CRT default reporting mode
       
   197 
       
   198 	switch (report_type)
       
   199 	{
       
   200 	case	_CRT_WARN:
       
   201 	case	_CRT_ERROR:
       
   202 	case	_CRT_ASSERT:
       
   203 
       
   204 // Put some debug code here
       
   205 
       
   206 		break;
       
   207 	}
       
   208 
       
   209 	return (*ret_val_ptr);
       
   210 }
       
   211 #endif
       
   212 
       
   213 
       
   214 
       
   215 static void	TEST_prog_init ()
       
   216 {
       
   217 #if defined (_MSC_VER)
       
   218 	::_set_new_handler (::TEST_new_handler_cb);
       
   219 #endif	// _MSC_VER
       
   220 
       
   221 #if defined (_MSC_VER) && ! defined (NDEBUG)
       
   222 	{
       
   223 		const int	mode =   (1 * _CRTDBG_MODE_DEBUG)
       
   224 						       | (1 * _CRTDBG_MODE_WNDW);
       
   225 		::_CrtSetReportMode (_CRT_WARN, mode);
       
   226 		::_CrtSetReportMode (_CRT_ERROR, mode);
       
   227 		::_CrtSetReportMode (_CRT_ASSERT, mode);
       
   228 
       
   229 		const int	old_flags = ::_CrtSetDbgFlag (_CRTDBG_REPORT_FLAG);
       
   230 		::_CrtSetDbgFlag (  old_flags
       
   231 		                  | (1 * _CRTDBG_LEAK_CHECK_DF)
       
   232 		                  | (1 * _CRTDBG_CHECK_ALWAYS_DF));
       
   233 		::_CrtSetBreakAlloc (-1);	// Specify here a memory bloc number
       
   234 		::_CrtSetAllocHook (TEST_debug_alloc_hook_cb);
       
   235 		::_CrtSetReportHook (TEST_debug_report_hook_cb);
       
   236 
       
   237 		// Speed up I/O but breaks C stdio compatibility
       
   238 //		std::cout.sync_with_stdio (false);
       
   239 //		std::cin.sync_with_stdio (false);
       
   240 //		std::cerr.sync_with_stdio (false);
       
   241 //		std::clog.sync_with_stdio (false);
       
   242 	}
       
   243 #endif	// _MSC_VER, NDEBUG
       
   244 }
       
   245 
       
   246 
       
   247 
       
   248 static void	TEST_prog_end ()
       
   249 {
       
   250 #if defined (_MSC_VER) && ! defined (NDEBUG)
       
   251 	{
       
   252 		const int	mode =   (1 * _CRTDBG_MODE_DEBUG)
       
   253 						       | (0 * _CRTDBG_MODE_WNDW);
       
   254 		::_CrtSetReportMode (_CRT_WARN, mode);
       
   255 		::_CrtSetReportMode (_CRT_ERROR, mode);
       
   256 		::_CrtSetReportMode (_CRT_ASSERT, mode);
       
   257 
       
   258 		::_CrtMemState	mem_state;
       
   259 		::_CrtMemCheckpoint (&mem_state);
       
   260 		::_CrtMemDumpStatistics (&mem_state);
       
   261 	}
       
   262 #endif	// _MSC_VER, NDEBUG
       
   263 }
       
   264 
       
   265 
       
   266 
       
   267 /*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/