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