get_date_wide.pass.cpp revision 83e2c4d877fe2d7793868b1c6a5d9525a7c4d431
1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (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 time_get_byname<charT, InputIterator>
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// iter_type
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// get_date(iter_type s, iter_type end, ios_base& str,
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//          ios_base::iostate& err, tm* t) const;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <locale>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert>
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "test_iterators.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "platform_support.h" // locale name macros
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef input_iterator<const wchar_t*> I;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)typedef std::time_get_byname<wchar_t, I> F;
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class my_facet
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : public F
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic:
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    explicit my_facet(const std::string& nm, std::size_t refs = 0)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : F(nm, refs) {}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::ios ios(0);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::ios_base::iostate err;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::tm t;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        const my_facet f(LOCALE_en_US_UTF_8, 1);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"06/10/2009";
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_date(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_mon == 5);
49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assert(t.tm_mday == 10);
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(t.tm_year == 109);
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(err == std::ios_base::eofbit);
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const my_facet f(LOCALE_fr_FR_UTF_8, 1);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"10.06.2009";
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        err = std::ios_base::goodbit;
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        t = std::tm();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_date(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_mon == 5);
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert(t.tm_mday == 10);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(t.tm_year == 109);
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        assert(err == std::ios_base::eofbit);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const my_facet f(LOCALE_ru_RU_UTF_8, 1);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"10.06.2009";
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_date(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_mon == 5);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_mday == 10);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_year == 109);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(err == std::ios_base::eofbit);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const my_facet f(LOCALE_zh_CN_UTF_8, 1);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"2009/06/10";
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_date(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_mon == 5);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_mday == 10);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_year == 109);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(err == std::ios_base::eofbit);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)