1 #!/usr/bin/env python 2 3 """ 4 Test qualifiers for recurring events. 5 6 Copyright (C) 2014, 2015, 2017 Paul Boddie <paul@boddie.org.uk> 7 8 This program is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free Software 10 Foundation; either version 3 of the License, or (at your option) any later 11 version. 12 13 This program is distributed in the hope that it will be useful, but WITHOUT 14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 16 details. 17 18 You should have received a copy of the GNU General Public License along with 19 this program. If not, see <http://www.gnu.org/licenses/>. 20 """ 21 22 from vRecurrence import * 23 import sys 24 25 def show(l): 26 for x in l: 27 print x 28 print 29 30 def select(dt, qualifiers): 31 sel = make_selectors(qualifiers) 32 show(sel) 33 l = get_datetime_structure(dt) 34 show(l) 35 csel = combine_datetime_with_selectors(dt, sel) 36 show(csel) 37 38 s = get_selector(dt, sel) 39 csel = get_selectors_from_selector(s) 40 show(csel) 41 return s 42 43 def test1(): 44 qualifiers = [ 45 ("YEARLY", {"interval" : 1}) 46 ] 47 dt = (1997, 11, 2) 48 s = select(dt, qualifiers) 49 50 l = s.materialise(dt, (2003, 12, 24)) 51 print len(l) == 7, 7, len(l) 52 print l[0] == (1997, 11, 2), (1997, 11, 2), l[0] 53 print l[-1] == (2003, 11, 2), (2003, 11, 2), l[-1] 54 print 55 56 def test2(): 57 qualifiers = [ 58 ("YEARLY", {"interval" : 2}), 59 ("BYMONTH", {"values" : [1]}), 60 ("BYDAY", {"values" : [(7, None)]}), 61 ("BYHOUR", {"values" : [8, 9]}), 62 ("BYMINUTE", {"values" : [30]}) 63 ] 64 dt = (1997, 1, 5, 8, 30, 0) 65 s = select(dt, qualifiers) 66 67 l = s.materialise(dt, (2003, 12, 24, 0, 0, 0)) 68 print len(l) == 34, 34, len(l) 69 print l[0] == (1997, 1, 5, 8, 30, 0), (1997, 1, 5, 8, 30, 0), l[0] 70 print l[-1] == (2003, 1, 26, 9, 30, 0), (2003, 1, 26, 9, 30, 0), l[-1] 71 print 72 73 def test3(): 74 qualifiers = [ 75 ("DAILY", {"interval" : 1}), 76 ("COUNT", {"values" : [10]}) 77 ] 78 dt = (1997, 9, 2, 9, 0, 0) 79 s = select(dt, qualifiers) 80 81 l = s.materialise(dt, (1997, 12, 24)) 82 print len(l) == 10, 10, len(l) 83 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 84 print l[-1] == (1997, 9, 11, 9, 0, 0), (1997, 9, 11, 9, 0, 0), l[-1] 85 print 86 87 def test4(): 88 qualifiers = [ 89 ("DAILY", {"interval" : 1}) 90 ] 91 dt = (1997, 9, 2, 9, 0, 0) 92 s = select(dt, qualifiers) 93 94 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 95 print len(l) == 113, 113, len(l) 96 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 97 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 98 print 99 100 def test5(): 101 qualifiers = get_qualifiers(["FREQ=DAILY", "UNTIL=19971224T000000Z"]) 102 dt = (1997, 9, 2, 9, 0, 0) 103 s = select(dt, qualifiers) 104 105 l = s.materialise(dt, (1997, 12, 25, 0, 0, 0), True) 106 print len(l) == 113, 113, len(l) 107 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 108 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 109 print 110 111 # See also test43. 112 113 def test6(): 114 qualifiers = [ 115 ("DAILY", {"interval" : 2}) 116 ] 117 dt = (1997, 9, 2, 9, 0, 0) 118 s = select(dt, qualifiers) 119 120 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 121 print len(l) == 57, 57, len(l) 122 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 123 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 124 print 125 126 def test7(): 127 qualifiers = [ 128 ("WEEKLY", {"interval" : 1}) 129 ] 130 dt = (1997, 9, 2, 9, 0, 0) 131 s = select(dt, qualifiers) 132 133 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 134 print len(l) == 17, 17, len(l) 135 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 136 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 137 print 138 139 def test8(): 140 qualifiers = [ 141 ("DAILY", {"interval" : 10}), 142 ("COUNT", {"values" : [5]}) 143 ] 144 dt = (1997, 9, 2, 9, 0, 0) 145 s = select(dt, qualifiers) 146 147 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 148 print len(l) == 5, 5, len(l) 149 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 150 print l[-1] == (1997, 10, 12, 9, 0, 0), (1997, 10, 12, 9, 0, 0), l[-1] 151 print 152 153 def test9(): 154 qualifiers = [ 155 ("YEARLY", {"interval" : 1}), 156 ("BYMONTH", {"values" : [1]}), 157 ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None), (6, None), (7, None)]}) 158 ] 159 dt = (1998, 1, 1, 9, 0, 0) 160 s = select(dt, qualifiers) 161 162 l = s.materialise(dt, (2000, 1, 31, 14, 0, 0)) 163 print len(l) == 93, 93, len(l) 164 print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0] 165 print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1] 166 print 167 168 def test10(): 169 qualifiers = [ 170 ("DAILY", {"interval" : 1}), 171 ("BYMONTH", {"values" : [1]}) 172 ] 173 dt = (1998, 1, 1, 9, 0, 0) 174 s = select(dt, qualifiers) 175 176 l = s.materialise(dt, (2000, 1, 31, 14, 0, 0)) 177 print len(l) == 93, 93, len(l) 178 print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0] 179 print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1] 180 print 181 182 def test11(): 183 qualifiers = [ 184 ("WEEKLY", {"interval" : 1}), 185 ("COUNT", {"values" : [10]}) 186 ] 187 dt = (1997, 9, 2, 9, 0, 0) 188 s = select(dt, qualifiers) 189 190 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 191 print len(l) == 10, 10, len(l) 192 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 193 print l[-1] == (1997, 11, 4, 9, 0, 0), (1997, 11, 4, 9, 0, 0), l[-1] 194 print 195 196 def test12(): 197 qualifiers = [ 198 ("WEEKLY", {"interval" : 1}) 199 ] 200 dt = (1997, 9, 2, 9, 0, 0) 201 s = select(dt, qualifiers) 202 203 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 204 print len(l) == 17, 17, len(l) 205 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 206 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 207 print 208 209 def test13(): 210 qualifiers = [ 211 ("WEEKLY", {"interval" : 1}) 212 ] 213 dt = (1997, 9, 2) 214 s = select(dt, qualifiers) 215 216 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 217 print len(l) == 17, 17, len(l) 218 print l[0] == (1997, 9, 2), (1997, 9, 2), l[0] 219 print l[-1] == (1997, 12, 23), (1997, 12, 23), l[-1] 220 print 221 222 def test14(): 223 qualifiers = [ 224 ("WEEKLY", {"interval" : 2}) 225 ] 226 dt = (1997, 9, 2, 9, 0, 0) 227 s = select(dt, qualifiers) 228 229 l = s.materialise(dt, (1998, 2, 20, 0, 0, 0)) 230 print len(l) == 13, 13, len(l) 231 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 232 print l[-1] == (1998, 2, 17, 9, 0, 0), (1998, 2, 17, 9, 0, 0), l[-1] 233 print 234 235 def test15(): 236 qualifiers = [ 237 ("WEEKLY", {"interval" : 1}), 238 ("BYDAY", {"values" : [(2, None), (4, None)]}) 239 ] 240 dt = (1997, 9, 2, 9, 0, 0) 241 s = select(dt, qualifiers) 242 243 l = s.materialise(dt, (1997, 10, 7, 9, 0, 0)) 244 print len(l) == 10, 10, len(l) 245 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 246 print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1] 247 print 248 249 def test16(): 250 qualifiers = [ 251 ("WEEKLY", {"interval" : 1}), 252 ("BYDAY", {"values" : [(2, None), (4, None)]}), 253 ("COUNT", {"values" : [10]}) 254 ] 255 dt = (1997, 9, 2, 9, 0, 0) 256 s = select(dt, qualifiers) 257 258 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 259 print len(l) == 10, 10, len(l) 260 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 261 print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1] 262 print 263 264 def test17(): 265 qualifiers = [ 266 ("WEEKLY", {"interval" : 2}), 267 ("BYDAY", {"values" : [(1, None), (3, None), (5, None)]}) 268 ] 269 dt = (1997, 9, 1, 9, 0, 0) 270 s = select(dt, qualifiers) 271 272 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 273 print len(l) == 25, 25, len(l) 274 print l[0] == (1997, 9, 1, 9, 0, 0), (1997, 9, 1, 9, 0, 0), l[0] 275 print l[-1] == (1997, 12, 22, 9, 0, 0), (1997, 12, 22, 9, 0, 0), l[-1] 276 print 277 278 def test18(): 279 qualifiers = [ 280 ("WEEKLY", {"interval" : 2}), 281 ("BYDAY", {"values" : [(2, None), (4, None)]}), 282 ("COUNT", {"values" : [8]}) 283 ] 284 dt = (1997, 9, 2, 9, 0, 0) 285 s = select(dt, qualifiers) 286 287 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 288 print len(l) == 8, 8, len(l) 289 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 290 print l[-1] == (1997, 10, 16, 9, 0, 0), (1997, 10, 16, 9, 0, 0), l[-1] 291 print 292 293 def test19(): 294 qualifiers = [ 295 ("MONTHLY", {"interval" : 1}), 296 ("BYDAY", {"values" : [(5, 1)]}), 297 ("COUNT", {"values" : [10]}) 298 ] 299 dt = (1997, 9, 5, 9, 0, 0) 300 s = select(dt, qualifiers) 301 302 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 303 print len(l) == 10, 10, len(l) 304 print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0] 305 print l[-1] == (1998, 6, 5, 9, 0, 0), (1998, 6, 5, 9, 0, 0), l[-1] 306 print 307 308 def test20(): 309 qualifiers = [ 310 ("MONTHLY", {"interval" : 1}), 311 ("BYDAY", {"values" : [(5, 1)]}) 312 ] 313 dt = (1997, 9, 5, 9, 0, 0) 314 s = select(dt, qualifiers) 315 316 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 317 print len(l) == 4, 4, len(l) 318 print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0] 319 print l[-1] == (1997, 12, 5, 9, 0, 0), (1997, 12, 5, 9, 0, 0), l[-1] 320 print 321 322 def test21(): 323 qualifiers = [ 324 ("MONTHLY", {"interval" : 2}), 325 ("BYDAY", {"values" : [(7, 1), (7, -1)]}), 326 ("COUNT", {"values" : [10]}) 327 ] 328 dt = (1997, 9, 7, 9, 0, 0) 329 s = select(dt, qualifiers) 330 331 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 332 print len(l) == 10, 10, len(l) 333 print l[0] == (1997, 9, 7, 9, 0, 0), (1997, 9, 7, 9, 0, 0), l[0] 334 print l[-1] == (1998, 5, 31, 9, 0, 0), (1998, 5, 31, 9, 0, 0), l[-1] 335 print 336 337 def test22(): 338 qualifiers = [ 339 ("MONTHLY", {"interval" : 1}), 340 ("BYDAY", {"values" : [(1, -2)]}), 341 ("COUNT", {"values" : [6]}) 342 ] 343 dt = (1997, 9, 22, 9, 0, 0) 344 s = select(dt, qualifiers) 345 346 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 347 print len(l) == 6, 6, len(l) 348 print l[0] == (1997, 9, 22, 9, 0, 0), (1997, 9, 22, 9, 0, 0), l[0] 349 print l[-1] == (1998, 2, 16, 9, 0, 0), (1998, 2, 16, 9, 0, 0), l[-1] 350 print 351 352 def test23(): 353 qualifiers = [ 354 ("MONTHLY", {"interval" : 1}), 355 ("BYMONTHDAY", {"values" : [-3]}), 356 ("COUNT", {"values" : [6]}) 357 ] 358 dt = (1997, 9, 28, 9, 0, 0) 359 s = select(dt, qualifiers) 360 361 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 362 print len(l) == 6, 6, len(l) 363 print l[0] == (1997, 9, 28, 9, 0, 0), (1997, 9, 28, 9, 0, 0), l[0] 364 print l[-1] == (1998, 2, 26, 9, 0, 0), (1998, 2, 26, 9, 0, 0), l[-1] 365 print 366 367 def test24(): 368 qualifiers = [ 369 ("MONTHLY", {"interval" : 1}), 370 ("BYMONTHDAY", {"values" : [15, 2]}), # test ordering 371 ("COUNT", {"values" : [10]}) 372 ] 373 dt = (1997, 9, 2, 9, 0, 0) 374 s = select(dt, qualifiers) 375 376 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 377 print len(l) == 10, 10, len(l) 378 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 379 print l[-1] == (1998, 1, 15, 9, 0, 0), (1998, 1, 15, 9, 0, 0), l[-1] 380 print 381 382 def test25(): 383 qualifiers = [ 384 ("MONTHLY", {"interval" : 1}), 385 ("BYMONTHDAY", {"values" : [1, -1]}), 386 ("COUNT", {"values" : [10]}) 387 ] 388 dt = (1997, 9, 30, 9, 0, 0) 389 s = select(dt, qualifiers) 390 391 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 392 print len(l) == 10, 10, len(l) 393 print l[0] == (1997, 9, 30, 9, 0, 0), (1997, 9, 30, 9, 0, 0), l[0] 394 print l[-1] == (1998, 2, 1, 9, 0, 0), (1998, 2, 1, 9, 0, 0), l[-1] 395 print 396 397 def test26(): 398 qualifiers = [ 399 ("MONTHLY", {"interval" : 18}), 400 ("BYMONTHDAY", {"values" : [10, 11, 12, 13, 14, 15]}), 401 ("COUNT", {"values" : [10]}) 402 ] 403 dt = (1997, 9, 10, 9, 0, 0) 404 s = select(dt, qualifiers) 405 406 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 407 print len(l) == 10, 10, len(l) 408 print l[0] == (1997, 9, 10, 9, 0, 0), (1997, 9, 10, 9, 0, 0), l[0] 409 print l[-1] == (1999, 3, 13, 9, 0, 0), (1999, 3, 13, 9, 0, 0), l[-1] 410 print 411 412 def test27(): 413 qualifiers = [ 414 ("MONTHLY", {"interval" : 2}), 415 ("BYDAY", {"values" : [(2, None)]}) 416 ] 417 dt = (1997, 9, 2, 9, 0, 0) 418 s = select(dt, qualifiers) 419 420 l = s.materialise(dt, (1998, 4, 1, 0, 0, 0)) 421 print len(l) == 18, 18, len(l) 422 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 423 print l[-1] == (1998, 3, 31, 9, 0, 0), (1998, 3, 31, 9, 0, 0), l[-1] 424 print 425 426 def test28(): 427 qualifiers = [ 428 ("YEARLY", {"interval" : 1}), 429 ("BYMONTH", {"values" : [6, 7]}), 430 ("COUNT", {"values" : [10]}) 431 ] 432 dt = (1997, 6, 10, 9, 0, 0) 433 s = select(dt, qualifiers) 434 435 l = s.materialise(dt, (2001, 12, 24, 0, 0, 0)) 436 print len(l) == 10, 10, len(l) 437 print l[0] == (1997, 6, 10, 9, 0, 0), (1997, 6, 10, 9, 0, 0), l[0] 438 print l[-1] == (2001, 7, 10, 9, 0, 0), (2001, 7, 10, 9, 0, 0), l[-1] 439 print 440 441 def test29(): 442 qualifiers = [ 443 ("YEARLY", {"interval" : 2}), 444 ("BYMONTH", {"values" : [1, 2, 3]}), 445 ("COUNT", {"values" : [10]}) 446 ] 447 dt = (1997, 3, 10, 9, 0, 0) 448 s = select(dt, qualifiers) 449 450 l = s.materialise(dt, (2003, 12, 24, 0, 0, 0)) 451 print len(l) == 10, 10, len(l) 452 print l[0] == (1997, 3, 10, 9, 0, 0), (1997, 3, 10, 9, 0, 0), l[0] 453 print l[-1] == (2003, 3, 10, 9, 0, 0), (2003, 3, 10, 9, 0, 0), l[-1] 454 print 455 456 def test30(): 457 qualifiers = [ 458 ("YEARLY", {"interval" : 3}), 459 ("BYYEARDAY", {"values" : [1, 100, 200]}), 460 ("COUNT", {"values" : [10]}) 461 ] 462 dt = (1997, 1, 1, 9, 0, 0) 463 s = select(dt, qualifiers) 464 465 l = s.materialise(dt, (2006, 2, 1, 0, 0, 0)) 466 print len(l) == 10, 10, len(l) 467 print l[0] == (1997, 1, 1, 9, 0, 0), (1997, 1, 1, 9, 0, 0), l[0] 468 print l[-1] == (2006, 1, 1, 9, 0, 0), (2006, 1, 1, 9, 0, 0), l[-1] 469 print 470 471 def test31(): 472 qualifiers = [ 473 ("YEARLY", {"interval" : 1}), 474 ("BYDAY", {"values" : [(1, 20)]}) 475 ] 476 dt = (1997, 5, 19, 9, 0, 0) 477 s = select(dt, qualifiers) 478 479 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 480 print len(l) == 3, 3, len(l) 481 print l[0] == (1997, 5, 19, 9, 0, 0), (1997, 5, 19, 9, 0, 0), l[0] 482 print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1] 483 print 484 485 def test32(): 486 qualifiers = [ 487 ("YEARLY", {"interval" : 1}), 488 ("BYWEEKNO", {"values" : [20]}), 489 ("BYDAY", {"values" : [(1, None)]}) 490 ] 491 dt = (1997, 5, 12, 9, 0, 0) 492 s = select(dt, qualifiers) 493 494 """ 495 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 496 print len(l) == 3, 3, len(l) 497 print l[0] == (1997, 5, 12, 9, 0, 0), (1997, 5, 12, 9, 0, 0), l[0] 498 print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1] 499 print 500 """ 501 502 def test33(): 503 qualifiers = [ 504 ("YEARLY", {"interval" : 1}), 505 ("BYMONTH", {"values" : [3]}), 506 ("BYDAY", {"values" : [(4, None)]}) 507 ] 508 dt = (1997, 3, 13, 9, 0, 0) 509 s = select(dt, qualifiers) 510 511 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 512 print len(l) == 11, 11, len(l) 513 print l[0] == (1997, 3, 13, 9, 0, 0), (1997, 3, 13, 9, 0, 0), l[0] 514 print l[-1] == (1999, 3, 25, 9, 0, 0), (1999, 3, 25, 9, 0, 0), l[-1] 515 print 516 517 def test34(): 518 qualifiers = [ 519 ("YEARLY", {"interval" : 1}), 520 ("BYMONTH", {"values" : [6, 7, 8]}), 521 ("BYDAY", {"values" : [(4, None)]}) 522 ] 523 dt = (1997, 6, 5, 9, 0, 0) 524 s = select(dt, qualifiers) 525 526 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 527 print len(l) == 39, 39, len(l) 528 print l[0] == (1997, 6, 5, 9, 0, 0), (1997, 6, 5, 9, 0, 0), l[0] 529 print l[-1] == (1999, 8, 26, 9, 0, 0), (1999, 8, 26, 9, 0, 0), l[-1] 530 print 531 532 def test35(): 533 qualifiers = [ 534 ("MONTHLY", {"interval" : 1}), 535 ("BYMONTHDAY", {"values" : [13]}), 536 ("BYDAY", {"values" : [(5, None)]}) 537 ] 538 dt = (1997, 9, 2, 9, 0, 0) 539 s = select(dt, qualifiers) 540 541 l = s.materialise(dt, (2000, 12, 24, 0, 0, 0)) 542 print len(l) == 6, 6, len(l) 543 print l[1] == (1998, 2, 13, 9, 0, 0), (1998, 2, 13, 9, 0, 0), l[1] 544 print l[-1] == (2000, 10, 13, 9, 0, 0), (2000, 10, 13, 9, 0, 0), l[-1] 545 print 546 547 def test36(): 548 qualifiers = [ 549 ("MONTHLY", {"interval" : 1}), 550 ("BYMONTHDAY", {"values" : [7, 8, 9, 10, 11, 12, 13]}), 551 ("BYDAY", {"values" : [(6, None)]}) 552 ] 553 dt = (1997, 9, 13, 9, 0, 0) 554 s = select(dt, qualifiers) 555 556 l = s.materialise(dt, (1998, 6, 30, 0, 0, 0)) 557 print len(l) == 10, 10, len(l) 558 print l[0] == (1997, 9, 13, 9, 0, 0), (1997, 9, 13, 9, 0, 0), l[0] 559 print l[-1] == (1998, 6, 13, 9, 0, 0), (1998, 6, 13, 9, 0, 0), l[-1] 560 print 561 562 def test37(): 563 qualifiers = [ 564 ("YEARLY", {"interval" : 4}), 565 ("BYMONTH", {"values" : [11]}), 566 ("BYMONTHDAY", {"values" : [2, 3, 4, 5, 6, 7, 8]}), 567 ("BYDAY", {"values" : [(2, None)]}) 568 ] 569 dt = (1996, 11, 5, 9, 0, 0) 570 s = select(dt, qualifiers) 571 572 l = s.materialise(dt, (2004, 12, 24, 0, 0, 0)) 573 print len(l) == 3, 3, len(l) 574 print l[0] == (1996, 11, 5, 9, 0, 0), (1996, 11, 5, 9, 0, 0), l[0] 575 print l[-1] == (2004, 11, 2, 9, 0, 0), (2004, 11, 2, 9, 0, 0), l[-1] 576 print 577 578 def test38(): 579 qualifiers = [ 580 ("MONTHLY", {"interval" : 1}), 581 ("BYDAY", {"values" : [(2, None), (3, None), (4, None)]}), 582 ("BYSETPOS", {"values" : [3]}), 583 ("COUNT", {"values" : [3]}) 584 ] 585 dt = (1997, 9, 4, 9, 0, 0) 586 s = select(dt, qualifiers) 587 588 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 589 print len(l) == 3, 3, len(l) 590 print l[0] == (1997, 9, 4, 9, 0, 0), (1997, 9, 4, 9, 0, 0), l[0] 591 print l[-1] == (1997, 11, 6, 9, 0, 0), (1997, 11, 6, 9, 0, 0), l[-1] 592 print 593 594 def test39(): 595 qualifiers = [ 596 ("MONTHLY", {"interval" : 1}), 597 ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None)]}), 598 ("BYSETPOS", {"values" : [-2]}) 599 ] 600 dt = (1997, 9, 29, 9, 0, 0) 601 s = select(dt, qualifiers) 602 603 l = s.materialise(dt, (1998, 4, 1, 0, 0, 0)) 604 print len(l) == 7, 7, len(l) 605 print l[0] == (1997, 9, 29, 9, 0, 0), (1997, 9, 29, 9, 0, 0), l[0] 606 print l[-1] == (1998, 3, 30, 9, 0, 0), (1998, 3, 30, 9, 0, 0), l[-1] 607 print 608 609 def test40(): 610 qualifiers = get_qualifiers(["BYMONTHDAY=5", "FREQ=HOURLY", "INTERVAL=12"]) 611 dt = (2017, 6, 13) 612 s = select(dt, qualifiers) 613 614 l = s.materialise(dt, (2019, 1, 1)) 615 print len(l) == 37, 37, len(l) 616 print l[1] == (2017, 7, 5, 0), (2017, 7, 5, 0), l[1] 617 print l[-1] == (2018, 12, 5, 12), (2018, 12, 5, 12), l[-1] 618 print 619 620 def test41(): 621 qualifiers = get_qualifiers(["FREQ=DAILY", "BYMONTH=1"]) 622 dt = (2017, 6, 13) 623 s = select(dt, qualifiers) 624 625 l = s.materialise(dt, (2019, 1, 1)) 626 print len(l) == 32, 32, len(l) 627 print l[1] == (2018, 1, 1), (2018, 1, 1), l[1] 628 print l[-1] == (2018, 1, 31), (2018, 1, 31), l[-1] 629 print 630 631 def test42(): 632 qualifiers = get_qualifiers(["FREQ=MONTHLY", "BYDAY=WE,1FR,2MO,2FR"]) 633 dt = (2017, 10, 15) 634 s = select(dt, qualifiers) 635 636 l = s.materialise(dt, (2018, 1, 1)) 637 print len(l) == 18, 18, len(l) 638 print l[1] == (2017, 10, 18), (2017, 10, 18), l[1] 639 print l[-1] == (2017, 12, 27), (2017, 12, 27), l[-1] 640 print 641 642 def test43(): 643 qualifiers = get_qualifiers(["FREQ=DAILY", "UNTIL=19971224T090000Z"]) 644 dt = (1997, 9, 2, 9, 0, 0) 645 s = select(dt, qualifiers) 646 647 l = s.materialise(dt, (1997, 12, 25, 0, 0, 0), True) 648 print len(l) == 114, 114, len(l) 649 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 650 print l[-1] == (1997, 12, 24, 9, 0, 0), (1997, 12, 24, 9, 0, 0), l[-1] 651 print 652 653 # See also test5. 654 655 test0 = lambda: 0 # started at 1 above 656 657 tests = [ 658 test0, test1, test2, test3, test4, test5, test6, test7, test8, test9, 659 test10, test11, test12, test13, test14, test15, test16, test17, test18, test19, 660 test20, test21, test22, test23, test24, test25, test26, test27, test28, test29, 661 test30, test31, test32, test33, test34, test35, test36, test37, test38, test39, 662 test40, test41, test42, test43 663 ] 664 665 if __name__ == "__main__": 666 args = sys.argv[1:] 667 if args: 668 for n in map(int, args): 669 tests[n]() 670 else: 671 for test in tests: 672 test() 673 674 # vim: tabstop=4 expandtab shiftwidth=4