Home | History | Annotate | Download | only in locale.moneypunct.byname
      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