1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // REQUIRES: locale.en_US.UTF-8 11 // REQUIRES: locale.fr_FR.UTF-8 12 // REQUIRES: locale.ru_RU.UTF-8 13 // REQUIRES: locale.zh_CN.UTF-8 14 15 // Russia uses ',' for the decimal separator. GLIBC returns '.' 16 // XFAIL: linux 17 18 // <locale> 19 20 // class moneypunct_byname<charT, International> 21 22 // charT decimal_point() const; 23 24 #include <locale> 25 #include <limits> 26 #include <cassert> 27 28 #include "platform_support.h" // locale name macros 29 30 class Fnf 31 : public std::moneypunct_byname<char, false> 32 { 33 public: 34 explicit Fnf(const std::string& nm, std::size_t refs = 0) 35 : std::moneypunct_byname<char, false>(nm, refs) {} 36 }; 37 38 class Fnt 39 : public std::moneypunct_byname<char, true> 40 { 41 public: 42 explicit Fnt(const std::string& nm, std::size_t refs = 0) 43 : std::moneypunct_byname<char, true>(nm, refs) {} 44 }; 45 46 class Fwf 47 : public std::moneypunct_byname<wchar_t, false> 48 { 49 public: 50 explicit Fwf(const std::string& nm, std::size_t refs = 0) 51 : std::moneypunct_byname<wchar_t, false>(nm, refs) {} 52 }; 53 54 class Fwt 55 : public std::moneypunct_byname<wchar_t, true> 56 { 57 public: 58 explicit Fwt(const std::string& nm, std::size_t refs = 0) 59 : std::moneypunct_byname<wchar_t, true>(nm, refs) {} 60 }; 61 62 int main() 63 { 64 { 65 Fnf f("C", 1); 66 assert(f.decimal_point() == std::numeric_limits<char>::max()); 67 } 68 { 69 Fnt f("C", 1); 70 assert(f.decimal_point() == std::numeric_limits<char>::max()); 71 } 72 { 73 Fwf f("C", 1); 74 assert(f.decimal_point() == std::numeric_limits<wchar_t>::max()); 75 } 76 { 77 Fwt f("C", 1); 78 assert(f.decimal_point() == std::numeric_limits<wchar_t>::max()); 79 } 80 81 { 82 Fnf f(LOCALE_en_US_UTF_8, 1); 83 assert(f.decimal_point() == '.'); 84 } 85 { 86 Fnt f(LOCALE_en_US_UTF_8, 1); 87 assert(f.decimal_point() == '.'); 88 } 89 { 90 Fwf f(LOCALE_en_US_UTF_8, 1); 91 assert(f.decimal_point() == L'.'); 92 } 93 { 94 Fwt f(LOCALE_en_US_UTF_8, 1); 95 assert(f.decimal_point() == L'.'); 96 } 97 98 { 99 Fnf f(LOCALE_fr_FR_UTF_8, 1); 100 assert(f.decimal_point() == ','); 101 } 102 { 103 Fnt f(LOCALE_fr_FR_UTF_8, 1); 104 assert(f.decimal_point() == ','); 105 } 106 { 107 Fwf f(LOCALE_fr_FR_UTF_8, 1); 108 assert(f.decimal_point() == L','); 109 } 110 { 111 Fwt f(LOCALE_fr_FR_UTF_8, 1); 112 assert(f.decimal_point() == L','); 113 } 114 115 { 116 Fnf f(LOCALE_ru_RU_UTF_8, 1); 117 assert(f.decimal_point() == ','); 118 } 119 { 120 Fnt f(LOCALE_ru_RU_UTF_8, 1); 121 assert(f.decimal_point() == ','); 122 } 123 { 124 Fwf f(LOCALE_ru_RU_UTF_8, 1); 125 assert(f.decimal_point() == L','); 126 } 127 { 128 Fwt f(LOCALE_ru_RU_UTF_8, 1); 129 assert(f.decimal_point() == L','); 130 } 131 132 { 133 Fnf f(LOCALE_zh_CN_UTF_8, 1); 134 assert(f.decimal_point() == '.'); 135 } 136 { 137 Fnt f(LOCALE_zh_CN_UTF_8, 1); 138 assert(f.decimal_point() == '.'); 139 } 140 { 141 Fwf f(LOCALE_zh_CN_UTF_8, 1); 142 assert(f.decimal_point() == L'.'); 143 } 144 { 145 Fwt f(LOCALE_zh_CN_UTF_8, 1); 146 assert(f.decimal_point() == L'.'); 147 } 148 } 149