get_time_wide.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
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)//===----------------------------------------------------------------------===//
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch// <locale>
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// class time_get<charT, InputIterator>
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// iter_type
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// get_time(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 "iterators.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef input_iterator<const wchar_t*> I;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::time_get<wchar_t, I> F;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class my_facet
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public F
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit my_facet(std::size_t refs = 0)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : F(refs) {}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const my_facet f(1);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::ios ios(0);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::ios_base::iostate err;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::tm t;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"0:0:0";
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_hour == 0);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_min == 0);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_sec == 0);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(err == std::ios_base::eofbit);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"23:59:60";
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_hour == 23);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_min == 59);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_sec == 60);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(err == std::ios_base::eofbit);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"24:59:60";
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+2);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_hour == 0);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_min == 0);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_sec == 0);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(err == std::ios_base::failbit);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"23:60:60";
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+5);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         assert(t.tm_hour == 0);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         assert(t.tm_min == 0);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         assert(t.tm_sec == 0);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(err == std::ios_base::failbit);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"23:59:61";
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        t = std::tm();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+8);
904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)//         assert(t.tm_hour == 0);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         assert(t.tm_min == 0);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         assert(t.tm_sec == 0);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(err == (std::ios_base::failbit | std::ios_base::eofbit));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t in[] = L"2:43:221";
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        assert(i.base() == in+7);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.tm_hour == 2);
102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        assert(t.tm_min == 43);
1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        assert(t.tm_sec == 22);
1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        assert(err == std::ios_base::goodbit);
1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        const wchar_t in[] = L"2.43:221";
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        err = std::ios_base::goodbit;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        t = std::tm();
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(i.base() == in+1);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         assert(t.tm_hour == 0);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         assert(t.tm_min == 0);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         assert(t.tm_sec == 0);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(err == std::ios_base::failbit);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)