//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

// <locale>

// class moneypunct_byname<charT, International>

// string grouping() const;

#include <locale>
#include <limits>
#include <cassert>

#include "../../../../platform_support.h" // locale name macros

class Fnf
    : public std::moneypunct_byname<char, false>
{
public:
    explicit Fnf(const std::string& nm, std::size_t refs = 0)
        : std::moneypunct_byname<char, false>(nm, refs) {}
};

class Fnt
    : public std::moneypunct_byname<char, true>
{
public:
    explicit Fnt(const std::string& nm, std::size_t refs = 0)
        : std::moneypunct_byname<char, true>(nm, refs) {}
};

class Fwf
    : public std::moneypunct_byname<wchar_t, false>
{
public:
    explicit Fwf(const std::string& nm, std::size_t refs = 0)
        : std::moneypunct_byname<wchar_t, false>(nm, refs) {}
};

class Fwt
    : public std::moneypunct_byname<wchar_t, true>
{
public:
    explicit Fwt(const std::string& nm, std::size_t refs = 0)
        : std::moneypunct_byname<wchar_t, true>(nm, refs) {}
};

int main()
{
    // Monetary grouping strings may be terminated with 0 or CHAR_MAX, defining
    // how the grouping is repeated.
    std::string s = std::string(1, CHAR_MAX);
    {
        Fnf f("C", 1);
        assert(f.grouping() == s || f.grouping() == "");
    }
    {
        Fnt f("C", 1);
        assert(f.grouping() == s || f.grouping() == "");
    }
    {
        Fwf f("C", 1);
        assert(f.grouping() == s || f.grouping() == "");
    }
    {
        Fwt f("C", 1);
        assert(f.grouping() == s || f.grouping() == "");
    }

    {
        Fnf f(LOCALE_en_US_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fnt f(LOCALE_en_US_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fwf f(LOCALE_en_US_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fwt f(LOCALE_en_US_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }

    {
        Fnf f(LOCALE_fr_FR_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fnt f(LOCALE_fr_FR_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fwf f(LOCALE_fr_FR_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fwt f(LOCALE_fr_FR_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }

    {
        Fnf f(LOCALE_ru_RU_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fnt f(LOCALE_ru_RU_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fwf f(LOCALE_ru_RU_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fwt f(LOCALE_ru_RU_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }

    {
        Fnf f(LOCALE_zh_CN_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fnt f(LOCALE_zh_CN_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fwf f(LOCALE_zh_CN_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
    {
        Fwt f(LOCALE_zh_CN_UTF_8, 1);
        assert(f.grouping() == "\3\3");
    }
}
