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"]) # UNTIL not converted 102 dt = (1997, 9, 2, 9, 0, 0) 103 s = select(dt, qualifiers) 104 105 l = s.materialise(dt, (1997, 12, 24, 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 def test6(): 112 qualifiers = [ 113 ("DAILY", {"interval" : 2}) 114 ] 115 dt = (1997, 9, 2, 9, 0, 0) 116 s = select(dt, qualifiers) 117 118 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 119 print len(l) == 57, 57, len(l) 120 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 121 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 122 print 123 124 def test7(): 125 qualifiers = [ 126 ("WEEKLY", {"interval" : 1}) 127 ] 128 dt = (1997, 9, 2, 9, 0, 0) 129 s = select(dt, qualifiers) 130 131 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 132 print len(l) == 17, 17, len(l) 133 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 134 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 135 print 136 137 def test8(): 138 qualifiers = [ 139 ("DAILY", {"interval" : 10}), 140 ("COUNT", {"values" : [5]}) 141 ] 142 dt = (1997, 9, 2, 9, 0, 0) 143 s = select(dt, qualifiers) 144 145 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 146 print len(l) == 5, 5, len(l) 147 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 148 print l[-1] == (1997, 10, 12, 9, 0, 0), (1997, 10, 12, 9, 0, 0), l[-1] 149 print 150 151 def test9(): 152 qualifiers = [ 153 ("YEARLY", {"interval" : 1}), 154 ("BYMONTH", {"values" : [1]}), 155 ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None), (6, None), (7, None)]}) 156 ] 157 dt = (1998, 1, 1, 9, 0, 0) 158 s = select(dt, qualifiers) 159 160 l = s.materialise(dt, (2000, 1, 31, 14, 0, 0)) 161 print len(l) == 93, 93, len(l) 162 print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0] 163 print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1] 164 print 165 166 def test10(): 167 qualifiers = [ 168 ("DAILY", {"interval" : 1}), 169 ("BYMONTH", {"values" : [1]}) 170 ] 171 dt = (1998, 1, 1, 9, 0, 0) 172 s = select(dt, qualifiers) 173 174 l = s.materialise(dt, (2000, 1, 31, 14, 0, 0)) 175 print len(l) == 93, 93, len(l) 176 print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0] 177 print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1] 178 print 179 180 def test11(): 181 qualifiers = [ 182 ("WEEKLY", {"interval" : 1}), 183 ("COUNT", {"values" : [10]}) 184 ] 185 dt = (1997, 9, 2, 9, 0, 0) 186 s = select(dt, qualifiers) 187 188 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 189 print len(l) == 10, 10, len(l) 190 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 191 print l[-1] == (1997, 11, 4, 9, 0, 0), (1997, 11, 4, 9, 0, 0), l[-1] 192 print 193 194 def test12(): 195 qualifiers = [ 196 ("WEEKLY", {"interval" : 1}) 197 ] 198 dt = (1997, 9, 2, 9, 0, 0) 199 s = select(dt, qualifiers) 200 201 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 202 print len(l) == 17, 17, len(l) 203 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 204 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 205 print 206 207 def test13(): 208 qualifiers = [ 209 ("WEEKLY", {"interval" : 1}) 210 ] 211 dt = (1997, 9, 2) 212 s = select(dt, qualifiers) 213 214 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 215 print len(l) == 17, 17, len(l) 216 print l[0] == (1997, 9, 2), (1997, 9, 2), l[0] 217 print l[-1] == (1997, 12, 23), (1997, 12, 23), l[-1] 218 print 219 220 def test14(): 221 qualifiers = [ 222 ("WEEKLY", {"interval" : 2}) 223 ] 224 dt = (1997, 9, 2, 9, 0, 0) 225 s = select(dt, qualifiers) 226 227 l = s.materialise(dt, (1998, 2, 20, 0, 0, 0)) 228 print len(l) == 13, 13, len(l) 229 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 230 print l[-1] == (1998, 2, 17, 9, 0, 0), (1998, 2, 17, 9, 0, 0), l[-1] 231 print 232 233 def test15(): 234 qualifiers = [ 235 ("WEEKLY", {"interval" : 1}), 236 ("BYDAY", {"values" : [(2, None), (4, None)]}) 237 ] 238 dt = (1997, 9, 2, 9, 0, 0) 239 s = select(dt, qualifiers) 240 241 l = s.materialise(dt, (1997, 10, 7, 9, 0, 0)) 242 print len(l) == 10, 10, len(l) 243 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 244 print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1] 245 print 246 247 def test16(): 248 qualifiers = [ 249 ("WEEKLY", {"interval" : 1}), 250 ("BYDAY", {"values" : [(2, None), (4, None)]}), 251 ("COUNT", {"values" : [10]}) 252 ] 253 dt = (1997, 9, 2, 9, 0, 0) 254 s = select(dt, qualifiers) 255 256 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 257 print len(l) == 10, 10, len(l) 258 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 259 print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1] 260 print 261 262 def test17(): 263 qualifiers = [ 264 ("WEEKLY", {"interval" : 2}), 265 ("BYDAY", {"values" : [(1, None), (3, None), (5, None)]}) 266 ] 267 dt = (1997, 9, 1, 9, 0, 0) 268 s = select(dt, qualifiers) 269 270 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 271 print len(l) == 25, 25, len(l) 272 print l[0] == (1997, 9, 1, 9, 0, 0), (1997, 9, 1, 9, 0, 0), l[0] 273 print l[-1] == (1997, 12, 22, 9, 0, 0), (1997, 12, 22, 9, 0, 0), l[-1] 274 print 275 276 def test18(): 277 qualifiers = [ 278 ("WEEKLY", {"interval" : 2}), 279 ("BYDAY", {"values" : [(2, None), (4, None)]}), 280 ("COUNT", {"values" : [8]}) 281 ] 282 dt = (1997, 9, 2, 9, 0, 0) 283 s = select(dt, qualifiers) 284 285 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 286 print len(l) == 8, 8, len(l) 287 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 288 print l[-1] == (1997, 10, 16, 9, 0, 0), (1997, 10, 16, 9, 0, 0), l[-1] 289 print 290 291 def test19(): 292 qualifiers = [ 293 ("MONTHLY", {"interval" : 1}), 294 ("BYDAY", {"values" : [(5, 1)]}), 295 ("COUNT", {"values" : [10]}) 296 ] 297 dt = (1997, 9, 5, 9, 0, 0) 298 s = select(dt, qualifiers) 299 300 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 301 print len(l) == 10, 10, len(l) 302 print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0] 303 print l[-1] == (1998, 6, 5, 9, 0, 0), (1998, 6, 5, 9, 0, 0), l[-1] 304 print 305 306 def test20(): 307 qualifiers = [ 308 ("MONTHLY", {"interval" : 1}), 309 ("BYDAY", {"values" : [(5, 1)]}) 310 ] 311 dt = (1997, 9, 5, 9, 0, 0) 312 s = select(dt, qualifiers) 313 314 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 315 print len(l) == 4, 4, len(l) 316 print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0] 317 print l[-1] == (1997, 12, 5, 9, 0, 0), (1997, 12, 5, 9, 0, 0), l[-1] 318 print 319 320 def test21(): 321 qualifiers = [ 322 ("MONTHLY", {"interval" : 2}), 323 ("BYDAY", {"values" : [(7, 1), (7, -1)]}), 324 ("COUNT", {"values" : [10]}) 325 ] 326 dt = (1997, 9, 7, 9, 0, 0) 327 s = select(dt, qualifiers) 328 329 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 330 print len(l) == 10, 10, len(l) 331 print l[0] == (1997, 9, 7, 9, 0, 0), (1997, 9, 7, 9, 0, 0), l[0] 332 print l[-1] == (1998, 5, 31, 9, 0, 0), (1998, 5, 31, 9, 0, 0), l[-1] 333 print 334 335 def test22(): 336 qualifiers = [ 337 ("MONTHLY", {"interval" : 1}), 338 ("BYDAY", {"values" : [(1, -2)]}), 339 ("COUNT", {"values" : [6]}) 340 ] 341 dt = (1997, 9, 22, 9, 0, 0) 342 s = select(dt, qualifiers) 343 344 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 345 print len(l) == 6, 6, len(l) 346 print l[0] == (1997, 9, 22, 9, 0, 0), (1997, 9, 22, 9, 0, 0), l[0] 347 print l[-1] == (1998, 2, 16, 9, 0, 0), (1998, 2, 16, 9, 0, 0), l[-1] 348 print 349 350 def test23(): 351 qualifiers = [ 352 ("MONTHLY", {"interval" : 1}), 353 ("BYMONTHDAY", {"values" : [-3]}), 354 ("COUNT", {"values" : [6]}) 355 ] 356 dt = (1997, 9, 28, 9, 0, 0) 357 s = select(dt, qualifiers) 358 359 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 360 print len(l) == 6, 6, len(l) 361 print l[0] == (1997, 9, 28, 9, 0, 0), (1997, 9, 28, 9, 0, 0), l[0] 362 print l[-1] == (1998, 2, 26, 9, 0, 0), (1998, 2, 26, 9, 0, 0), l[-1] 363 print 364 365 def test24(): 366 qualifiers = [ 367 ("MONTHLY", {"interval" : 1}), 368 ("BYMONTHDAY", {"values" : [15, 2]}), # test ordering 369 ("COUNT", {"values" : [10]}) 370 ] 371 dt = (1997, 9, 2, 9, 0, 0) 372 s = select(dt, qualifiers) 373 374 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 375 print len(l) == 10, 10, len(l) 376 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 377 print l[-1] == (1998, 1, 15, 9, 0, 0), (1998, 1, 15, 9, 0, 0), l[-1] 378 print 379 380 def test25(): 381 qualifiers = [ 382 ("MONTHLY", {"interval" : 1}), 383 ("BYMONTHDAY", {"values" : [1, -1]}), 384 ("COUNT", {"values" : [10]}) 385 ] 386 dt = (1997, 9, 30, 9, 0, 0) 387 s = select(dt, qualifiers) 388 389 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 390 print len(l) == 10, 10, len(l) 391 print l[0] == (1997, 9, 30, 9, 0, 0), (1997, 9, 30, 9, 0, 0), l[0] 392 print l[-1] == (1998, 2, 1, 9, 0, 0), (1998, 2, 1, 9, 0, 0), l[-1] 393 print 394 395 def test26(): 396 qualifiers = [ 397 ("MONTHLY", {"interval" : 18}), 398 ("BYMONTHDAY", {"values" : [10, 11, 12, 13, 14, 15]}), 399 ("COUNT", {"values" : [10]}) 400 ] 401 dt = (1997, 9, 10, 9, 0, 0) 402 s = select(dt, qualifiers) 403 404 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 405 print len(l) == 10, 10, len(l) 406 print l[0] == (1997, 9, 10, 9, 0, 0), (1997, 9, 10, 9, 0, 0), l[0] 407 print l[-1] == (1999, 3, 13, 9, 0, 0), (1999, 3, 13, 9, 0, 0), l[-1] 408 print 409 410 def test27(): 411 qualifiers = [ 412 ("MONTHLY", {"interval" : 2}), 413 ("BYDAY", {"values" : [(2, None)]}) 414 ] 415 dt = (1997, 9, 2, 9, 0, 0) 416 s = select(dt, qualifiers) 417 418 l = s.materialise(dt, (1998, 4, 1, 0, 0, 0)) 419 print len(l) == 18, 18, len(l) 420 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 421 print l[-1] == (1998, 3, 31, 9, 0, 0), (1998, 3, 31, 9, 0, 0), l[-1] 422 print 423 424 def test28(): 425 qualifiers = [ 426 ("YEARLY", {"interval" : 1}), 427 ("BYMONTH", {"values" : [6, 7]}), 428 ("COUNT", {"values" : [10]}) 429 ] 430 dt = (1997, 6, 10, 9, 0, 0) 431 s = select(dt, qualifiers) 432 433 l = s.materialise(dt, (2001, 12, 24, 0, 0, 0)) 434 print len(l) == 10, 10, len(l) 435 print l[0] == (1997, 6, 10, 9, 0, 0), (1997, 6, 10, 9, 0, 0), l[0] 436 print l[-1] == (2001, 7, 10, 9, 0, 0), (2001, 7, 10, 9, 0, 0), l[-1] 437 print 438 439 def test29(): 440 qualifiers = [ 441 ("YEARLY", {"interval" : 2}), 442 ("BYMONTH", {"values" : [1, 2, 3]}), 443 ("COUNT", {"values" : [10]}) 444 ] 445 dt = (1997, 3, 10, 9, 0, 0) 446 s = select(dt, qualifiers) 447 448 l = s.materialise(dt, (2003, 12, 24, 0, 0, 0)) 449 print len(l) == 10, 10, len(l) 450 print l[0] == (1997, 3, 10, 9, 0, 0), (1997, 3, 10, 9, 0, 0), l[0] 451 print l[-1] == (2003, 3, 10, 9, 0, 0), (2003, 3, 10, 9, 0, 0), l[-1] 452 print 453 454 def test30(): 455 qualifiers = [ 456 ("YEARLY", {"interval" : 3}), 457 ("BYYEARDAY", {"values" : [1, 100, 200]}), 458 ("COUNT", {"values" : [10]}) 459 ] 460 dt = (1997, 1, 1, 9, 0, 0) 461 s = select(dt, qualifiers) 462 463 l = s.materialise(dt, (2006, 2, 1, 0, 0, 0)) 464 print len(l) == 10, 10, len(l) 465 print l[0] == (1997, 1, 1, 9, 0, 0), (1997, 1, 1, 9, 0, 0), l[0] 466 print l[-1] == (2006, 1, 1, 9, 0, 0), (2006, 1, 1, 9, 0, 0), l[-1] 467 print 468 469 def test31(): 470 qualifiers = [ 471 ("YEARLY", {"interval" : 1}), 472 ("BYDAY", {"values" : [(1, 20)]}) 473 ] 474 dt = (1997, 5, 19, 9, 0, 0) 475 s = select(dt, qualifiers) 476 477 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 478 print len(l) == 3, 3, len(l) 479 print l[0] == (1997, 5, 19, 9, 0, 0), (1997, 5, 19, 9, 0, 0), l[0] 480 print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1] 481 print 482 483 def test32(): 484 qualifiers = [ 485 ("YEARLY", {"interval" : 1}), 486 ("BYWEEKNO", {"values" : [20]}), 487 ("BYDAY", {"values" : [(1, None)]}) 488 ] 489 dt = (1997, 5, 12, 9, 0, 0) 490 s = select(dt, qualifiers) 491 492 """ 493 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 494 print len(l) == 3, 3, len(l) 495 print l[0] == (1997, 5, 12, 9, 0, 0), (1997, 5, 12, 9, 0, 0), l[0] 496 print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1] 497 print 498 """ 499 500 def test33(): 501 qualifiers = [ 502 ("YEARLY", {"interval" : 1}), 503 ("BYMONTH", {"values" : [3]}), 504 ("BYDAY", {"values" : [(4, None)]}) 505 ] 506 dt = (1997, 3, 13, 9, 0, 0) 507 s = select(dt, qualifiers) 508 509 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 510 print len(l) == 11, 11, len(l) 511 print l[0] == (1997, 3, 13, 9, 0, 0), (1997, 3, 13, 9, 0, 0), l[0] 512 print l[-1] == (1999, 3, 25, 9, 0, 0), (1999, 3, 25, 9, 0, 0), l[-1] 513 print 514 515 def test34(): 516 qualifiers = [ 517 ("YEARLY", {"interval" : 1}), 518 ("BYMONTH", {"values" : [6, 7, 8]}), 519 ("BYDAY", {"values" : [(4, None)]}) 520 ] 521 dt = (1997, 6, 5, 9, 0, 0) 522 s = select(dt, qualifiers) 523 524 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 525 print len(l) == 39, 39, len(l) 526 print l[0] == (1997, 6, 5, 9, 0, 0), (1997, 6, 5, 9, 0, 0), l[0] 527 print l[-1] == (1999, 8, 26, 9, 0, 0), (1999, 8, 26, 9, 0, 0), l[-1] 528 print 529 530 def test35(): 531 qualifiers = [ 532 ("MONTHLY", {"interval" : 1}), 533 ("BYMONTHDAY", {"values" : [13]}), 534 ("BYDAY", {"values" : [(5, None)]}) 535 ] 536 dt = (1997, 9, 2, 9, 0, 0) 537 s = select(dt, qualifiers) 538 539 l = s.materialise(dt, (2000, 12, 24, 0, 0, 0)) 540 print len(l) == 6, 6, len(l) 541 print l[1] == (1998, 2, 13, 9, 0, 0), (1998, 2, 13, 9, 0, 0), l[1] 542 print l[-1] == (2000, 10, 13, 9, 0, 0), (2000, 10, 13, 9, 0, 0), l[-1] 543 print 544 545 def test36(): 546 qualifiers = [ 547 ("MONTHLY", {"interval" : 1}), 548 ("BYMONTHDAY", {"values" : [7, 8, 9, 10, 11, 12, 13]}), 549 ("BYDAY", {"values" : [(6, None)]}) 550 ] 551 dt = (1997, 9, 13, 9, 0, 0) 552 s = select(dt, qualifiers) 553 554 l = s.materialise(dt, (1998, 6, 30, 0, 0, 0)) 555 print len(l) == 10, 10, len(l) 556 print l[0] == (1997, 9, 13, 9, 0, 0), (1997, 9, 13, 9, 0, 0), l[0] 557 print l[-1] == (1998, 6, 13, 9, 0, 0), (1998, 6, 13, 9, 0, 0), l[-1] 558 print 559 560 def test37(): 561 qualifiers = [ 562 ("YEARLY", {"interval" : 4}), 563 ("BYMONTH", {"values" : [11]}), 564 ("BYMONTHDAY", {"values" : [2, 3, 4, 5, 6, 7, 8]}), 565 ("BYDAY", {"values" : [(2, None)]}) 566 ] 567 dt = (1996, 11, 5, 9, 0, 0) 568 s = select(dt, qualifiers) 569 570 l = s.materialise(dt, (2004, 12, 24, 0, 0, 0)) 571 print len(l) == 3, 3, len(l) 572 print l[0] == (1996, 11, 5, 9, 0, 0), (1996, 11, 5, 9, 0, 0), l[0] 573 print l[-1] == (2004, 11, 2, 9, 0, 0), (2004, 11, 2, 9, 0, 0), l[-1] 574 print 575 576 def test38(): 577 qualifiers = [ 578 ("MONTHLY", {"interval" : 1}), 579 ("BYDAY", {"values" : [(2, None), (3, None), (4, None)]}), 580 ("BYSETPOS", {"values" : [3]}), 581 ("COUNT", {"values" : [3]}) 582 ] 583 dt = (1997, 9, 4, 9, 0, 0) 584 s = select(dt, qualifiers) 585 586 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 587 print len(l) == 3, 3, len(l) 588 print l[0] == (1997, 9, 4, 9, 0, 0), (1997, 9, 4, 9, 0, 0), l[0] 589 print l[-1] == (1997, 11, 6, 9, 0, 0), (1997, 11, 6, 9, 0, 0), l[-1] 590 print 591 592 def test39(): 593 qualifiers = [ 594 ("MONTHLY", {"interval" : 1}), 595 ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None)]}), 596 ("BYSETPOS", {"values" : [-2]}) 597 ] 598 dt = (1997, 9, 29, 9, 0, 0) 599 s = select(dt, qualifiers) 600 601 l = s.materialise(dt, (1998, 4, 1, 0, 0, 0)) 602 print len(l) == 7, 7, len(l) 603 print l[0] == (1997, 9, 29, 9, 0, 0), (1997, 9, 29, 9, 0, 0), l[0] 604 print l[-1] == (1998, 3, 30, 9, 0, 0), (1998, 3, 30, 9, 0, 0), l[-1] 605 print 606 607 def test40(): 608 qualifiers = get_qualifiers(["BYMONTHDAY=5", "FREQ=HOURLY", "INTERVAL=12"]) 609 dt = (2017, 6, 13) 610 s = select(dt, qualifiers) 611 612 l = s.materialise(dt, (2019, 1, 1)) 613 print len(l) == 37, 37, len(l) 614 print l[1] == (2017, 7, 5, 0), (2017, 7, 5, 0), l[1] 615 print l[-1] == (2018, 12, 5, 12), (2018, 12, 5, 12), l[-1] 616 print 617 618 def test41(): 619 qualifiers = get_qualifiers(["FREQ=DAILY", "BYMONTH=1"]) 620 dt = (2017, 6, 13) 621 s = select(dt, qualifiers) 622 623 l = s.materialise(dt, (2019, 1, 1)) 624 print len(l) == 32, 32, len(l) 625 print l[1] == (2018, 1, 1), (2018, 1, 1), l[1] 626 print l[-1] == (2018, 1, 31), (2018, 1, 31), l[-1] 627 print 628 629 def test42(): 630 qualifiers = get_qualifiers(["FREQ=MONTHLY", "BYDAY=WE,1FR,2MO,2FR"]) 631 dt = (2017, 10, 15) 632 s = select(dt, qualifiers) 633 634 l = s.materialise(dt, (2018, 1, 1)) 635 print len(l) == 18, 18, len(l) 636 print l[1] == (2017, 10, 18), (2017, 10, 18), l[1] 637 print l[-1] == (2017, 12, 27), (2017, 12, 27), l[-1] 638 print 639 640 test0 = lambda: 0 # started at 1 above 641 642 tests = [ 643 test0, test1, test2, test3, test4, test5, test6, test7, test8, test9, 644 test10, test11, test12, test13, test14, test15, test16, test17, test18, test19, 645 test20, test21, test22, test23, test24, test25, test26, test27, test28, test29, 646 test30, test31, test32, test33, test34, test35, test36, test37, test38, test39, 647 test40, test41, test42 648 ] 649 650 if __name__ == "__main__": 651 args = sys.argv[1:] 652 if args: 653 for n in map(int, args): 654 tests[n]() 655 else: 656 for test in tests: 657 test() 658 659 # vim: tabstop=4 expandtab shiftwidth=4