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 // XFAIL: apple-darwin 11 12 // REQUIRES: locale.en_US.UTF-8 13 // REQUIRES: locale.fr_FR.UTF-8 14 // REQUIRES: locale.ru_RU.UTF-8 15 // REQUIRES: locale.zh_CN.UTF-8 16 17 // <locale> 18 19 // class moneypunct_byname<charT, International> 20 21 // pattern pos_format() const; 22 23 #include <locale> 24 #include <limits> 25 #include <cassert> 26 27 #include "platform_support.h" // locale name macros 28 29 class Fnf 30 : public std::moneypunct_byname<char, false> 31 { 32 public: 33 explicit Fnf(const std::string& nm, std::size_t refs = 0) 34 : std::moneypunct_byname<char, false>(nm, refs) {} 35 }; 36 37 class Fnt 38 : public std::moneypunct_byname<char, true> 39 { 40 public: 41 explicit Fnt(const std::string& nm, std::size_t refs = 0) 42 : std::moneypunct_byname<char, true>(nm, refs) {} 43 }; 44 45 class Fwf 46 : public std::moneypunct_byname<wchar_t, false> 47 { 48 public: 49 explicit Fwf(const std::string& nm, std::size_t refs = 0) 50 : std::moneypunct_byname<wchar_t, false>(nm, refs) {} 51 }; 52 53 class Fwt 54 : public std::moneypunct_byname<wchar_t, true> 55 { 56 public: 57 explicit Fwt(const std::string& nm, std::size_t refs = 0) 58 : std::moneypunct_byname<wchar_t, true>(nm, refs) {} 59 }; 60 61 int main() 62 { 63 { 64 Fnf f("C", 1); 65 std::money_base::pattern p = f.pos_format(); 66 assert(p.field[0] == std::money_base::symbol); 67 assert(p.field[1] == std::money_base::sign); 68 assert(p.field[2] == std::money_base::none); 69 assert(p.field[3] == std::money_base::value); 70 } 71 { 72 Fnt f("C", 1); 73 std::money_base::pattern p = f.pos_format(); 74 assert(p.field[0] == std::money_base::symbol); 75 assert(p.field[1] == std::money_base::sign); 76 assert(p.field[2] == std::money_base::none); 77 assert(p.field[3] == std::money_base::value); 78 } 79 { 80 Fwf f("C", 1); 81 std::money_base::pattern p = f.pos_format(); 82 assert(p.field[0] == std::money_base::symbol); 83 assert(p.field[1] == std::money_base::sign); 84 assert(p.field[2] == std::money_base::none); 85 assert(p.field[3] == std::money_base::value); 86 } 87 { 88 Fwt f("C", 1); 89 std::money_base::pattern p = f.pos_format(); 90 assert(p.field[0] == std::money_base::symbol); 91 assert(p.field[1] == std::money_base::sign); 92 assert(p.field[2] == std::money_base::none); 93 assert(p.field[3] == std::money_base::value); 94 } 95 96 { 97 Fnf f(LOCALE_en_US_UTF_8, 1); 98 std::money_base::pattern p = f.pos_format(); 99 assert(p.field[0] == std::money_base::sign); 100 assert(p.field[1] == std::money_base::symbol); 101 assert(p.field[2] == std::money_base::none); 102 assert(p.field[3] == std::money_base::value); 103 } 104 { 105 Fnt f(LOCALE_en_US_UTF_8, 1); 106 std::money_base::pattern p = f.pos_format(); 107 assert(p.field[0] == std::money_base::sign); 108 assert(p.field[1] == std::money_base::symbol); 109 assert(p.field[2] == std::money_base::none); 110 assert(p.field[3] == std::money_base::value); 111 } 112 { 113 Fwf f(LOCALE_en_US_UTF_8, 1); 114 std::money_base::pattern p = f.pos_format(); 115 assert(p.field[0] == std::money_base::sign); 116 assert(p.field[1] == std::money_base::symbol); 117 assert(p.field[2] == std::money_base::none); 118 assert(p.field[3] == std::money_base::value); 119 } 120 { 121 Fwt f(LOCALE_en_US_UTF_8, 1); 122 std::money_base::pattern p = f.pos_format(); 123 assert(p.field[0] == std::money_base::sign); 124 assert(p.field[1] == std::money_base::symbol); 125 assert(p.field[2] == std::money_base::none); 126 assert(p.field[3] == std::money_base::value); 127 } 128 129 { 130 Fnf f(LOCALE_fr_FR_UTF_8, 1); 131 std::money_base::pattern p = f.pos_format(); 132 assert(p.field[0] == std::money_base::sign); 133 assert(p.field[1] == std::money_base::value); 134 assert(p.field[2] == std::money_base::none); 135 assert(p.field[3] == std::money_base::symbol); 136 } 137 { 138 Fnt f(LOCALE_fr_FR_UTF_8, 1); 139 std::money_base::pattern p = f.pos_format(); 140 assert(p.field[0] == std::money_base::sign); 141 assert(p.field[1] == std::money_base::value); 142 assert(p.field[2] == std::money_base::none); 143 assert(p.field[3] == std::money_base::symbol); 144 } 145 { 146 Fwf f(LOCALE_fr_FR_UTF_8, 1); 147 std::money_base::pattern p = f.pos_format(); 148 assert(p.field[0] == std::money_base::sign); 149 assert(p.field[1] == std::money_base::value); 150 assert(p.field[2] == std::money_base::none); 151 assert(p.field[3] == std::money_base::symbol); 152 } 153 { 154 Fwt f(LOCALE_fr_FR_UTF_8, 1); 155 std::money_base::pattern p = f.pos_format(); 156 assert(p.field[0] == std::money_base::sign); 157 assert(p.field[1] == std::money_base::value); 158 assert(p.field[2] == std::money_base::none); 159 assert(p.field[3] == std::money_base::symbol); 160 } 161 162 { 163 Fnf f(LOCALE_ru_RU_UTF_8, 1); 164 std::money_base::pattern p = f.pos_format(); 165 assert(p.field[0] == std::money_base::sign); 166 assert(p.field[1] == std::money_base::value); 167 assert(p.field[2] == std::money_base::none); 168 assert(p.field[3] == std::money_base::symbol); 169 } 170 { 171 Fnt f(LOCALE_ru_RU_UTF_8, 1); 172 std::money_base::pattern p = f.pos_format(); 173 assert(p.field[0] == std::money_base::sign); 174 assert(p.field[1] == std::money_base::value); 175 assert(p.field[2] == std::money_base::none); 176 assert(p.field[3] == std::money_base::symbol); 177 } 178 { 179 Fwf f(LOCALE_ru_RU_UTF_8, 1); 180 std::money_base::pattern p = f.pos_format(); 181 assert(p.field[0] == std::money_base::sign); 182 assert(p.field[1] == std::money_base::value); 183 assert(p.field[2] == std::money_base::none); 184 assert(p.field[3] == std::money_base::symbol); 185 } 186 { 187 Fwt f(LOCALE_ru_RU_UTF_8, 1); 188 std::money_base::pattern p = f.pos_format(); 189 assert(p.field[0] == std::money_base::sign); 190 assert(p.field[1] == std::money_base::value); 191 assert(p.field[2] == std::money_base::none); 192 assert(p.field[3] == std::money_base::symbol); 193 } 194 195 { 196 Fnf f(LOCALE_zh_CN_UTF_8, 1); 197 std::money_base::pattern p = f.pos_format(); 198 assert(p.field[0] == std::money_base::symbol); 199 assert(p.field[1] == std::money_base::sign); 200 assert(p.field[2] == std::money_base::none); 201 assert(p.field[3] == std::money_base::value); 202 } 203 { 204 Fnt f(LOCALE_zh_CN_UTF_8, 1); 205 std::money_base::pattern p = f.pos_format(); 206 assert(p.field[0] == std::money_base::sign); 207 assert(p.field[1] == std::money_base::symbol); 208 assert(p.field[2] == std::money_base::none); 209 assert(p.field[3] == std::money_base::value); 210 } 211 { 212 Fwf f(LOCALE_zh_CN_UTF_8, 1); 213 std::money_base::pattern p = f.pos_format(); 214 assert(p.field[0] == std::money_base::symbol); 215 assert(p.field[1] == std::money_base::sign); 216 assert(p.field[2] == std::money_base::none); 217 assert(p.field[3] == std::money_base::value); 218 } 219 { 220 Fwt f(LOCALE_zh_CN_UTF_8, 1); 221 std::money_base::pattern p = f.pos_format(); 222 assert(p.field[0] == std::money_base::sign); 223 assert(p.field[1] == std::money_base::symbol); 224 assert(p.field[2] == std::money_base::none); 225 assert(p.field[3] == std::money_base::value); 226 } 227 } 228