test_ncbi_system.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_ncbi_system.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:09:51  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_ncbi_system.cpp,v 1000.1 2004/06/01 19:09:51 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Vladimir Ivanov
  35.  *
  36.  * File Description:
  37.  *      System functions
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/ncbiapp.hpp>
  42. #include <corelib/ncbienv.hpp>
  43. #include <corelib/ncbiargs.hpp>
  44. #include <corelib/ncbi_system.hpp>
  45. #include <memory>
  46. #include <test/test_assert.h>  /* This header must go last */
  47. USING_NCBI_SCOPE;
  48. /////////////////////////////////
  49. // General tests
  50. //
  51. static void Test_General(void)
  52. {
  53.     LOG_POST("nGeneral testsn");
  54.     // Number of processors
  55.     cout << "Number of processors: " << GetCpuCount() << endl;
  56. }
  57. /////////////////////////////////
  58. // User defined dump print handler
  59. //
  60. int s_PrintParameter = 0;
  61. static void PrintHandler (ELimitsExitCode code, size_t limit, CTime& time, 
  62.                    TLimitsPrintParameter param) 
  63. {
  64.     cout << "Type          : " << 
  65.         (code == eLEC_Memory ? "Memory limit" : "CPU limit") << endl;
  66.     cout << "Limit value   : " << limit << endl;
  67.     cout << "Set time      : " << time.AsString() << endl;
  68.     cout << "Our parameter : " << (param ? *(int*)param : 0) << endl;
  69. }
  70. /////////////////////////////////
  71. // Memory limits
  72. //
  73. static void Test_MemLimit(void)
  74. {
  75.     LOG_POST("nHeap limit testn");
  76.     const size_t kHeapLimit = 100000;
  77.     assert( SetHeapLimit(kHeapLimit, PrintHandler, &s_PrintParameter) );
  78.     
  79.     for (size_t i = 0;  i <= kHeapLimit/10;  i++) {
  80.         s_PrintParameter++;
  81.         int* pi = new int[10];
  82.         assert(pi);
  83.     }
  84. }
  85. /////////////////////////////////
  86. // CPU time limits
  87. //
  88. static void Test_CpuLimit(void)
  89. {
  90.     LOG_POST("nCPU time limit testn");
  91.     assert( SetCpuTimeLimit(2) );
  92.     for (;;) {
  93.         continue;
  94.     }
  95. }
  96. /////////////////////////////////
  97. // Test application
  98. //
  99. class CTestApplication : public CNcbiApplication
  100. {
  101. public:
  102.     virtual void Init(void);
  103.     virtual int  Run (void);
  104. };
  105. void CTestApplication::Init(void)
  106. {
  107.     // Set error posting and tracing on maximum
  108.     SetDiagTrace(eDT_Enable);
  109.     SetDiagPostFlag(eDPF_All);
  110.     SetDiagPostLevel(eDiag_Info);
  111.     // Create command-line argument descriptions class
  112.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  113.     // Specify USAGE context
  114.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  115.                               "Test some system-specific functions");
  116.     // Describe the expected command-line arguments
  117.     arg_desc->AddPositional
  118.         ("feature",
  119.          "Platform-specific feature to test",
  120.          CArgDescriptions::eString);
  121.     arg_desc->SetConstraint
  122.         ("feature", &(*new CArgAllow_Strings, "general", "mem", "cpu"));
  123.     // Setup arg.descriptions for this application
  124.     SetupArgDescriptions(arg_desc.release());
  125. }
  126. int CTestApplication::Run(void)
  127. {
  128.     CArgs args = GetArgs();
  129.     // Specific tests
  130.     if (args["feature"].AsString() == "general") {
  131.         Test_General();
  132.     }
  133.     else if (args["feature"].AsString() == "mem") {
  134.         Test_MemLimit();
  135.     }
  136.     else if (args["feature"].AsString() == "cpu") {
  137.         Test_CpuLimit();
  138.     }
  139.     else {
  140.         _TROUBLE;
  141.     }
  142.     return 0;
  143. }
  144.   
  145. ///////////////////////////////////
  146. // APPLICATION OBJECT  and  MAIN
  147. //
  148. static CTestApplication theTestApplication;
  149. int main(int argc, const char* argv[])
  150. {
  151.     // Execute main application function
  152.     return theTestApplication.AppMain(argc, argv, 0, eDS_Default, 0);
  153. }
  154. /*
  155.  * ===========================================================================
  156.  * $Log: test_ncbi_system.cpp,v $
  157.  * Revision 1000.1  2004/06/01 19:09:51  gouriano
  158.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.9
  159.  *
  160.  * Revision 6.9  2004/05/14 13:59:51  gorelenk
  161.  * Added include of ncbi_pch.hpp
  162.  *
  163.  * Revision 6.8  2003/09/25 16:56:07  ivanov
  164.  * Test for PID guard moved to test_ncbi_process.cpp
  165.  *
  166.  * Revision 6.7  2003/08/12 17:25:14  ucko
  167.  * Test the new PID-file support.
  168.  *
  169.  * Revision 6.6  2002/04/16 18:49:07  ivanov
  170.  * Centralize threatment of assert() in tests.
  171.  * Added #include <test/test_assert.h>. CVS log moved to end of file.
  172.  *
  173.  * Revision 6.5  2001/11/08 21:31:45  ivanov
  174.  * Renamed GetCPUNumber() -> GetCpuCount()
  175.  *
  176.  * Revision 6.4  2001/11/08 21:10:59  ivanov
  177.  * Added test for GetCPUNumber()
  178.  *
  179.  * Revision 6.3  2001/07/23 15:24:06  ivanov
  180.  * Fixed bug in Get/Set times in DB-format (1 day difference)
  181.  *
  182.  * Revision 6.2  2001/07/02 21:33:09  vakatov
  183.  * Fixed against SIGXCPU during the signal handling.
  184.  * Increase the amount of reserved memory for the memory limit handler
  185.  * to 10K (to fix for the 64-bit WorkShop compiler).
  186.  * Use standard C++ arg.processing (ncbiargs) in the test suite.
  187.  * Cleaned up the code. Get rid of the "Ncbi_" prefix.
  188.  *
  189.  * Revision 6.1  2001/07/02 16:43:43  ivanov
  190.  * Initialization
  191.  *
  192.  * ===========================================================================
  193.  */