📄 t-locale.cc
字号:
/* Test locale support in C++ functions, or attempt to do so.Copyright 2001, 2004 Free Software Foundation, Inc.This file is part of the GNU MP Library.The GNU MP Library is free software; you can redistribute it and/or modifyit under the terms of the GNU Lesser General Public License as published bythe Free Software Foundation; either version 2.1 of the License, or (at youroption) any later version.The GNU MP Library is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General PublicLicense for more details.You should have received a copy of the GNU Lesser General Public Licensealong with the GNU MP Library; see the file COPYING.LIB. If not, write tothe Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,MA 02111-1307, USA. */#include "config.h"#include <strstream>#include <stdio.h>#include <stdlib.h>#include <string.h>#if HAVE_LOCALE_H#include <locale.h> /* for lconv */#endif#include "gmp.h"#include "gmp-impl.h"#include "tests.h"using namespace std;#if HAVE_LOCALECONVchar *decimal_point;/* Replace the libc localeconv with one we can manipulate. */struct lconv *localeconv (void){ static struct lconv l; l.decimal_point = decimal_point; return &l;}voidcheck_input (void){ static char *point[] = { ".", ",", "xy", "xyz", "xyz***" }; static const struct { const char *str; double d; } data[] = { { "1%s", 1.0 }, { "1%s0", 1.0 }, { "1%s00", 1.0 }, { "%s5", 0.5 }, { "0%s5", 0.5 }, { "00%s5", 0.5 }, { "00%s50", 0.5 }, { "1%s5", 1.5 }, { "1%s5e1", 15.0 }, }; mpf_t f; double d; mpf_init (f); for (size_t i = 0; i < numberof (point); i++) { decimal_point = point[i]; for (int neg = 0; neg <= 1; neg++) { for (size_t j = 0; j < numberof (data); j++) { char str[128]; strcpy (str, neg ? "-" : ""); sprintf (str+strlen(str), data[j].str, decimal_point); mpf_set_d (f, 123.0); istrstream i (str); if (! (i >> f)) { printf ("operator>> input error\n"); printf (" point %s\n", decimal_point); printf (" str %s\n", str); abort (); } d = data[j].d; if (neg) d = -d; if (mpf_cmp_d (f, d) != 0) { printf ("operator>> wrong result\n"); printf (" point %s\n", decimal_point); printf (" str %s\n", str); mpf_trace (" f", f); printf (" d=%g\n", d); abort (); } } } } mpf_clear (f);}intmain (void){ tests_start (); { mpf_t f; mpf_init (f); decimal_point = ","; mpf_set_d (f, 1.5); ostrstream got; got << f << '\0'; mpf_clear (f); if (strcmp (got.str(), "1,5") != 0) { printf ("Test skipped, replacing localeconv doesn't work\n"); goto done; } } check_input (); done: tests_end (); exit (0);}#elseintmain (void){ printf ("Test skipped, no locale support\n"); exit (0);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -