1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <locale> 11 12// class time_put<charT, OutputIterator> 13 14// iter_type put(iter_type s, ios_base& str, char_type fill, const tm* t, 15// char format, char modifier = 0) const; 16 17// TODO: investigation needed 18// XFAIL: linux-gnu 19 20#include <locale> 21#include <cassert> 22#include "test_iterators.h" 23 24typedef std::time_put<char, output_iterator<char*> > F; 25 26class my_facet 27 : public F 28{ 29public: 30 explicit my_facet(std::size_t refs = 0) 31 : F(refs) {} 32}; 33 34int main() 35{ 36 const my_facet f(1); 37 char str[200]; 38 output_iterator<char*> iter; 39 tm t = {0}; 40 t.tm_sec = 6; 41 t.tm_min = 3; 42 t.tm_hour = 13; 43 t.tm_mday = 2; 44 t.tm_mon = 4; 45 t.tm_year = 109; 46 t.tm_wday = 6; 47 t.tm_yday = -1; 48 t.tm_isdst = 1; 49 std::ios ios(0); 50 { 51 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'A'); 52 std::string ex(str, iter.base()); 53 assert(ex == "Saturday"); 54 } 55 { 56 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'a'); 57 std::string ex(str, iter.base()); 58 assert(ex == "Sat"); 59 } 60 { 61 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'B'); 62 std::string ex(str, iter.base()); 63 assert(ex == "May"); 64 } 65 { 66 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'b'); 67 std::string ex(str, iter.base()); 68 assert(ex == "May"); 69 } 70 { 71 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'C'); 72 std::string ex(str, iter.base()); 73 assert(ex == "20"); 74 } 75 { 76 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'c'); 77 std::string ex(str, iter.base()); 78 assert(ex == "Sat May 2 13:03:06 2009"); 79 } 80 { 81 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'D'); 82 std::string ex(str, iter.base()); 83 assert(ex == "05/02/09"); 84 } 85 { 86 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'd'); 87 std::string ex(str, iter.base()); 88 assert(ex == "02"); 89 } 90 { 91 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'c', 'E'); 92 std::string ex(str, iter.base()); 93 assert(ex == "Sat May 2 13:03:06 2009"); 94 } 95 { 96 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'C', 'E'); 97 std::string ex(str, iter.base()); 98 assert(ex == "20"); 99 } 100 { 101 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'x', 'E'); 102 std::string ex(str, iter.base()); 103 assert(ex == "05/02/09"); 104 } 105 { 106 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'X', 'E'); 107 std::string ex(str, iter.base()); 108 assert(ex == "13:03:06"); 109 } 110 { 111 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'y', 'E'); 112 std::string ex(str, iter.base()); 113 assert(ex == "09"); 114 } 115 { 116 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'Y', 'E'); 117 std::string ex(str, iter.base()); 118 assert(ex == "2009"); 119 } 120 { 121 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'd', 'O'); 122 std::string ex(str, iter.base()); 123 assert(ex == "02"); 124 } 125 { 126 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'e', 'O'); 127 std::string ex(str, iter.base()); 128 assert(ex == " 2"); 129 } 130 { 131 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'H', 'O'); 132 std::string ex(str, iter.base()); 133 assert(ex == "13"); 134 } 135 { 136 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'I', 'O'); 137 std::string ex(str, iter.base()); 138 assert(ex == "01"); 139 } 140 { 141 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'm', 'O'); 142 std::string ex(str, iter.base()); 143 assert(ex == "05"); 144 } 145 { 146 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'M', 'O'); 147 std::string ex(str, iter.base()); 148 assert(ex == "03"); 149 } 150 { 151 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'S', 'O'); 152 std::string ex(str, iter.base()); 153 assert(ex == "06"); 154 } 155 { 156 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'u', 'O'); 157 std::string ex(str, iter.base()); 158 assert(ex == "6"); 159 } 160 { 161 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'U', 'O'); 162 std::string ex(str, iter.base()); 163 assert(ex == "00"); 164 } 165 { 166 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'V', 'O'); 167 std::string ex(str, iter.base()); 168 assert(ex == "52"); 169 } 170 { 171 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'w', 'O'); 172 std::string ex(str, iter.base()); 173 assert(ex == "6"); 174 } 175 { 176 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'W', 'O'); 177 std::string ex(str, iter.base()); 178 assert(ex == "00"); 179 } 180 { 181 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'y', 'O'); 182 std::string ex(str, iter.base()); 183 assert(ex == "09"); 184 } 185 { 186 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'B', 'O'); 187 std::string ex(str, iter.base()); 188 assert(ex == "May"); 189 } 190 { 191 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'e'); 192 std::string ex(str, iter.base()); 193 assert(ex == " 2"); 194 } 195 { 196 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'F'); 197 std::string ex(str, iter.base()); 198 assert(ex == "2009-05-02"); 199 } 200 { 201 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'G'); 202 std::string ex(str, iter.base()); 203 assert(ex == "2008"); 204 } 205 { 206 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'g'); 207 std::string ex(str, iter.base()); 208 assert(ex == "08"); 209 } 210 { 211 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'H'); 212 std::string ex(str, iter.base()); 213 assert(ex == "13"); 214 } 215 { 216 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'h'); 217 std::string ex(str, iter.base()); 218 assert(ex == "May"); 219 } 220 { 221 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'I'); 222 std::string ex(str, iter.base()); 223 assert(ex == "01"); 224 } 225 { 226 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'j'); 227 std::string ex(str, iter.base()); 228 assert(ex == "000"); 229 } 230 { 231 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'k'); 232 std::string ex(str, iter.base()); 233 assert(ex == "13"); 234 } 235 { 236 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'l'); 237 std::string ex(str, iter.base()); 238 assert(ex == " 1"); 239 } 240 { 241 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'M'); 242 std::string ex(str, iter.base()); 243 assert(ex == "03"); 244 } 245 { 246 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'm'); 247 std::string ex(str, iter.base()); 248 assert(ex == "05"); 249 } 250 { 251 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'n'); 252 std::string ex(str, iter.base()); 253 assert(ex == "\n"); 254 } 255 { 256 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'p'); 257 std::string ex(str, iter.base()); 258 assert(ex == "PM"); 259 } 260 { 261 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'R'); 262 std::string ex(str, iter.base()); 263 assert(ex == "13:03"); 264 } 265 { 266 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'r'); 267 std::string ex(str, iter.base()); 268 assert(ex == "01:03:06 PM"); 269 } 270 { 271 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'S'); 272 std::string ex(str, iter.base()); 273 assert(ex == "06"); 274 } 275 { 276 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 's'); 277 std::string ex(str, iter.base()); 278// assert(ex == "1241283786"); depends on time zone 279 } 280 { 281 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'T'); 282 std::string ex(str, iter.base()); 283 assert(ex == "13:03:06"); 284 } 285 { 286 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 't'); 287 std::string ex(str, iter.base()); 288 assert(ex == "\t"); 289 } 290 { 291 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'U'); 292 std::string ex(str, iter.base()); 293 assert(ex == "00"); 294 } 295 { 296 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'u'); 297 std::string ex(str, iter.base()); 298 assert(ex == "6"); 299 } 300 { 301 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'V'); 302 std::string ex(str, iter.base()); 303 assert(ex == "52"); 304 } 305 { 306 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'v'); 307 std::string ex(str, iter.base()); 308 assert(ex == " 2-May-2009"); 309 } 310 { 311 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'W'); 312 std::string ex(str, iter.base()); 313 assert(ex == "00"); 314 } 315 { 316 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'w'); 317 std::string ex(str, iter.base()); 318 assert(ex == "6"); 319 } 320 { 321 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'X'); 322 std::string ex(str, iter.base()); 323 assert(ex == "13:03:06"); 324 } 325 { 326 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'x'); 327 std::string ex(str, iter.base()); 328 assert(ex == "05/02/09"); 329 } 330 { 331 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'Y'); 332 std::string ex(str, iter.base()); 333 assert(ex == "2009"); 334 } 335 { 336 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'y'); 337 std::string ex(str, iter.base()); 338 assert(ex == "09"); 339 } 340 { 341 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'Z'); 342 std::string ex(str, iter.base()); 343// assert(ex == "EDT"); depends on time zone 344 } 345 { 346 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'z'); 347 std::string ex(str, iter.base()); 348// assert(ex == "-0400"); depends on time zone 349 } 350 { 351 iter = f.put(output_iterator<char*>(str), ios, '*', &t, '+'); 352 std::string ex(str, iter.base()); 353// assert(ex == "Sat May 2 13:03:06 EDT 2009"); depends on time zone 354 } 355 { 356 iter = f.put(output_iterator<char*>(str), ios, '*', &t, '%'); 357 std::string ex(str, iter.base()); 358 assert(ex == "%"); 359 } 360 { 361 iter = f.put(output_iterator<char*>(str), ios, '*', &t, '%', 'J'); 362 std::string ex(str, iter.base()); 363 assert(ex == "J%"); 364 } 365 { 366 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'J'); 367 std::string ex(str, iter.base()); 368 assert(ex == "J"); 369 } 370} 371