1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 943807c2fbad2eb788250dccfc4c61205efb6b7aaDaniel Dunbar// 1043807c2fbad2eb788250dccfc4c61205efb6b7aaDaniel Dunbar// XFAIL: apple-darwin 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <locale> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class moneypunct_byname<charT, International> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// string grouping() const; 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <locale> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <limits> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2283e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "platform_support.h" // locale name macros 23c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass Fnf 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public std::moneypunct_byname<char, false> 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit Fnf(const std::string& nm, std::size_t refs = 0) 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : std::moneypunct_byname<char, false>(nm, refs) {} 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass Fnt 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public std::moneypunct_byname<char, true> 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit Fnt(const std::string& nm, std::size_t refs = 0) 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : std::moneypunct_byname<char, true>(nm, refs) {} 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass Fwf 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public std::moneypunct_byname<wchar_t, false> 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit Fwf(const std::string& nm, std::size_t refs = 0) 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : std::moneypunct_byname<wchar_t, false>(nm, refs) {} 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass Fwt 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public std::moneypunct_byname<wchar_t, true> 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit Fwt(const std::string& nm, std::size_t refs = 0) 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : std::moneypunct_byname<wchar_t, true>(nm, refs) {} 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 58e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall // Monetary grouping strings may be terminated with 0 or CHAR_MAX, defining 59e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall // how the grouping is repeated. 60e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall std::string s = std::string(1, CHAR_MAX); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Fnf f("C", 1); 63e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall assert(f.grouping() == s || f.grouping() == ""); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Fnt f("C", 1); 67e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall assert(f.grouping() == s || f.grouping() == ""); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Fwf f("C", 1); 71e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall assert(f.grouping() == s || f.grouping() == ""); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Fwt f("C", 1); 75e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall assert(f.grouping() == s || f.grouping() == ""); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 79c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fnf f(LOCALE_en_US_UTF_8, 1); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(f.grouping() == "\3\3"); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 83c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fnt f(LOCALE_en_US_UTF_8, 1); 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(f.grouping() == "\3\3"); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 87c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fwf f(LOCALE_en_US_UTF_8, 1); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(f.grouping() == "\3\3"); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 91c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fwt f(LOCALE_en_US_UTF_8, 1); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(f.grouping() == "\3\3"); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 96c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fnf f(LOCALE_fr_FR_UTF_8, 1); 97558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(f.grouping() == "\3"); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 100c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fnt f(LOCALE_fr_FR_UTF_8, 1); 101558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(f.grouping() == "\3"); 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 104c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fwf f(LOCALE_fr_FR_UTF_8, 1); 105558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(f.grouping() == "\3"); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 108c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fwt f(LOCALE_fr_FR_UTF_8, 1); 109558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(f.grouping() == "\3"); 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 113c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fnf f(LOCALE_ru_RU_UTF_8, 1); 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(f.grouping() == "\3\3"); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 117c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fnt f(LOCALE_ru_RU_UTF_8, 1); 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(f.grouping() == "\3\3"); 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 121c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fwf f(LOCALE_ru_RU_UTF_8, 1); 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(f.grouping() == "\3\3"); 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 125c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fwt f(LOCALE_ru_RU_UTF_8, 1); 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(f.grouping() == "\3\3"); 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 130c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fnf f(LOCALE_zh_CN_UTF_8, 1); 131558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(f.grouping() == "\3"); 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 134c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fnt f(LOCALE_zh_CN_UTF_8, 1); 135558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(f.grouping() == "\3"); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 138c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fwf f(LOCALE_zh_CN_UTF_8, 1); 139558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(f.grouping() == "\3"); 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 142c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant Fwt f(LOCALE_zh_CN_UTF_8, 1); 143558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(f.grouping() == "\3"); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 146