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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_ncbi_limits.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:09:45  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_ncbi_limits.cpp,v 1000.2 2004/06/01 19:09:45 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.  * Author:  Denis Vakatov
  34.  *
  35.  */
  36. #include <ncbi_pch.hpp>
  37. #include <corelib/ncbi_limits.hpp>
  38. #include <test/test_assert.h>  /* This header must go last */
  39. USING_NCBI_SCOPE;
  40. template <class T>
  41. void s_TestType(const char* type_name, T value)
  42. {
  43.     T minval = numeric_limits<T>::min(), maxval = numeric_limits<T>::max();
  44.     LOG_POST("--------------");
  45.     LOG_POST(type_name << ":  "
  46.              << minval << " <= " << value  << " <= " << maxval);
  47.     assert(minval <= value);
  48.     assert(maxval >= value);
  49.     assert(minval < maxval);
  50.     if (value != (T) (int) value)
  51.         return;
  52.     T min_minus_1 = minval - (T) 1;
  53.     LOG_POST(type_name << ":  "
  54.              << minval << " <= " << min_minus_1  << " <= " << maxval);
  55.     assert(minval <= min_minus_1);
  56.     assert(maxval >= min_minus_1);
  57.     T max_plus_1 = maxval + (T) 1;
  58.     LOG_POST(type_name << ":  "
  59.              << minval << " <= " << max_plus_1  << " <= " << maxval);
  60.     assert(minval <= max_plus_1);
  61.     assert(maxval >= max_plus_1);
  62. T v_max = get_limits(value).max();
  63. T v_min = get_limits(value).min();
  64.     assert(v_min <= min_minus_1);
  65.     assert(v_max >= min_minus_1);
  66.     assert(v_min <= max_plus_1);
  67.     assert(v_max >= max_plus_1);
  68. }
  69. #define TEST_TYPE(type_name, value) 
  70.   { s_TestType(#type_name, (type_name) value); }
  71. static void s_Test(void)
  72. {
  73.     TEST_TYPE(         char,   'a');
  74.     TEST_TYPE(signed   char,   'a');
  75.     TEST_TYPE(unsigned char,   'a');
  76.     TEST_TYPE(signed   short,  -555);
  77.     TEST_TYPE(unsigned short,  555);
  78.     TEST_TYPE(signed   int,    -555);
  79.     TEST_TYPE(unsigned int,    555);
  80.     TEST_TYPE(signed   long,   -555);
  81.     TEST_TYPE(unsigned long,   555);
  82.     TEST_TYPE(float,   55.5);
  83.     TEST_TYPE(double,  5.55);
  84. #if (SIZEOF_LONG_LONG > 0) 
  85.     && (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG))
  86.     TEST_TYPE(signed   long long,   -555);
  87.     TEST_TYPE(unsigned long long,   555);
  88. #endif
  89. #if (SIZEOF___INT64 == 8)
  90.     // This does not work as there is no "ostream::operator<<(const __int64&)"
  91.     //    TEST_TYPE(signed   __int64, -555);
  92.     //    TEST_TYPE(unsigned __int64, 555);
  93. #endif
  94. }
  95. /////////////////////////////////////////////////////////////////////////////
  96. //  MAIN
  97. int main()
  98. {
  99.     // Set err.-posting and tracing to maximum
  100.     SetDiagTrace(eDT_Enable);
  101.     SetDiagPostFlag(eDPF_All);
  102.     SetDiagPostLevel(eDiag_Info);
  103.     // Run tests
  104.     try {
  105.         s_Test();
  106.     } catch (exception& e) {
  107.         ERR_POST(Fatal << e.what());
  108.     }
  109. unsigned char c = 10;
  110. unsigned char c_max = get_limits(c).max();
  111.     // Success
  112.     return 0;
  113. }
  114. /*
  115.  * ===========================================================================
  116.  * $Log: test_ncbi_limits.cpp,v $
  117.  * Revision 1000.2  2004/06/01 19:09:45  gouriano
  118.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.7
  119.  *
  120.  * Revision 6.7  2004/06/01 14:12:33  kuznets
  121.  * Fixed compilation (GCC)
  122.  *
  123.  * Revision 6.6  2004/06/01 12:10:35  kuznets
  124.  * + test for get_limits
  125.  *
  126.  * Revision 6.5  2004/05/14 13:59:51  gorelenk
  127.  * Added include of ncbi_pch.hpp
  128.  *
  129.  * Revision 6.4  2004/02/10 16:31:45  ucko
  130.  * s_TestType: store the result of min() and max() in locals to work
  131.  * around a platform-dependent GCC 2.95 bug.
  132.  *
  133.  * Revision 6.3  2002/04/16 18:49:07  ivanov
  134.  * Centralize threatment of assert() in tests.
  135.  * Added #include <test/test_assert.h>. CVS log moved to end of file.
  136.  *
  137.  * Revision 6.2  2001/09/19 17:55:17  ucko
  138.  * Fix GCC 3 build.
  139.  *
  140.  * Revision 6.1  2001/01/03 17:40:31  vakatov
  141.  * Initial revision
  142.  *
  143.  * ===========================================================================
  144.  */