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