⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 num_facets_test.cpp

📁 stl的源码
💻 CPP
字号:
#include "locale_test.h"#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)#  include <locale>#  include <sstream>#  include <stdexcept>#  include "complete_digits.h"#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)using namespace std;#  endifstruct ref_locale {  const char *name;  const char *decimal_point;  const char *thousands_sep;};static const ref_locale tested_locales[] = {//{  name,         decimal_point, thousands_sepy_thousands_sep},#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)  { "fr_FR",       ",",           "\xa0"},  { "ru_RU.koi8r", ",",           "."},  { "en_GB",       ".",           ","},  { "en_US",       ".",           ","},#  endif  { "C",           ".",           ","},};//// tests implementation//void LocaleTest::_num_put_get( const locale& loc, const ref_locale* prl ) {  const ref_locale& rl = *prl;  CPPUNIT_ASSERT( has_facet<numpunct<char> >(loc) );  numpunct<char> const& npct = use_facet<numpunct<char> >(loc);  CPPUNIT_ASSERT( npct.decimal_point() == *rl.decimal_point );  float val = 1234.56f;  ostringstream fostr;  fostr.imbue(loc);  fostr << val;  string ref = "1";  if (!npct.grouping().empty()) {    ref += npct.thousands_sep();  }  ref += "234";  ref += npct.decimal_point();  ref += "56";  //cout << "In " << loc.name() << " 1234.56 is written: " << fostr.str() << endl;  CPPUNIT_ASSERT( fostr.str() == ref );  val = 12345678.9f;  ref = "1";  ref += npct.decimal_point();  ref += "23457e+";  string digits = "7";  complete_digits(digits);  ref += digits;  fostr.str("");  fostr << val;  CPPUNIT_ASSERT( fostr.str() == ref );  val = 1000000000.0f;  fostr.str("");  fostr << val;  digits = "9";  complete_digits(digits);  CPPUNIT_ASSERT( fostr.str() == string("1e+") + digits );  val = 1234.0f;  ref = "1";  if (!npct.grouping().empty()) {    ref += npct.thousands_sep();  }  ref += "234";  fostr.str("");  fostr << val;  CPPUNIT_ASSERT( fostr.str() == ref );  val = 10000001.0f;  fostr.str("");  fostr << val;  digits = "7";  complete_digits(digits);  CPPUNIT_ASSERT( fostr.str() == string("1e+") + digits );  if (npct.grouping().size() == 1 && npct.grouping()[0] == 3) {    int ival = 1234567890;    fostr.str("");    fostr << ival;    ref = "1";    ref += npct.thousands_sep();    ref += "234";    ref += npct.thousands_sep();    ref += "567";    ref += npct.thousands_sep();    ref += "890";    CPPUNIT_ASSERT( fostr.str() == ref );  }#if defined (__BORLANDC__)  num_put<char> const& nput = use_facet<num_put<char> >(loc);  typedef numeric_limits<double> limd;  fostr.setf(ios_base::uppercase | ios_base::showpos);  if (limd::has_infinity) {    double infinity = limd::infinity();    fostr.str("");    nput.put(fostr, fostr, ' ', infinity);    CPPUNIT_ASSERT( fostr.str() == string("+Inf") );  }  if (limd::has_quiet_NaN) {    /* Ignore FPU exceptions */    unsigned int _float_control_word = _control87(0, 0);    _control87(EM_INVALID|EM_INEXACT, MCW_EM);    double qnan = limd::quiet_NaN();    /* Reset floating point control word */    _clear87();    _control87(_float_control_word, MCW_EM);    fostr.str("");    nput.put(fostr, fostr, ' ', qnan);    CPPUNIT_ASSERT( fostr.str() == string("+NaN") );  }#endif}typedef void (LocaleTest::*_Test) (const locale&, const ref_locale*);static void test_supported_locale(LocaleTest& inst, _Test __test) {  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);  for (size_t i = 0; i < n; ++i) {    locale loc;#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)    try#  endif    {      locale tmp(tested_locales[i].name);      loc = tmp;    }#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)    catch (runtime_error const&) {      //This locale is not supported.      continue;    }#  endif    CPPUNIT_MESSAGE( loc.name().c_str() );    (inst.*__test)(loc, tested_locales + i);    {      locale tmp(locale::classic(), tested_locales[i].name, locale::numeric);      loc = tmp;    }    (inst.*__test)(loc, tested_locales + i);    {      locale tmp(locale::classic(), new numpunct_byname<char>(tested_locales[i].name));      loc = tmp;    }    (inst.*__test)(loc, tested_locales + i);  }}void LocaleTest::num_put_get(){ test_supported_locale(*this, &LocaleTest::_num_put_get); }void LocaleTest::numpunct_by_name(){  /*   * Check of the 22.1.1.2.7 standard point. Construction of a locale   * instance from a null pointer or an unknown name should result in   * a runtime_error exception.   */#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)#    if defined (STLPORT) || !defined (__GNUC__)  try {    locale loc(locale::classic(), new numpunct_byname<char>(static_cast<char const*>(0)));    CPPUNIT_FAIL;  }  catch (runtime_error const& /* e */) {    //CPPUNIT_MESSAGE( e.what() );  }  catch (...) {    CPPUNIT_FAIL;  }#    endif  try {    locale loc(locale::classic(), new numpunct_byname<char>("yasli_language"));    CPPUNIT_FAIL;  }  catch (runtime_error const& /* e */) {    //CPPUNIT_MESSAGE( e.what() );  }  catch (...) {    CPPUNIT_FAIL;  }  try {    string veryLongFacetName("LC_NUMERIC=");    veryLongFacetName.append(512, '?');    locale loc(locale::classic(), new numpunct_byname<char>(veryLongFacetName.c_str()));    CPPUNIT_FAIL;  }  catch (runtime_error const& /* e */) {    //CPPUNIT_MESSAGE( e.what() );  }  catch (...) {    CPPUNIT_FAIL;  }  try {    locale loc(locale::classic(), "C", locale::numeric);  }  catch (runtime_error const& e) {    CPPUNIT_MESSAGE( e.what() );    CPPUNIT_FAIL;  }  catch (...) {    CPPUNIT_FAIL;  }  try {    // On platform without real localization support we should rely on the "C" facet.    locale loc(locale::classic(), "", locale::numeric);  }  catch (runtime_error const& e) {    CPPUNIT_MESSAGE( e.what() );    CPPUNIT_FAIL;  }  catch (...) {    CPPUNIT_FAIL;  }  try {    locale loc(locale::classic(), new numpunct_byname<char>("C"));    numpunct<char> const& cfacet_byname = use_facet<numpunct<char> >(loc);    numpunct<char> const& cfacet = use_facet<numpunct<char> >(locale::classic());    CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );    CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );    if (!cfacet.grouping().empty())      CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );#    if !defined (STLPORT) || !defined (__GLIBC__)    CPPUNIT_CHECK( cfacet_byname.truename() == cfacet.truename() );    CPPUNIT_CHECK( cfacet_byname.falsename() == cfacet.falsename() );#    endif  }  catch (runtime_error const& /* e */) {    //CPPUNIT_MESSAGE( e.what() );    CPPUNIT_FAIL;  }  catch (...) {    CPPUNIT_FAIL;  }  try {    // On platform without real localization support we should rely on the "C" locale facet.    locale loc(locale::classic(), new numpunct_byname<char>(""));  }  catch (runtime_error const& e) {    CPPUNIT_MESSAGE( e.what() );    CPPUNIT_FAIL;  }  catch (...) {    CPPUNIT_FAIL;  }#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)#      if defined (STLPORT) || !defined (__GNUC__)  try {    locale loc(locale::classic(), new numpunct_byname<wchar_t>(static_cast<char const*>(0)));    CPPUNIT_FAIL;  }  catch (runtime_error const&) {  }  catch (...) {    CPPUNIT_FAIL;  }#      endif  try {    locale loc(locale::classic(), new numpunct_byname<wchar_t>("yasli_language"));    CPPUNIT_FAIL;  }  catch (runtime_error const&) {  }  catch (...) {    CPPUNIT_FAIL;  }#    endif#  endif}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -