/*****************************************************************************
test.cpp
Copyright (c) 2005 Laurent de Soras
--- Legal stuff ---
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*Tab=3***********************************************************************/
#if defined (_MSC_VER)#pragma warning (4 : 4786) // "identifier was truncated to '255' characters in the debug information"#pragma warning (4 : 4800) // "forcing value to bool 'true' or 'false' (performance warning)"#endif/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/#include "test_settings.h"#include "TestHelperFixLen.h"#include "TestHelperNormal.h"#if defined (_MSC_VER)#include <crtdbg.h>#include <new.h>#endif // _MSC_VER#include <new>#include <cassert>#include <cstdio>#define TEST_/*\\\ FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/staticint TEST_perform_test_accuracy_all ();
staticint TEST_perform_test_speed_all ();
staticvoid TEST_prog_init ();
staticvoid TEST_prog_end ();
int main (int argc,char*argv [])
{
usingnamespace std;
int ret_val =0;
TEST_prog_init ();
try
{
if (ret_val ==0)
{
ret_val = TEST_perform_test_accuracy_all ();
}
if (ret_val ==0)
{
ret_val = TEST_perform_test_speed_all ();
}
}
catch (std::exception &e)
{
printf ("\n*** main(): Exception (std::exception) : %s\n", e.what ());
ret_val =-1;
}
catch (...)
{
printf ("\n*** main(): Undefined exception\n");
ret_val =-1;
}
TEST_prog_end ();
return (ret_val);
}
int TEST_perform_test_accuracy_all ()
{
int ret_val =0;
TestHelperNormal <float>::perform_test_accuracy (ret_val);
TestHelperNormal <double>::perform_test_accuracy (ret_val);
TestHelperFixLen <1>::perform_test_accuracy (ret_val);
TestHelperFixLen <2>::perform_test_accuracy (ret_val);
TestHelperFixLen <3>::perform_test_accuracy (ret_val);
TestHelperFixLen <4>::perform_test_accuracy (ret_val);
TestHelperFixLen <7>::perform_test_accuracy (ret_val);
TestHelperFixLen <8>::perform_test_accuracy (ret_val);
TestHelperFixLen <10>::perform_test_accuracy (ret_val);
TestHelperFixLen <12>::perform_test_accuracy (ret_val);
TestHelperFixLen <13>::perform_test_accuracy (ret_val);
return (ret_val);
}
int TEST_perform_test_speed_all ()
{
int ret_val =0;
#if defined (test_settings_SPEED_TEST_ENABLED)
TestHelperNormal <float>::perform_test_speed (ret_val);
TestHelperNormal <double>::perform_test_speed (ret_val);
TestHelperFixLen <1>::perform_test_speed (ret_val);
TestHelperFixLen <2>::perform_test_speed (ret_val);
TestHelperFixLen <3>::perform_test_speed (ret_val);
TestHelperFixLen <4>::perform_test_speed (ret_val);
TestHelperFixLen <7>::perform_test_speed (ret_val);
TestHelperFixLen <8>::perform_test_speed (ret_val);
TestHelperFixLen <10>::perform_test_speed (ret_val);
TestHelperFixLen <12>::perform_test_speed (ret_val);
TestHelperFixLen <14>::perform_test_speed (ret_val);
TestHelperFixLen <16>::perform_test_speed (ret_val);
TestHelperFixLen <20>::perform_test_speed (ret_val);
#endifreturn (ret_val);
}
#if defined (_MSC_VER)staticint __cdecl TEST_new_handler_cb (size_t dummy)
{
throw std::bad_alloc ();
return (0);
}
#endif // _MSC_VER#if defined (_MSC_VER) && ! defined (NDEBUG)staticint __cdecl TEST_debug_alloc_hook_cb (int alloc_type,void*user_data_ptr, size_t size,int block_type,long request_nbr,constunsignedchar*filename_0,int line_nbr)
{
if (block_type != _CRT_BLOCK) // Ignore CRT blocks to prevent infinite recursion
{
switch (alloc_type)
{
case _HOOK_ALLOC:
case _HOOK_REALLOC:
case _HOOK_FREE:
// Put some debug code herebreak;
default:
assert (false); // Undefined allocation typebreak;
}
}
return (1);
}
#endif#if defined (_MSC_VER) && ! defined (NDEBUG)staticint __cdecl TEST_debug_report_hook_cb (int report_type,char*user_msg_0,int*ret_val_ptr)
{
*ret_val_ptr =0; // 1 to override the CRT default reporting modeswitch (report_type)
{
case _CRT_WARN:
case _CRT_ERROR:
case _CRT_ASSERT:
// Put some debug code herebreak;
}
return (*ret_val_ptr);
}
#endifstaticvoid TEST_prog_init ()
{
#if defined (_MSC_VER)::_set_new_handler (::TEST_new_handler_cb);
#endif // _MSC_VER#if defined (_MSC_VER) && ! defined (NDEBUG)
{
constint mode = (1* _CRTDBG_MODE_DEBUG)
| (1* _CRTDBG_MODE_WNDW);
::_CrtSetReportMode (_CRT_WARN, mode);
::_CrtSetReportMode (_CRT_ERROR, mode);
::_CrtSetReportMode (_CRT_ASSERT, mode);
constint old_flags =::_CrtSetDbgFlag (_CRTDBG_REPORT_FLAG);
::_CrtSetDbgFlag ( old_flags
| (1* _CRTDBG_LEAK_CHECK_DF)
| (1* _CRTDBG_CHECK_ALWAYS_DF));
::_CrtSetBreakAlloc (-1); // Specify here a memory bloc number::_CrtSetAllocHook (TEST_debug_alloc_hook_cb);
::_CrtSetReportHook (TEST_debug_report_hook_cb);
// Speed up I/O but breaks C stdio compatibility// std::cout.sync_with_stdio (false);// std::cin.sync_with_stdio (false);// std::cerr.sync_with_stdio (false);// std::clog.sync_with_stdio (false);
}
#endif // _MSC_VER, NDEBUG
}
staticvoid TEST_prog_end ()
{
#if defined (_MSC_VER) && ! defined (NDEBUG)
{
constint mode = (1* _CRTDBG_MODE_DEBUG)
| (0* _CRTDBG_MODE_WNDW);
::_CrtSetReportMode (_CRT_WARN, mode);
::_CrtSetReportMode (_CRT_ERROR, mode);
::_CrtSetReportMode (_CRT_ASSERT, mode);
::_CrtMemState mem_state;
::_CrtMemCheckpoint (&mem_state);
::_CrtMemDumpStatistics (&mem_state);
}
#endif // _MSC_VER, NDEBUG
}
/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/