diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:30 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:30 +0000 |
commit | 7a52d43a162b23d9e85e7b955e9b2c8e9caf550e (patch) | |
tree | 66a84b20d47f2269d8bdc6e0323f338763424d3a /ACE/examples/Mem_Map/IO-tests/test_io.cpp | |
parent | 0e49389337be86641451a5c36c24bf742fe97523 (diff) | |
download | ATCD-7a52d43a162b23d9e85e7b955e9b2c8e9caf550e.tar.gz |
Repo restructuring
Diffstat (limited to 'ACE/examples/Mem_Map/IO-tests/test_io.cpp')
-rw-r--r-- | ACE/examples/Mem_Map/IO-tests/test_io.cpp | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/ACE/examples/Mem_Map/IO-tests/test_io.cpp b/ACE/examples/Mem_Map/IO-tests/test_io.cpp new file mode 100644 index 00000000000..b60401cc813 --- /dev/null +++ b/ACE/examples/Mem_Map/IO-tests/test_io.cpp @@ -0,0 +1,211 @@ +// $Id$ + +// Test program for different methods of copying files. + +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_unistd.h" +#include "ace/ACE.h" +#include "ace/Profile_Timer.h" +#include "ace/Get_Opt.h" +#include "ace/Signal.h" +#include "ace/Log_Msg.h" +#include "IO_Test.h" + +ACE_RCSID(IO_tests, test_io, "$Id$") + +#if !defined(_WIN32) + +// Name of program. +static const ACE_TCHAR *program_name; + +// Name of default input file. +static const ACE_TCHAR *input_filename = ACE_TEXT ("/usr/dict/words"); + +// Name of default output file. +static const ACE_TCHAR *output_filename = ACE_TEXT ("/tmp/foo"); + +// Check if removing output file upon completion... +static int remove_output = 1; + +// Count of the number of iterations to run the tests. +static int iteration_count = 100; + +// Profiler used to keep track of file I/O time. +static ACE_Profile_Timer profile_timer; + +// Explain usage and exit. + +static void +print_usage_and_die (void) +{ + ACE_OS::fprintf (stderr, "usage: %s" + " [-i input_file] [-o output_file] [-n iteration_count] [-r]\n", + ACE_TEXT_ALWAYS_CHAR (program_name)); + ACE_OS::exit (1); +} + +// Clean up the output file on exit from a signal. + +extern "C" void +cleanup (int = 0) +{ + if (remove_output) + ACE_OS::unlink (output_filename); + ACE_OS::exit (0); +} + +// Parse the command-line arguments and set options. + +static void +parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("i:n:o:r")); + + for (int c; ((c = get_opt ()) != -1); ) + switch (c) + { + case 'i': + input_filename = get_opt.opt_arg (); + break; + case 'n': + iteration_count = ACE_OS::atoi (get_opt.opt_arg ()); + break; + case 'o': + output_filename = get_opt.opt_arg (); + break; + case 'r': + remove_output = 0; + break; + default: + print_usage_and_die (); + break; + } +} + +// Vector of pointers to derived classes that inherit from IO_Test +// base class. + +static IO_Test *test_vector[100]; + +static int +run_tests (int iterations, FILE *input_fp, FILE *output_fp) +{ + int i = 0; + + ACE_NEW_RETURN (test_vector[i], + Stdio_Test ("Stdio_Test", + profile_timer), + -1); + i++; + ACE_NEW_RETURN (test_vector[i], + Block_Fread_Fwrite_Test ("Block_Fread_Fwrite_Test", + profile_timer), + -1); + i++; + ACE_NEW_RETURN (test_vector[i], + Block_Read_Write_Test ("Block_Read_Write_Test", + profile_timer), + -1); + i++; + ACE_NEW_RETURN (test_vector[i], + Mmap1_Test ("Mmap1_Test", + profile_timer), + -1); + i++; + ACE_NEW_RETURN (test_vector[i], + Mmap2_Test ("Mmap2_Test", + profile_timer), + -1); + i++; + ACE_NEW_RETURN (test_vector[i], + Slow_Read_Write_Test ("Slow_Read_Write_Test", + profile_timer), + -1); + i++; + + test_vector[i] = (IO_Test *) 0; + + for (i = 0; test_vector[i] != 0; i++) + { + ACE_HANDLE hfile = fileno (output_fp); + if (ACE_OS::ftruncate (hfile, 0) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%s\n"), + ACE_TEXT ("ftruncate")), + -1); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("--------------------\n") + ACE_TEXT ("starting %C for %d iterations(s):\n"), + test_vector[i]->name (), + iterations)); + + test_vector[i]->run_test (iterations, + input_fp, + output_fp); + + ACE_Profile_Timer::ACE_Elapsed_Time et; + profile_timer.elapsed_time (et); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("wallclock time = %f, user time = %f, system time = %f\n"), + et.real_time, + et.user_time, + et.system_time)); + + delete test_vector[i]; + } + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("--------------------\n"))); + return 0; +} + +int +main (int argc, ACE_TCHAR *argv[]) +{ + program_name = ACE::basename (argv[0], + ACE_DIRECTORY_SEPARATOR_CHAR); + parse_args (argc, argv); + + ACE_Sig_Action sa ((ACE_SignalHandler) cleanup, SIGINT); + ACE_UNUSED_ARG (sa); + + FILE *input_fp = + ACE_OS::fopen (input_filename, ACE_TEXT ("r")); + FILE *output_fp = + ACE_OS::fopen (output_filename, ACE_TEXT ("w+")); + + if (input_fp == 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + input_filename), + -1); + + if (output_fp == 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + output_filename), + -1); + + ACE_OS::unlink (output_filename); + + if (run_tests (iteration_count, + input_fp, + output_fp) == -1) + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("run_tests")), + -1); + + if (ACE_OS::fclose (input_fp) == -1 + || ACE_OS::fclose (output_fp) == -1) + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("fclose")), + -1); + cleanup (); + return 0; +} +#else +int ACE_TMAIN (int, ACE_TCHAR*[]) { + // not supported on win32 + return 0; +} +#endif |