111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//                     The LLVM Compiler Infrastructure
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details.
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// REQUIRES: locale.en_US.UTF-8
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// REQUIRES: locale.fr_FR.UTF-8
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <locale>
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// template <class CharT, class OutputIterator = ostreambuf_iterator<CharT> >
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// class time_put_byname
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//     : public time_put<CharT, OutputIterator>
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// {
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// public:
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//     explicit time_put_byname(const char* nm, size_t refs = 0);
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//     explicit time_put_byname(const string& nm, size_t refs = 0);
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// protected:
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//     ~time_put_byname();
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// };
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// TODO: investigation needed
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// XFAIL: linux-gnu
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <locale>
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert>
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "test_iterators.h"
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "platform_support.h" // locale name macros
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef std::time_put_byname<char, output_iterator<char*> > F;
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass my_facet
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    : public F
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic:
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    explicit my_facet(const std::string& nm, std::size_t refs = 0)
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        : F(nm, refs) {}
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main()
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    char str[200];
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    output_iterator<char*> iter;
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    tm t;
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_sec = 6;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_min = 3;
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_hour = 13;
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_mday = 2;
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_mon = 4;
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_year = 109;
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_wday = 6;
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_yday = -1;
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    t.tm_isdst = 1;
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    std::ios ios(0);
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        const my_facet f(LOCALE_en_US_UTF_8, 1);
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string pat("Today is %A which is abbreviated %a.");
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        iter = f.put(output_iterator<char*>(str), ios, '*', &t,
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                     pat.data(), pat.data() + pat.size());
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "Today is Saturday which is abbreviated Sat.");
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        const my_facet f(LOCALE_fr_FR_UTF_8, 1);
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string pat("Today is %A which is abbreviated %a.");
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        iter = f.put(output_iterator<char*>(str), ios, '*', &t,
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                     pat.data(), pat.data() + pat.size());
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert((ex == "Today is Samedi which is abbreviated Sam.")||
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert               (ex == "Today is samedi which is abbreviated sam." ));
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
79