/***************************************************************************** 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 #include #endif // _MSC_VER #include #include #include #define TEST_ /*\\\ FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ static int TEST_perform_test_accuracy_all (); static int TEST_perform_test_speed_all (); static void TEST_prog_init (); static void TEST_prog_end (); int main (int argc, char *argv []) { using namespace 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 ::perform_test_accuracy (ret_val); TestHelperNormal ::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 ::perform_test_speed (ret_val); TestHelperNormal ::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); #endif return (ret_val); } #if defined (_MSC_VER) static int __cdecl TEST_new_handler_cb (size_t dummy) { throw std::bad_alloc (); return (0); } #endif // _MSC_VER #if defined (_MSC_VER) && ! defined (NDEBUG) 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) { 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 here break; default: assert (false); // Undefined allocation type break; } } return (1); } #endif #if defined (_MSC_VER) && ! defined (NDEBUG) static int __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 mode switch (report_type) { case _CRT_WARN: case _CRT_ERROR: case _CRT_ASSERT: // Put some debug code here break; } return (*ret_val_ptr); } #endif static void TEST_prog_init () { #if defined (_MSC_VER) ::_set_new_handler (::TEST_new_handler_cb); #endif // _MSC_VER #if defined (_MSC_VER) && ! defined (NDEBUG) { const int mode = (1 * _CRTDBG_MODE_DEBUG) | (1 * _CRTDBG_MODE_WNDW); ::_CrtSetReportMode (_CRT_WARN, mode); ::_CrtSetReportMode (_CRT_ERROR, mode); ::_CrtSetReportMode (_CRT_ASSERT, mode); const int 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 } static void TEST_prog_end () { #if defined (_MSC_VER) && ! defined (NDEBUG) { const int 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 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/