| 27 | #include <sstream> |
| 28 | |
| 29 | void |
| 30 | test_a() |
| 31 | { |
| 32 | using namespace date; |
| 33 | { |
| 34 | // correct abbreviation |
| 35 | std::istringstream in{"Sun 2016-12-11"}; |
| 36 | sys_days tp; |
| 37 | in >> parse("%a %F", tp); |
| 38 | assert(!in.fail()); |
| 39 | assert(!in.bad()); |
| 40 | assert(!in.eof()); |
| 41 | assert(tp == 2016_y/12/11); |
| 42 | } |
| 43 | { |
| 44 | // correct abbreviation |
| 45 | std::istringstream in{"Sun 2016-12-11"}; |
| 46 | sys_days tp; |
| 47 | in >> parse("%A %F", tp); |
| 48 | // this may fail with libstdc++, see https://github.com/HowardHinnant/date/issues/388 |
| 49 | // possible workaround: compile date.h with -DONLY_C_LOCALE=1 |
| 50 | assert(!in.fail()); |
| 51 | assert(!in.bad()); |
| 52 | assert(!in.eof()); |
| 53 | assert(tp == 2016_y/12/11); |
| 54 | } |
| 55 | { |
| 56 | // correct full name |
| 57 | std::istringstream in{"Sunday 2016-12-11"}; |
| 58 | sys_days tp; |
| 59 | in >> parse("%a %F", tp); |
| 60 | assert(!in.fail()); |
| 61 | assert(!in.bad()); |
| 62 | assert(!in.eof()); |
| 63 | assert(tp == 2016_y/12/11); |
| 64 | } |
| 65 | { |
| 66 | // correct full name |
| 67 | std::istringstream in{"Sunday 2016-12-11"}; |
| 68 | sys_days tp; |
| 69 | in >> parse("%A %F", tp); |
| 70 | assert(!in.fail()); |
| 71 | assert(!in.bad()); |
| 72 | assert(!in.eof()); |
| 73 | assert(tp == 2016_y/12/11); |
| 74 | } |
| 75 | { |
| 76 | // not a valid name |
| 77 | std::istringstream in{"Dec 2016-12-11"}; |
| 78 | sys_days tp; |
| 79 | in >> parse("%a %F", tp); |
| 80 | assert( in.fail()); |
| 81 | assert(!in.bad()); |
| 82 | assert(!in.eof()); |
| 83 | assert(tp == 1970_y/1/1); |
| 84 | } |
| 85 | { |
| 86 | // wrong name |