diff options
author | Jeffrey Yasskin <jyasskin@google.com> | 2012-03-10 18:31:43 +0000 |
---|---|---|
committer | Jeffrey Yasskin <jyasskin@google.com> | 2012-03-10 18:31:43 +0000 |
commit | 9c95b19f9e322d7a1abb843a29305e7dc7318fdf (patch) | |
tree | 114ede72f7eeb1fc91ba1322add43fa04357d0b4 /libcxx | |
parent | fca65102a2ef14ebf2f34389c9e72781937b0a6e (diff) | |
download | bcm5719-llvm-9c95b19f9e322d7a1abb843a29305e7dc7318fdf.tar.gz bcm5719-llvm-9c95b19f9e322d7a1abb843a29305e7dc7318fdf.zip |
Fix moneypunct_byname algorithm to more accurately represent C locales in C++.
llvm-svn: 152501
Diffstat (limited to 'libcxx')
8 files changed, 412 insertions, 222 deletions
diff --git a/libcxx/include/locale b/libcxx/include/locale index f6d3860798c..bec27f6d9eb 100644 --- a/libcxx/include/locale +++ b/libcxx/include/locale @@ -3060,6 +3060,9 @@ money_get<_CharT, _InputIterator>::__do_get(iter_type& __b, iter_type __e, string_type __sym; string_type __psn; string_type __nsn; + // Capture the spaces read into money_base::{space,none} so they + // can be compared to initial spaces in __sym. + string_type __spaces; int __fd; __money_get<_CharT>::__gather_info(__intl, __loc, __pat, __dp, __ts, __grp, __sym, __psn, __nsn, __fd); @@ -3073,7 +3076,7 @@ money_get<_CharT, _InputIterator>::__do_get(iter_type& __b, iter_type __e, if (__p != 3) { if (__ct.is(ctype_base::space, *__b)) - ++__b; + __spaces.push_back(*__b++); else { __err |= ios_base::failbit; @@ -3085,7 +3088,7 @@ money_get<_CharT, _InputIterator>::__do_get(iter_type& __b, iter_type __e, if (__p != 3) { while (__b != __e && __ct.is(ctype_base::space, *__b)) - ++__b; + __spaces.push_back(*__b++); } break; case money_base::sign: @@ -3144,9 +3147,31 @@ money_get<_CharT, _InputIterator>::__do_get(iter_type& __b, iter_type __e, if (__sb || __more_needed) { ios_base::iostate __et = ios_base::goodbit; - string_type* __k = __scan_keyword(__b, __e, &__sym, &__sym+1, - __ct, __et); - if (__sb && __k != &__sym) + typename string_type::const_iterator __sym_space_end = __sym.begin(); + if (__p > 0 && (__pat.field[__p - 1] == money_base::none || + __pat.field[__p - 1] == money_base::space)) { + // Match spaces we've already read against spaces at + // the beginning of __sym. + while (__sym_space_end != __sym.end() && + __ct.is(ctype_base::space, *__sym_space_end)) + ++__sym_space_end; + const size_t __num_spaces = __sym_space_end - __sym.begin(); + if (__num_spaces > __spaces.size() || + !equal(__spaces.end() - __num_spaces, __spaces.end(), + __sym.begin())) { + // No match. Put __sym_space_end back at the + // beginning of __sym, which will prevent a + // match in the next loop. + __sym_space_end = __sym.begin(); + } + } + typename string_type::const_iterator __sym_curr_char = __sym_space_end; + while (__sym_curr_char != __sym.end() && __b != __e && + *__b == *__sym_curr_char) { + ++__b; + ++__sym_curr_char; + } + if (__sb && __sym_curr_char != __sym.end()) { __err |= ios_base::failbit; return false; diff --git a/libcxx/src/locale.cpp b/libcxx/src/locale.cpp index 5c4215aae1c..fe994881d46 100644 --- a/libcxx/src/locale.cpp +++ b/libcxx/src/locale.cpp @@ -5275,116 +5275,200 @@ __time_put::__do_put(wchar_t* __wb, wchar_t*& __we, const tm* __tm, // moneypunct_byname +template <class charT> static void -__init_pat(money_base::pattern& pat, char cs_precedes, char sep_by_space, char sign_posn) +__init_pat(money_base::pattern& pat, basic_string<charT>& __curr_symbol_, + bool intl, char cs_precedes, char sep_by_space, char sign_posn, + charT space_char) { const char sign = static_cast<char>(money_base::sign); const char space = static_cast<char>(money_base::space); const char none = static_cast<char>(money_base::none); const char symbol = static_cast<char>(money_base::symbol); const char value = static_cast<char>(money_base::value); + const bool symbol_contains_sep = intl && __curr_symbol_.size() == 4; + + // Comments on case branches reflect 'C11 7.11.2.1 The localeconv + // function'. "Space between sign and symbol or value" means that + // if the sign is adjacent to the symbol, there's a space between + // them, and otherwise there's a space between the sign and value. + // + // C11's localeconv specifies that the fourth character of an + // international curr_symbol is used to separate the sign and + // value when sep_by_space says to do so. C++ can't represent + // that, so we just use a space. When sep_by_space says to + // separate the symbol and value-or-sign with a space, we rearrange the + // curr_symbol to put its spacing character on the correct side of + // the symbol. + // + // We also need to avoid adding an extra space between the sign + // and value when the currency symbol is suppressed (by not + // setting showbase). We match glibc's strfmon by interpreting + // sep_by_space==1 as "omit the space when the currency symbol is + // absent". + // + // Users who want to get this right should use ICU instead. + switch (cs_precedes) { - case 0: + case 0: // value before curr_symbol + if (symbol_contains_sep) { + // Move the separator to before the symbol, to place it + // between the value and symbol. + rotate(__curr_symbol_.begin(), __curr_symbol_.begin() + 3, + __curr_symbol_.end()); + } switch (sign_posn) { - case 0: + case 0: // Parentheses surround the quantity and currency symbol. pat.field[0] = sign; pat.field[1] = value; + pat.field[2] = none; // Any space appears in the symbol. pat.field[3] = symbol; switch (sep_by_space) { - case 0: - pat.field[2] = none; + case 0: // No space separates the currency symbol and value. + // This case may have changed between C99 and C11; + // assume the currency symbol matches the intention. + case 2: // Space between sign and currency or value. + // The "sign" is two parentheses, so no space here either. return; - case 1: - case 2: - pat.field[2] = space; + case 1: // Space between currency-and-sign or currency and value. + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[2]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.insert(0, 1, space_char); + } return; default: break; } break; - case 1: + case 1: // The sign string precedes the quantity and currency symbol. pat.field[0] = sign; pat.field[3] = symbol; switch (sep_by_space) { - case 0: + case 0: // No space separates the currency symbol and value. pat.field[1] = value; pat.field[2] = none; return; - case 1: + case 1: // Space between currency-and-sign or currency and value. pat.field[1] = value; - pat.field[2] = space; + pat.field[2] = none; + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[2]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.insert(0, 1, space_char); + } return; - case 2: + case 2: // Space between sign and currency or value. pat.field[1] = space; pat.field[2] = value; + if (symbol_contains_sep) { + // Remove the separator from the symbol, since it + // has already appeared after the sign. + __curr_symbol_.erase(__curr_symbol_.begin()); + } return; default: break; } break; - case 2: + case 2: // The sign string succeeds the quantity and currency symbol. pat.field[0] = value; pat.field[3] = sign; switch (sep_by_space) { - case 0: + case 0: // No space separates the currency symbol and value. pat.field[1] = none; pat.field[2] = symbol; return; - case 1: - pat.field[1] = space; + case 1: // Space between currency-and-sign or currency and value. + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[1]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.insert(0, 1, space_char); + } + pat.field[1] = none; pat.field[2] = symbol; return; - case 2: + case 2: // Space between sign and currency or value. pat.field[1] = symbol; pat.field[2] = space; + if (symbol_contains_sep) { + // Remove the separator from the symbol, since it + // should not be removed if showbase is absent. + __curr_symbol_.erase(__curr_symbol_.begin()); + } return; default: break; } break; - case 3: + case 3: // The sign string immediately precedes the currency symbol. pat.field[0] = value; pat.field[3] = symbol; switch (sep_by_space) { - case 0: + case 0: // No space separates the currency symbol and value. pat.field[1] = none; pat.field[2] = sign; return; - case 1: + case 1: // Space between currency-and-sign or currency and value. pat.field[1] = space; pat.field[2] = sign; + if (symbol_contains_sep) { + // Remove the separator from the symbol, since it + // has already appeared before the sign. + __curr_symbol_.erase(__curr_symbol_.begin()); + } return; - case 2: + case 2: // Space between sign and currency or value. pat.field[1] = sign; - pat.field[2] = space; + pat.field[2] = none; + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[2]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.insert(0, 1, space_char); + } return; default: break; } break; - case 4: + case 4: // The sign string immediately succeeds the currency symbol. pat.field[0] = value; pat.field[3] = sign; switch (sep_by_space) { - case 0: + case 0: // No space separates the currency symbol and value. pat.field[1] = none; pat.field[2] = symbol; return; - case 1: - pat.field[1] = space; + case 1: // Space between currency-and-sign or currency and value. + pat.field[1] = none; pat.field[2] = symbol; + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[1]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.insert(0, 1, space_char); + } return; - case 2: + case 2: // Space between sign and currency or value. pat.field[1] = symbol; pat.field[2] = space; + if (symbol_contains_sep) { + // Remove the separator from the symbol, since it + // should not disappear when showbase is absent. + __curr_symbol_.erase(__curr_symbol_.begin()); + } return; default: break; @@ -5394,105 +5478,157 @@ __init_pat(money_base::pattern& pat, char cs_precedes, char sep_by_space, char s break; } break; - case 1: + case 1: // curr_symbol before value switch (sign_posn) { - case 0: + case 0: // Parentheses surround the quantity and currency symbol. pat.field[0] = sign; pat.field[1] = symbol; + pat.field[2] = none; // Any space appears in the symbol. pat.field[3] = value; switch (sep_by_space) { - case 0: - pat.field[2] = none; + case 0: // No space separates the currency symbol and value. + // This case may have changed between C99 and C11; + // assume the currency symbol matches the intention. + case 2: // Space between sign and currency or value. + // The "sign" is two parentheses, so no space here either. return; - case 1: - case 2: - pat.field[2] = space; + case 1: // Space between currency-and-sign or currency and value. + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[2]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.insert(0, 1, space_char); + } return; default: break; } break; - case 1: + case 1: // The sign string precedes the quantity and currency symbol. pat.field[0] = sign; pat.field[3] = value; switch (sep_by_space) { - case 0: + case 0: // No space separates the currency symbol and value. pat.field[1] = symbol; pat.field[2] = none; return; - case 1: + case 1: // Space between currency-and-sign or currency and value. pat.field[1] = symbol; - pat.field[2] = space; + pat.field[2] = none; + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[2]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.push_back(space_char); + } return; - case 2: + case 2: // Space between sign and currency or value. pat.field[1] = space; pat.field[2] = symbol; + if (symbol_contains_sep) { + // Remove the separator from the symbol, since it + // has already appeared after the sign. + __curr_symbol_.pop_back(); + } return; default: break; } break; - case 2: + case 2: // The sign string succeeds the quantity and currency symbol. pat.field[0] = symbol; pat.field[3] = sign; switch (sep_by_space) { - case 0: + case 0: // No space separates the currency symbol and value. pat.field[1] = none; pat.field[2] = value; return; - case 1: - pat.field[1] = space; + case 1: // Space between currency-and-sign or currency and value. + pat.field[1] = none; pat.field[2] = value; + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[1]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.push_back(space_char); + } return; - case 2: + case 2: // Space between sign and currency or value. pat.field[1] = value; pat.field[2] = space; + if (symbol_contains_sep) { + // Remove the separator from the symbol, since it + // will appear before the sign. + __curr_symbol_.pop_back(); + } return; default: break; } break; - case 3: + case 3: // The sign string immediately precedes the currency symbol. pat.field[0] = sign; pat.field[3] = value; switch (sep_by_space) { - case 0: + case 0: // No space separates the currency symbol and value. pat.field[1] = symbol; pat.field[2] = none; return; - case 1: + case 1: // Space between currency-and-sign or currency and value. pat.field[1] = symbol; - pat.field[2] = space; + pat.field[2] = none; + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[2]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.push_back(space_char); + } return; - case 2: + case 2: // Space between sign and currency or value. pat.field[1] = space; pat.field[2] = symbol; + if (symbol_contains_sep) { + // Remove the separator from the symbol, since it + // has already appeared after the sign. + __curr_symbol_.pop_back(); + } return; default: break; } break; - case 4: + case 4: // The sign string immediately succeeds the currency symbol. pat.field[0] = symbol; pat.field[3] = value; switch (sep_by_space) { - case 0: + case 0: // No space separates the currency symbol and value. pat.field[1] = sign; pat.field[2] = none; return; - case 1: + case 1: // Space between currency-and-sign or currency and value. pat.field[1] = sign; pat.field[2] = space; + if (symbol_contains_sep) { + // Remove the separator from the symbol, since it + // should not disappear when showbase is absent. + __curr_symbol_.pop_back(); + } return; - case 2: - pat.field[1] = space; + case 2: // Space between sign and currency or value. + pat.field[1] = none; pat.field[2] = sign; + if (!symbol_contains_sep) { + // We insert the space into the symbol instead of + // setting pat.field[1]=space so that when + // showbase is not set, the space goes away too. + __curr_symbol_.push_back(space_char); + } return; default: break; @@ -5549,8 +5685,14 @@ moneypunct_byname<char, false>::init(const char* nm) __negative_sign_ = "()"; else __negative_sign_ = lc->negative_sign; - __init_pat(__pos_format_, lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn); - __init_pat(__neg_format_, lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn); + // Assume the positive and negative formats will want spaces in + // the same places in curr_symbol since there's no way to + // represent anything else. + string_type __dummy_curr_symbol = __curr_symbol_; + __init_pat(__pos_format_, __dummy_curr_symbol, false, + lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn, ' '); + __init_pat(__neg_format_, __curr_symbol_, false, + lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn, ' '); } template<> @@ -5599,12 +5741,22 @@ moneypunct_byname<char, true>::init(const char* nm) __negative_sign_ = "()"; else __negative_sign_ = lc->negative_sign; + // Assume the positive and negative formats will want spaces in + // the same places in curr_symbol since there's no way to + // represent anything else. + string_type __dummy_curr_symbol = __curr_symbol_; #if _WIN32 - __init_pat(__pos_format_, lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn); - __init_pat(__neg_format_, lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn); + __init_pat(__pos_format_, __dummy_curr_symbol, true, + lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn, ' '); + __init_pat(__neg_format_, __curr_symbol_, true, + lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn, ' '); #else - __init_pat(__pos_format_, lc->int_p_cs_precedes, lc->int_p_sep_by_space, lc->int_p_sign_posn); - __init_pat(__neg_format_, lc->int_n_cs_precedes, lc->int_n_sep_by_space, lc->int_n_sign_posn); + __init_pat(__pos_format_, __dummy_curr_symbol, true, + lc->int_p_cs_precedes, lc->int_p_sep_by_space, + lc->int_p_sign_posn, ' '); + __init_pat(__neg_format_, __curr_symbol_, true, + lc->int_n_cs_precedes, lc->int_n_sep_by_space, + lc->int_n_sign_posn, ' '); #endif // _WIN32 } @@ -5681,8 +5833,14 @@ moneypunct_byname<wchar_t, false>::init(const char* nm) wbe = wbuf + j; __negative_sign_.assign(wbuf, wbe); } - __init_pat(__pos_format_, lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn); - __init_pat(__neg_format_, lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn); + // Assume the positive and negative formats will want spaces in + // the same places in curr_symbol since there's no way to + // represent anything else. + string_type __dummy_curr_symbol = __curr_symbol_; + __init_pat(__pos_format_, __dummy_curr_symbol, false, + lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn, L' '); + __init_pat(__neg_format_, __curr_symbol_, false, + lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn, L' '); } template<> @@ -5766,12 +5924,22 @@ moneypunct_byname<wchar_t, true>::init(const char* nm) wbe = wbuf + j; __negative_sign_.assign(wbuf, wbe); } + // Assume the positive and negative formats will want spaces in + // the same places in curr_symbol since there's no way to + // represent anything else. + string_type __dummy_curr_symbol = __curr_symbol_; #if _WIN32 - __init_pat(__pos_format_, lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn); - __init_pat(__neg_format_, lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn); + __init_pat(__pos_format_, __dummy_curr_symbol, true, + lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn, L' '); + __init_pat(__neg_format_, __curr_symbol_, true, + lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn, L' '); #else // _WIN32 - __init_pat(__pos_format_, lc->int_p_cs_precedes, lc->int_p_sep_by_space, lc->int_p_sign_posn); - __init_pat(__neg_format_, lc->int_n_cs_precedes, lc->int_n_sep_by_space, lc->int_n_sign_posn); + __init_pat(__pos_format_, __dummy_curr_symbol, true, + lc->int_p_cs_precedes, lc->int_p_sep_by_space, + lc->int_p_sign_posn, L' '); + __init_pat(__neg_format_, __curr_symbol_, true, + lc->int_n_cs_precedes, lc->int_n_sep_by_space, + lc->int_n_sign_posn, L' '); #endif // _WIN32 } diff --git a/libcxx/test/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp b/libcxx/test/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp index 6da2527e501..469fcdf9f89 100644 --- a/libcxx/test/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp +++ b/libcxx/test/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp @@ -69,7 +69,7 @@ int main() assert(ex == 0); } { // negative one - std::string v = "0,01 -"; + std::string v = "-0,01"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -91,7 +91,7 @@ int main() assert(ex == 123456789); } { // negative - std::string v = "1 234 567,89 -"; + std::string v = "-1 234 567,89"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -102,7 +102,7 @@ int main() assert(ex == -123456789); } { // negative - std::string v = "1234567,89 -"; + std::string v = "-1234567,89"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -113,7 +113,8 @@ int main() assert(ex == -123456789); } { // zero, showbase - std::string v = "0,00 Eu"; + std::string v = "0,00 \u20ac"; // € + showbase(ios); typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -124,7 +125,7 @@ int main() assert(ex == 0); } { // zero, showbase - std::string v = "0,00 Eu"; + std::string v = "0,00 \u20ac"; // € showbase(ios); typedef input_iterator<const char*> I; long double ex; @@ -134,10 +135,9 @@ int main() assert(iter.base() == v.data() + v.size()); assert(err == std::ios_base::eofbit); assert(ex == 0); - noshowbase(ios); } { // negative one, showbase - std::string v = "0,01 Eu-"; + std::string v = "-0,01 \u20ac"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -148,7 +148,7 @@ int main() assert(ex == -1); } { // negative one, showbase - std::string v = "0,01 Eu-"; + std::string v = "-0,01 \u20ac"; showbase(ios); typedef input_iterator<const char*> I; long double ex; @@ -158,10 +158,9 @@ int main() assert(iter.base() == v.data() + v.size()); assert(err == std::ios_base::eofbit); assert(ex == -1); - noshowbase(ios); } { // positive, showbase - std::string v = "1 234 567,89 Eu"; + std::string v = "1 234 567,89 \u20ac"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -172,7 +171,7 @@ int main() assert(ex == 123456789); } { // positive, showbase - std::string v = "1 234 567,89 Eu"; + std::string v = "1 234 567,89 \u20ac"; showbase(ios); typedef input_iterator<const char*> I; long double ex; @@ -185,7 +184,7 @@ int main() noshowbase(ios); } { // negative, showbase - std::string v = "1 234 567,89 Eu-"; + std::string v = "-1 234 567,89 \u20ac"; showbase(ios); typedef input_iterator<const char*> I; long double ex; @@ -205,7 +204,7 @@ int main() std::ios_base::iostate err = std::ios_base::goodbit; I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex); - assert(iter.base() == v.data() + 14); + assert(iter.base() == v.data() + 13); assert(err == std::ios_base::failbit); noshowbase(ios); } @@ -216,10 +215,11 @@ int main() std::ios_base::iostate err = std::ios_base::goodbit; I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex); - assert(iter.base() == v.data() + 14); + assert(iter.base() == v.data() + 13); assert(err == std::ios_base::goodbit); assert(ex == 123456789); } + noshowbase(ios); } { const my_facet f(1); @@ -236,7 +236,7 @@ int main() assert(ex == 0); } { // negative one - std::string v = "0,01 -"; + std::string v = "-0,01"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -258,7 +258,7 @@ int main() assert(ex == 123456789); } { // negative - std::string v = "1 234 567,89 -"; + std::string v = "-1 234 567,89"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -269,7 +269,7 @@ int main() assert(ex == -123456789); } { // negative - std::string v = "1234567,89 -"; + std::string v = "-1234567,89"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -280,7 +280,8 @@ int main() assert(ex == -123456789); } { // zero, showbase - std::string v = "0,00 EUR "; + std::string v = "0,00 EUR"; + showbase(ios); typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -291,7 +292,7 @@ int main() assert(ex == 0); } { // zero, showbase - std::string v = "0,00 EUR "; + std::string v = "0,00 EUR"; showbase(ios); typedef input_iterator<const char*> I; long double ex; @@ -301,10 +302,9 @@ int main() assert(iter.base() == v.data() + v.size()); assert(err == std::ios_base::eofbit); assert(ex == 0); - noshowbase(ios); } { // negative one, showbase - std::string v = "0,01 EUR -"; + std::string v = "-0,01 EUR"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -315,7 +315,7 @@ int main() assert(ex == -1); } { // negative one, showbase - std::string v = "0,01 EUR -"; + std::string v = "-0,01 EUR"; showbase(ios); typedef input_iterator<const char*> I; long double ex; @@ -325,10 +325,9 @@ int main() assert(iter.base() == v.data() + v.size()); assert(err == std::ios_base::eofbit); assert(ex == -1); - noshowbase(ios); } { // positive, showbase - std::string v = "1 234 567,89 EUR "; + std::string v = "1 234 567,89 EUR"; typedef input_iterator<const char*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -339,7 +338,7 @@ int main() assert(ex == 123456789); } { // positive, showbase - std::string v = "1 234 567,89 EUR "; + std::string v = "1 234 567,89 EUR"; showbase(ios); typedef input_iterator<const char*> I; long double ex; @@ -352,7 +351,7 @@ int main() noshowbase(ios); } { // negative, showbase - std::string v = "1 234 567,89 EUR -"; + std::string v = "-1 234 567,89 EUR"; showbase(ios); typedef input_iterator<const char*> I; long double ex; @@ -383,7 +382,7 @@ int main() std::ios_base::iostate err = std::ios_base::goodbit; I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex); - assert(iter.base() == v.data() + 14); + assert(iter.base() == v.data() + 13); assert(err == std::ios_base::goodbit); assert(ex == 123456789); } @@ -403,7 +402,7 @@ int main() assert(ex == 0); } { // negative one - std::wstring v = L"0,01 -"; + std::wstring v = L"-0,01"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -425,7 +424,7 @@ int main() assert(ex == 123456789); } { // negative - std::wstring v = L"1 234 567,89 -"; + std::wstring v = L"-1 234 567,89"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -436,7 +435,7 @@ int main() assert(ex == -123456789); } { // negative - std::wstring v = L"1234567,89 -"; + std::wstring v = L"-1234567,89"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -447,7 +446,8 @@ int main() assert(ex == -123456789); } { // zero, showbase - std::wstring v = L"0,00 Eu"; + std::wstring v = L"0,00 \u20ac"; + showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -458,7 +458,7 @@ int main() assert(ex == 0); } { // zero, showbase - std::wstring v = L"0,00 Eu"; + std::wstring v = L"0,00 \u20ac"; showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; @@ -468,10 +468,9 @@ int main() assert(iter.base() == v.data() + v.size()); assert(err == std::ios_base::eofbit); assert(ex == 0); - noshowbase(ios); } { // negative one, showbase - std::wstring v = L"0,01 Eu-"; + std::wstring v = L"-0,01 \u20ac"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -482,7 +481,7 @@ int main() assert(ex == -1); } { // negative one, showbase - std::wstring v = L"0,01 Eu-"; + std::wstring v = L"-0,01 \u20ac"; showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; @@ -492,10 +491,9 @@ int main() assert(iter.base() == v.data() + v.size()); assert(err == std::ios_base::eofbit); assert(ex == -1); - noshowbase(ios); } { // positive, showbase - std::wstring v = L"1 234 567,89 Eu"; + std::wstring v = L"1 234 567,89 \u20ac"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -506,7 +504,7 @@ int main() assert(ex == 123456789); } { // positive, showbase - std::wstring v = L"1 234 567,89 Eu"; + std::wstring v = L"1 234 567,89 \u20ac"; showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; @@ -519,7 +517,7 @@ int main() noshowbase(ios); } { // negative, showbase - std::wstring v = L"1 234 567,89 Eu-"; + std::wstring v = L"-1 234 567,89 \u20ac"; showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; @@ -539,7 +537,7 @@ int main() std::ios_base::iostate err = std::ios_base::goodbit; I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex); - assert(iter.base() == v.data() + 14); + assert(iter.base() == v.data() + 13); assert(err == std::ios_base::failbit); noshowbase(ios); } @@ -550,7 +548,7 @@ int main() std::ios_base::iostate err = std::ios_base::goodbit; I iter = f.get(I(v.data()), I(v.data() + v.size()), false, ios, err, ex); - assert(iter.base() == v.data() + 14); + assert(iter.base() == v.data() + 13); assert(err == std::ios_base::goodbit); assert(ex == 123456789); } @@ -570,7 +568,7 @@ int main() assert(ex == 0); } { // negative one - std::wstring v = L"0,01 -"; + std::wstring v = L"-0,01"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -592,7 +590,7 @@ int main() assert(ex == 123456789); } { // negative - std::wstring v = L"1 234 567,89 -"; + std::wstring v = L"-1 234 567,89"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -603,7 +601,7 @@ int main() assert(ex == -123456789); } { // negative - std::wstring v = L"1234567,89 -"; + std::wstring v = L"-1234567,89"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -614,7 +612,8 @@ int main() assert(ex == -123456789); } { // zero, showbase - std::wstring v = L"0,00 EUR "; + std::wstring v = L"0,00 EUR"; + showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -625,7 +624,7 @@ int main() assert(ex == 0); } { // zero, showbase - std::wstring v = L"0,00 EUR "; + std::wstring v = L"0,00 EUR"; showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; @@ -635,10 +634,9 @@ int main() assert(iter.base() == v.data() + v.size()); assert(err == std::ios_base::eofbit); assert(ex == 0); - noshowbase(ios); } { // negative one, showbase - std::wstring v = L"0,01 EUR -"; + std::wstring v = L"-0,01 EUR"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -649,7 +647,7 @@ int main() assert(ex == -1); } { // negative one, showbase - std::wstring v = L"0,01 EUR -"; + std::wstring v = L"-0,01 EUR"; showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; @@ -659,10 +657,9 @@ int main() assert(iter.base() == v.data() + v.size()); assert(err == std::ios_base::eofbit); assert(ex == -1); - noshowbase(ios); } { // positive, showbase - std::wstring v = L"1 234 567,89 EUR "; + std::wstring v = L"1 234 567,89 EUR"; typedef input_iterator<const wchar_t*> I; long double ex; std::ios_base::iostate err = std::ios_base::goodbit; @@ -673,7 +670,7 @@ int main() assert(ex == 123456789); } { // positive, showbase - std::wstring v = L"1 234 567,89 EUR "; + std::wstring v = L"1 234 567,89 EUR"; showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; @@ -686,7 +683,7 @@ int main() noshowbase(ios); } { // negative, showbase - std::wstring v = L"1 234 567,89 EUR -"; + std::wstring v = L"-1 234 567,89 EUR"; showbase(ios); typedef input_iterator<const wchar_t*> I; long double ex; @@ -717,7 +714,7 @@ int main() std::ios_base::iostate err = std::ios_base::goodbit; I iter = f.get(I(v.data()), I(v.data() + v.size()), true, ios, err, ex); - assert(iter.base() == v.data() + 14); + assert(iter.base() == v.data() + 13); assert(err == std::ios_base::goodbit); assert(ex == 123456789); } diff --git a/libcxx/test/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp b/libcxx/test/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp index c724c2395d5..021bec9a95a 100644 --- a/libcxx/test/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp +++ b/libcxx/test/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp @@ -63,7 +63,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "0,00 "); + assert(ex == "0,00"); } { // negative one long double v = -1; @@ -71,7 +71,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "0,01 -"); + assert(ex == "-0,01"); } { // positive long double v = 123456789; @@ -79,7 +79,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 "); + assert(ex == "1 234 567,89"); } { // negative long double v = -123456789; @@ -87,7 +87,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 -"); + assert(ex == "-1 234 567,89"); } { // zero, showbase long double v = 0; @@ -96,7 +96,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "0,00 Eu"); + assert(ex == "0,00 \u20ac"); } { // negative one, showbase long double v = -1; @@ -105,7 +105,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "0,01 Eu-"); + assert(ex == "-0,01 \u20ac"); } { // positive, showbase long double v = 123456789; @@ -114,7 +114,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 Eu"); + assert(ex == "1 234 567,89 \u20ac"); } { // negative, showbase long double v = -123456789; @@ -123,7 +123,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 Eu-"); + assert(ex == "-1 234 567,89 \u20ac"); } { // negative, showbase, left long double v = -123456789; @@ -134,7 +134,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, ' ', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 Eu- "); + assert(ex == "-1 234 567,89 \u20ac "); assert(ios.width() == 0); } { // negative, showbase, internal @@ -146,7 +146,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, ' ', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 Eu-"); + assert(ex == "-1 234 567,89 \u20ac"); assert(ios.width() == 0); } { // negative, showbase, right @@ -158,7 +158,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), false, ios, ' ', v); std::string ex(str, iter.base()); - assert(ex == " 1 234 567,89 Eu-"); + assert(ex == " -1 234 567,89 \u20ac"); assert(ios.width() == 0); } @@ -171,7 +171,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "0,00 "); + assert(ex == "0,00"); } { // negative one long double v = -1; @@ -179,7 +179,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "0,01 -"); + assert(ex == "-0,01"); } { // positive long double v = 123456789; @@ -187,7 +187,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 "); + assert(ex == "1 234 567,89"); } { // negative long double v = -123456789; @@ -195,7 +195,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 -"); + assert(ex == "-1 234 567,89"); } { // zero, showbase long double v = 0; @@ -204,7 +204,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "0,00 EUR "); + assert(ex == "0,00 EUR"); } { // negative one, showbase long double v = -1; @@ -213,7 +213,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "0,01 EUR -"); + assert(ex == "-0,01 EUR"); } { // positive, showbase long double v = 123456789; @@ -222,7 +222,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 EUR "); + assert(ex == "1 234 567,89 EUR"); } { // negative, showbase long double v = -123456789; @@ -231,7 +231,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, '*', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 EUR -"); + assert(ex == "-1 234 567,89 EUR"); } { // negative, showbase, left long double v = -123456789; @@ -242,7 +242,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, ' ', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 EUR - "); + assert(ex == "-1 234 567,89 EUR "); assert(ios.width() == 0); } { // negative, showbase, internal @@ -254,7 +254,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, ' ', v); std::string ex(str, iter.base()); - assert(ex == "1 234 567,89 EUR -"); + assert(ex == "-1 234 567,89 EUR"); assert(ios.width() == 0); } { // negative, showbase, right @@ -266,7 +266,7 @@ int main() output_iterator<char*> iter = f.put(output_iterator<char*>(str), true, ios, ' ', v); std::string ex(str, iter.base()); - assert(ex == " 1 234 567,89 EUR -"); + assert(ex == " -1 234 567,89 EUR"); assert(ios.width() == 0); } } @@ -281,7 +281,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"0,00 "); + assert(ex == L"0,00"); } { // negative one long double v = -1; @@ -289,7 +289,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"0,01 -"); + assert(ex == L"-0,01"); } { // positive long double v = 123456789; @@ -297,7 +297,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 "); + assert(ex == L"1 234 567,89"); } { // negative long double v = -123456789; @@ -305,7 +305,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 -"); + assert(ex == L"-1 234 567,89"); } { // zero, showbase long double v = 0; @@ -314,7 +314,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"0,00 Eu"); + assert(ex == L"0,00 \u20ac"); } { // negative one, showbase long double v = -1; @@ -323,7 +323,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"0,01 Eu-"); + assert(ex == L"-0,01 \u20ac"); } { // positive, showbase long double v = 123456789; @@ -332,7 +332,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 Eu"); + assert(ex == L"1 234 567,89 \u20ac"); } { // negative, showbase long double v = -123456789; @@ -341,7 +341,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 Eu-"); + assert(ex == L"-1 234 567,89 \u20ac"); } { // negative, showbase, left long double v = -123456789; @@ -352,7 +352,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, ' ', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 Eu- "); + assert(ex == L"-1 234 567,89 \u20ac "); assert(ios.width() == 0); } { // negative, showbase, internal @@ -364,7 +364,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, ' ', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 Eu-"); + assert(ex == L"-1 234 567,89 \u20ac"); assert(ios.width() == 0); } { // negative, showbase, right @@ -376,7 +376,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), false, ios, ' ', v); std::wstring ex(str, iter.base()); - assert(ex == L" 1 234 567,89 Eu-"); + assert(ex == L" -1 234 567,89 \u20ac"); assert(ios.width() == 0); } @@ -389,7 +389,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"0,00 "); + assert(ex == L"0,00"); } { // negative one long double v = -1; @@ -397,7 +397,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"0,01 -"); + assert(ex == L"-0,01"); } { // positive long double v = 123456789; @@ -405,7 +405,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 "); + assert(ex == L"1 234 567,89"); } { // negative long double v = -123456789; @@ -413,7 +413,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 -"); + assert(ex == L"-1 234 567,89"); } { // zero, showbase long double v = 0; @@ -422,7 +422,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"0,00 EUR "); + assert(ex == L"0,00 EUR"); } { // negative one, showbase long double v = -1; @@ -431,7 +431,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"0,01 EUR -"); + assert(ex == L"-0,01 EUR"); } { // positive, showbase long double v = 123456789; @@ -440,7 +440,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 EUR "); + assert(ex == L"1 234 567,89 EUR"); } { // negative, showbase long double v = -123456789; @@ -449,7 +449,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, '*', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 EUR -"); + assert(ex == L"-1 234 567,89 EUR"); } { // negative, showbase, left long double v = -123456789; @@ -460,7 +460,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, ' ', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 EUR - "); + assert(ex == L"-1 234 567,89 EUR "); assert(ios.width() == 0); } { // negative, showbase, internal @@ -472,7 +472,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, ' ', v); std::wstring ex(str, iter.base()); - assert(ex == L"1 234 567,89 EUR -"); + assert(ex == L"-1 234 567,89 EUR"); assert(ios.width() == 0); } { // negative, showbase, right @@ -484,7 +484,7 @@ int main() output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), true, ios, ' ', v); std::wstring ex(str, iter.base()); - assert(ex == L" 1 234 567,89 EUR -"); + assert(ex == L" -1 234 567,89 EUR"); assert(ios.width() == 0); } } diff --git a/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp b/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp index e53711aae2e..3f8c701124c 100644 --- a/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp +++ b/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp @@ -89,36 +89,36 @@ int main() { Fnf f(LOCALE_fr_FR_UTF_8, 1); - assert(f.curr_symbol() == "Eu"); + assert(f.curr_symbol() == " \u20ac"); } { Fnt f(LOCALE_fr_FR_UTF_8, 1); - assert(f.curr_symbol() == "EUR "); + assert(f.curr_symbol() == " EUR"); } { Fwf f(LOCALE_fr_FR_UTF_8, 1); - assert(f.curr_symbol() == L"Eu"); + assert(f.curr_symbol() == L" \u20ac"); } { Fwt f(LOCALE_fr_FR_UTF_8, 1); - assert(f.curr_symbol() == L"EUR "); + assert(f.curr_symbol() == L" EUR"); } { Fnf f(LOCALE_ru_RU_UTF_8, 1); - assert(f.curr_symbol() == "\xD1\x80\xD1\x83\xD0\xB1""."); + assert(f.curr_symbol() == " \xD1\x80\xD1\x83\xD0\xB1"); } { Fnt f(LOCALE_ru_RU_UTF_8, 1); - assert(f.curr_symbol() == "RUB "); + assert(f.curr_symbol() == " RUB"); } { Fwf f(LOCALE_ru_RU_UTF_8, 1); - assert(f.curr_symbol() == L"\x440\x443\x431""."); + assert(f.curr_symbol() == L" \x440\x443\x431"); } { Fwt f(LOCALE_ru_RU_UTF_8, 1); - assert(f.curr_symbol() == L"RUB "); + assert(f.curr_symbol() == L" RUB"); } { diff --git a/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp b/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp index 7802fafc1e6..63bf30818a0 100644 --- a/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp +++ b/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp @@ -92,19 +92,19 @@ int main() { Fnf f(LOCALE_fr_FR_UTF_8, 1); - assert(f.grouping() == "\3\3"); + assert(f.grouping() == "\3"); } { Fnt f(LOCALE_fr_FR_UTF_8, 1); - assert(f.grouping() == "\3\3"); + assert(f.grouping() == "\3"); } { Fwf f(LOCALE_fr_FR_UTF_8, 1); - assert(f.grouping() == "\3\3"); + assert(f.grouping() == "\3"); } { Fwt f(LOCALE_fr_FR_UTF_8, 1); - assert(f.grouping() == "\3\3"); + assert(f.grouping() == "\3"); } { @@ -126,18 +126,18 @@ int main() { Fnf f(LOCALE_zh_CN_UTF_8, 1); - assert(f.grouping() == "\3\3"); + assert(f.grouping() == "\3"); } { Fnt f(LOCALE_zh_CN_UTF_8, 1); - assert(f.grouping() == "\3\3"); + assert(f.grouping() == "\3"); } { Fwf f(LOCALE_zh_CN_UTF_8, 1); - assert(f.grouping() == "\3\3"); + assert(f.grouping() == "\3"); } { Fwt f(LOCALE_zh_CN_UTF_8, 1); - assert(f.grouping() == "\3\3"); + assert(f.grouping() == "\3"); } } diff --git a/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp b/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp index fc2165a67a0..25ab9c4f281 100644 --- a/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp +++ b/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp @@ -122,34 +122,34 @@ int main() { Fnf f(LOCALE_fr_FR_UTF_8, 1); std::money_base::pattern p = f.neg_format(); - assert(p.field[0] == std::money_base::value); - assert(p.field[1] == std::money_base::space); - assert(p.field[2] == std::money_base::symbol); - assert(p.field[3] == std::money_base::sign); + assert(p.field[0] == std::money_base::sign); + assert(p.field[1] == std::money_base::value); + assert(p.field[2] == std::money_base::none); + assert(p.field[3] == std::money_base::symbol); } { Fnt f(LOCALE_fr_FR_UTF_8, 1); std::money_base::pattern p = f.neg_format(); - assert(p.field[0] == std::money_base::value); - assert(p.field[1] == std::money_base::space); - assert(p.field[2] == std::money_base::symbol); - assert(p.field[3] == std::money_base::sign); + assert(p.field[0] == std::money_base::sign); + assert(p.field[1] == std::money_base::value); + assert(p.field[2] == std::money_base::none); + assert(p.field[3] == std::money_base::symbol); } { Fwf f(LOCALE_fr_FR_UTF_8, 1); std::money_base::pattern p = f.neg_format(); - assert(p.field[0] == std::money_base::value); - assert(p.field[1] == std::money_base::space); - assert(p.field[2] == std::money_base::symbol); - assert(p.field[3] == std::money_base::sign); + assert(p.field[0] == std::money_base::sign); + assert(p.field[1] == std::money_base::value); + assert(p.field[2] == std::money_base::none); + assert(p.field[3] == std::money_base::symbol); } { Fwt f(LOCALE_fr_FR_UTF_8, 1); std::money_base::pattern p = f.neg_format(); - assert(p.field[0] == std::money_base::value); - assert(p.field[1] == std::money_base::space); - assert(p.field[2] == std::money_base::symbol); - assert(p.field[3] == std::money_base::sign); + assert(p.field[0] == std::money_base::sign); + assert(p.field[1] == std::money_base::value); + assert(p.field[2] == std::money_base::none); + assert(p.field[3] == std::money_base::symbol); } { @@ -157,7 +157,7 @@ int main() std::money_base::pattern p = f.neg_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -165,7 +165,7 @@ int main() std::money_base::pattern p = f.neg_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -173,7 +173,7 @@ int main() std::money_base::pattern p = f.neg_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -181,7 +181,7 @@ int main() std::money_base::pattern p = f.neg_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } @@ -196,8 +196,8 @@ int main() { Fnt f(LOCALE_zh_CN_UTF_8, 1); std::money_base::pattern p = f.neg_format(); - assert(p.field[0] == std::money_base::symbol); - assert(p.field[1] == std::money_base::sign); + assert(p.field[0] == std::money_base::sign); + assert(p.field[1] == std::money_base::symbol); assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::value); } @@ -212,8 +212,8 @@ int main() { Fwt f(LOCALE_zh_CN_UTF_8, 1); std::money_base::pattern p = f.neg_format(); - assert(p.field[0] == std::money_base::symbol); - assert(p.field[1] == std::money_base::sign); + assert(p.field[0] == std::money_base::sign); + assert(p.field[1] == std::money_base::symbol); assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::value); } diff --git a/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp b/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp index 21e7d0335a2..7f18d39fbef 100644 --- a/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp +++ b/libcxx/test/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp @@ -124,7 +124,7 @@ int main() std::money_base::pattern p = f.pos_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -132,7 +132,7 @@ int main() std::money_base::pattern p = f.pos_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -140,7 +140,7 @@ int main() std::money_base::pattern p = f.pos_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -148,7 +148,7 @@ int main() std::money_base::pattern p = f.pos_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } @@ -157,7 +157,7 @@ int main() std::money_base::pattern p = f.pos_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -165,7 +165,7 @@ int main() std::money_base::pattern p = f.pos_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -173,7 +173,7 @@ int main() std::money_base::pattern p = f.pos_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { @@ -181,15 +181,15 @@ int main() std::money_base::pattern p = f.pos_format(); assert(p.field[0] == std::money_base::sign); assert(p.field[1] == std::money_base::value); - assert(p.field[2] == std::money_base::space); + assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::symbol); } { Fnf f(LOCALE_zh_CN_UTF_8, 1); std::money_base::pattern p = f.pos_format(); - assert(p.field[0] == std::money_base::sign); - assert(p.field[1] == std::money_base::symbol); + assert(p.field[0] == std::money_base::symbol); + assert(p.field[1] == std::money_base::sign); assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::value); } @@ -204,8 +204,8 @@ int main() { Fwf f(LOCALE_zh_CN_UTF_8, 1); std::money_base::pattern p = f.pos_format(); - assert(p.field[0] == std::money_base::sign); - assert(p.field[1] == std::money_base::symbol); + assert(p.field[0] == std::money_base::symbol); + assert(p.field[1] == std::money_base::sign); assert(p.field[2] == std::money_base::none); assert(p.field[3] == std::money_base::value); } |