15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <locale>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class moneypunct_byname<charT, International>
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// int frac_digits() const;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <locale>
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "platform_support.h" // locale name macros
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Fnf
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public std::moneypunct_byname<char, false>
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit Fnf(const std::string& nm, std::size_t refs = 0)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : std::moneypunct_byname<char, false>(nm, refs) {}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Fnt
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public std::moneypunct_byname<char, true>
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit Fnt(const std::string& nm, std::size_t refs = 0)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : std::moneypunct_byname<char, true>(nm, refs) {}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Fwf
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public std::moneypunct_byname<wchar_t, false>
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit Fwf(const std::string& nm, std::size_t refs = 0)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        : std::moneypunct_byname<wchar_t, false>(nm, refs) {}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Fwt
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public std::moneypunct_byname<wchar_t, true>
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit Fwt(const std::string& nm, std::size_t refs = 0)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : std::moneypunct_byname<wchar_t, true>(nm, refs) {}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnf f("C", 1);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 0);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnt f("C", 1);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 0);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwf f("C", 1);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 0);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwt f("C", 1);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 0);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnf f(LOCALE_en_US_UTF_8, 1);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnt f(LOCALE_en_US_UTF_8, 1);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwf f(LOCALE_en_US_UTF_8, 1);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwt f(LOCALE_en_US_UTF_8, 1);
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(f.frac_digits() == 2);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnf f(LOCALE_fr_FR_UTF_8, 1);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnt f(LOCALE_fr_FR_UTF_8, 1);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwf f(LOCALE_fr_FR_UTF_8, 1);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwt f(LOCALE_fr_FR_UTF_8, 1);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnf f(LOCALE_ru_RU_UTF_8, 1);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnt f(LOCALE_ru_RU_UTF_8, 1);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwf f(LOCALE_ru_RU_UTF_8, 1);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwt f(LOCALE_ru_RU_UTF_8, 1);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnf f(LOCALE_zh_CN_UTF_8, 1);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fnt f(LOCALE_zh_CN_UTF_8, 1);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwf f(LOCALE_zh_CN_UTF_8, 1);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Fwt f(LOCALE_zh_CN_UTF_8, 1);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.frac_digits() == 2);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)