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 24 def show(l): 25 for x in l: 26 print x 27 print 28 29 def select(dt, qualifiers): 30 sel = make_selectors(qualifiers) 31 show(sel) 32 l = get_datetime_structure(dt) 33 show(l) 34 csel = combine_datetime_with_selectors(dt, sel) 35 show(csel) 36 37 s = get_selector(dt, sel) 38 csel = get_selectors_from_selector(s) 39 show(csel) 40 return s 41 42 qualifiers = [ 43 ("YEARLY", {"interval" : 1}) 44 ] 45 dt = (1997, 11, 2) 46 s = select(dt, qualifiers) 47 48 l = s.materialise(dt, (2003, 12, 24)) 49 print len(l) == 7, 7, len(l) 50 print l[0] == (1997, 11, 2), (1997, 11, 2), l[0] 51 print l[-1] == (2003, 11, 2), (2003, 11, 2), l[-1] 52 print 53 54 qualifiers = [ 55 ("YEARLY", {"interval" : 2}), 56 ("BYMONTH", {"values" : [1]}), 57 ("BYDAY", {"values" : [(7, None)]}), 58 ("BYHOUR", {"values" : [8, 9]}), 59 ("BYMINUTE", {"values" : [30]}) 60 ] 61 dt = (1997, 1, 5, 8, 30, 0) 62 s = select(dt, qualifiers) 63 64 l = s.materialise(dt, (2003, 12, 24, 0, 0, 0)) 65 print len(l) == 34, 34, len(l) 66 print l[0] == (1997, 1, 5, 8, 30, 0), (1997, 1, 5, 8, 30, 0), l[0] 67 print l[-1] == (2003, 1, 26, 9, 30, 0), (2003, 1, 26, 9, 30, 0), l[-1] 68 print 69 70 qualifiers = [ 71 ("DAILY", {"interval" : 1}), 72 ("COUNT", {"values" : [10]}) 73 ] 74 dt = (1997, 9, 2, 9, 0, 0) 75 s = select(dt, qualifiers) 76 77 l = s.materialise(dt, (1997, 12, 24)) 78 print len(l) == 10, 10, len(l) 79 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 80 print l[-1] == (1997, 9, 11, 9, 0, 0), (1997, 9, 11, 9, 0, 0), l[-1] 81 print 82 83 qualifiers = [ 84 ("DAILY", {"interval" : 1}) 85 ] 86 dt = (1997, 9, 2, 9, 0, 0) 87 s = select(dt, qualifiers) 88 89 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 90 print len(l) == 113, 113, len(l) 91 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 92 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 93 print 94 95 qualifiers = [ 96 ("DAILY", {"interval" : 2}) 97 ] 98 dt = (1997, 9, 2, 9, 0, 0) 99 s = select(dt, qualifiers) 100 101 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 102 print len(l) == 57, 57, len(l) 103 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 104 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 105 print 106 107 qualifiers = [ 108 ("WEEKLY", {"interval" : 1}) 109 ] 110 dt = (1997, 9, 2, 9, 0, 0) 111 s = select(dt, qualifiers) 112 113 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 114 print len(l) == 17, 17, len(l) 115 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 116 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 117 print 118 119 qualifiers = [ 120 ("DAILY", {"interval" : 10}), 121 ("COUNT", {"values" : [5]}) 122 ] 123 dt = (1997, 9, 2, 9, 0, 0) 124 s = select(dt, qualifiers) 125 126 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 127 print len(l) == 5, 5, len(l) 128 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 129 print l[-1] == (1997, 10, 12, 9, 0, 0), (1997, 10, 12, 9, 0, 0), l[-1] 130 print 131 132 qualifiers = [ 133 ("YEARLY", {"interval" : 1}), 134 ("BYMONTH", {"values" : [1]}), 135 ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None), (6, None), (7, None)]}) 136 ] 137 dt = (1998, 1, 1, 9, 0, 0) 138 s = select(dt, qualifiers) 139 140 l = s.materialise(dt, (2000, 1, 31, 14, 0, 0)) 141 print len(l) == 93, 93, len(l) 142 print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0] 143 print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1] 144 print 145 146 qualifiers = [ 147 ("DAILY", {"interval" : 1}), 148 ("BYMONTH", {"values" : [1]}) 149 ] 150 dt = (1998, 1, 1, 9, 0, 0) 151 s = select(dt, qualifiers) 152 153 l = s.materialise(dt, (2000, 1, 31, 14, 0, 0)) 154 print len(l) == 93, 93, len(l) 155 print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0] 156 print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1] 157 print 158 159 qualifiers = [ 160 ("WEEKLY", {"interval" : 1}), 161 ("COUNT", {"values" : [10]}) 162 ] 163 dt = (1997, 9, 2, 9, 0, 0) 164 s = select(dt, qualifiers) 165 166 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 167 print len(l) == 10, 10, len(l) 168 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 169 print l[-1] == (1997, 11, 4, 9, 0, 0), (1997, 11, 4, 9, 0, 0), l[-1] 170 print 171 172 qualifiers = [ 173 ("WEEKLY", {"interval" : 1}) 174 ] 175 dt = (1997, 9, 2, 9, 0, 0) 176 s = select(dt, qualifiers) 177 178 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 179 print len(l) == 17, 17, len(l) 180 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 181 print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1] 182 print 183 184 qualifiers = [ 185 ("WEEKLY", {"interval" : 1}) 186 ] 187 dt = (1997, 9, 2) 188 s = select(dt, qualifiers) 189 190 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 191 print len(l) == 17, 17, len(l) 192 print l[0] == (1997, 9, 2), (1997, 9, 2), l[0] 193 print l[-1] == (1997, 12, 23), (1997, 12, 23), l[-1] 194 print 195 196 qualifiers = [ 197 ("WEEKLY", {"interval" : 2}) 198 ] 199 dt = (1997, 9, 2, 9, 0, 0) 200 s = select(dt, qualifiers) 201 202 l = s.materialise(dt, (1998, 2, 20, 0, 0, 0)) 203 print len(l) == 13, 13, len(l) 204 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 205 print l[-1] == (1998, 2, 17, 9, 0, 0), (1998, 2, 17, 9, 0, 0), l[-1] 206 print 207 208 qualifiers = [ 209 ("WEEKLY", {"interval" : 1}), 210 ("BYDAY", {"values" : [(2, None), (4, None)]}) 211 ] 212 dt = (1997, 9, 2, 9, 0, 0) 213 s = select(dt, qualifiers) 214 215 l = s.materialise(dt, (1997, 10, 7, 9, 0, 0)) 216 print len(l) == 10, 10, len(l) 217 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 218 print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1] 219 print 220 221 qualifiers = [ 222 ("WEEKLY", {"interval" : 1}), 223 ("BYDAY", {"values" : [(2, None), (4, None)]}), 224 ("COUNT", {"values" : [10]}) 225 ] 226 dt = (1997, 9, 2, 9, 0, 0) 227 s = select(dt, qualifiers) 228 229 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 230 print len(l) == 10, 10, len(l) 231 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 232 print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1] 233 print 234 235 qualifiers = [ 236 ("WEEKLY", {"interval" : 2}), 237 ("BYDAY", {"values" : [(1, None), (3, None), (5, None)]}) 238 ] 239 dt = (1997, 9, 1, 9, 0, 0) 240 s = select(dt, qualifiers) 241 242 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 243 print len(l) == 25, 25, len(l) 244 print l[0] == (1997, 9, 1, 9, 0, 0), (1997, 9, 1, 9, 0, 0), l[0] 245 print l[-1] == (1997, 12, 22, 9, 0, 0), (1997, 12, 22, 9, 0, 0), l[-1] 246 print 247 248 qualifiers = [ 249 ("WEEKLY", {"interval" : 2}), 250 ("BYDAY", {"values" : [(2, None), (4, None)]}), 251 ("COUNT", {"values" : [8]}) 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) == 8, 8, 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, 16, 9, 0, 0), (1997, 10, 16, 9, 0, 0), l[-1] 260 print 261 262 qualifiers = [ 263 ("MONTHLY", {"interval" : 1}), 264 ("BYDAY", {"values" : [(5, 1)]}), 265 ("COUNT", {"values" : [10]}) 266 ] 267 dt = (1997, 9, 5, 9, 0, 0) 268 s = select(dt, qualifiers) 269 270 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 271 print len(l) == 10, 10, len(l) 272 print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0] 273 print l[-1] == (1998, 6, 5, 9, 0, 0), (1998, 6, 5, 9, 0, 0), l[-1] 274 print 275 276 qualifiers = [ 277 ("MONTHLY", {"interval" : 1}), 278 ("BYDAY", {"values" : [(5, 1)]}) 279 ] 280 dt = (1997, 9, 5, 9, 0, 0) 281 s = select(dt, qualifiers) 282 283 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 284 print len(l) == 4, 4, len(l) 285 print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0] 286 print l[-1] == (1997, 12, 5, 9, 0, 0), (1997, 12, 5, 9, 0, 0), l[-1] 287 print 288 289 qualifiers = [ 290 ("MONTHLY", {"interval" : 2}), 291 ("BYDAY", {"values" : [(7, 1), (7, -1)]}), 292 ("COUNT", {"values" : [10]}) 293 ] 294 dt = (1997, 9, 7, 9, 0, 0) 295 s = select(dt, qualifiers) 296 297 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 298 print len(l) == 10, 10, len(l) 299 print l[0] == (1997, 9, 7, 9, 0, 0), (1997, 9, 7, 9, 0, 0), l[0] 300 print l[-1] == (1998, 5, 31, 9, 0, 0), (1998, 5, 31, 9, 0, 0), l[-1] 301 print 302 303 qualifiers = [ 304 ("MONTHLY", {"interval" : 1}), 305 ("BYDAY", {"values" : [(1, -2)]}), 306 ("COUNT", {"values" : [6]}) 307 ] 308 dt = (1997, 9, 22, 9, 0, 0) 309 s = select(dt, qualifiers) 310 311 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 312 print len(l) == 6, 6, len(l) 313 print l[0] == (1997, 9, 22, 9, 0, 0), (1997, 9, 22, 9, 0, 0), l[0] 314 print l[-1] == (1998, 2, 16, 9, 0, 0), (1998, 2, 16, 9, 0, 0), l[-1] 315 print 316 317 qualifiers = [ 318 ("MONTHLY", {"interval" : 1}), 319 ("BYMONTHDAY", {"values" : [-3]}), 320 ("COUNT", {"values" : [6]}) 321 ] 322 dt = (1997, 9, 28, 9, 0, 0) 323 s = select(dt, qualifiers) 324 325 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 326 print len(l) == 6, 6, len(l) 327 print l[0] == (1997, 9, 28, 9, 0, 0), (1997, 9, 28, 9, 0, 0), l[0] 328 print l[-1] == (1998, 2, 26, 9, 0, 0), (1998, 2, 26, 9, 0, 0), l[-1] 329 print 330 331 qualifiers = [ 332 ("MONTHLY", {"interval" : 1}), 333 ("BYMONTHDAY", {"values" : [15, 2]}), # test ordering 334 ("COUNT", {"values" : [10]}) 335 ] 336 dt = (1997, 9, 2, 9, 0, 0) 337 s = select(dt, qualifiers) 338 339 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 340 print len(l) == 10, 10, len(l) 341 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 342 print l[-1] == (1998, 1, 15, 9, 0, 0), (1998, 1, 15, 9, 0, 0), l[-1] 343 print 344 345 qualifiers = [ 346 ("MONTHLY", {"interval" : 1}), 347 ("BYMONTHDAY", {"values" : [1, -1]}), 348 ("COUNT", {"values" : [10]}) 349 ] 350 dt = (1997, 9, 30, 9, 0, 0) 351 s = select(dt, qualifiers) 352 353 l = s.materialise(dt, (1998, 12, 24, 0, 0, 0)) 354 print len(l) == 10, 10, len(l) 355 print l[0] == (1997, 9, 30, 9, 0, 0), (1997, 9, 30, 9, 0, 0), l[0] 356 print l[-1] == (1998, 2, 1, 9, 0, 0), (1998, 2, 1, 9, 0, 0), l[-1] 357 print 358 359 qualifiers = [ 360 ("MONTHLY", {"interval" : 18}), 361 ("BYMONTHDAY", {"values" : [10, 11, 12, 13, 14, 15]}), 362 ("COUNT", {"values" : [10]}) 363 ] 364 dt = (1997, 9, 10, 9, 0, 0) 365 s = select(dt, qualifiers) 366 367 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 368 print len(l) == 10, 10, len(l) 369 print l[0] == (1997, 9, 10, 9, 0, 0), (1997, 9, 10, 9, 0, 0), l[0] 370 print l[-1] == (1999, 3, 13, 9, 0, 0), (1999, 3, 13, 9, 0, 0), l[-1] 371 print 372 373 qualifiers = [ 374 ("MONTHLY", {"interval" : 2}), 375 ("BYDAY", {"values" : [(2, None)]}) 376 ] 377 dt = (1997, 9, 2, 9, 0, 0) 378 s = select(dt, qualifiers) 379 380 l = s.materialise(dt, (1998, 4, 1, 0, 0, 0)) 381 print len(l) == 18, 18, len(l) 382 print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0] 383 print l[-1] == (1998, 3, 31, 9, 0, 0), (1998, 3, 31, 9, 0, 0), l[-1] 384 print 385 386 qualifiers = [ 387 ("YEARLY", {"interval" : 1}), 388 ("BYMONTH", {"values" : [6, 7]}), 389 ("COUNT", {"values" : [10]}) 390 ] 391 dt = (1997, 6, 10, 9, 0, 0) 392 s = select(dt, qualifiers) 393 394 l = s.materialise(dt, (2001, 12, 24, 0, 0, 0)) 395 print len(l) == 10, 10, len(l) 396 print l[0] == (1997, 6, 10, 9, 0, 0), (1997, 6, 10, 9, 0, 0), l[0] 397 print l[-1] == (2001, 7, 10, 9, 0, 0), (2001, 7, 10, 9, 0, 0), l[-1] 398 print 399 400 qualifiers = [ 401 ("YEARLY", {"interval" : 2}), 402 ("BYMONTH", {"values" : [1, 2, 3]}), 403 ("COUNT", {"values" : [10]}) 404 ] 405 dt = (1997, 3, 10, 9, 0, 0) 406 s = select(dt, qualifiers) 407 408 l = s.materialise(dt, (2003, 12, 24, 0, 0, 0)) 409 print len(l) == 10, 10, len(l) 410 print l[0] == (1997, 3, 10, 9, 0, 0), (1997, 3, 10, 9, 0, 0), l[0] 411 print l[-1] == (2003, 3, 10, 9, 0, 0), (2003, 3, 10, 9, 0, 0), l[-1] 412 print 413 414 qualifiers = [ 415 ("YEARLY", {"interval" : 3}), 416 ("BYYEARDAY", {"values" : [1, 100, 200]}), 417 ("COUNT", {"values" : [10]}) 418 ] 419 dt = (1997, 1, 1, 9, 0, 0) 420 s = select(dt, qualifiers) 421 422 l = s.materialise(dt, (2006, 2, 1, 0, 0, 0)) 423 print len(l) == 10, 10, len(l) 424 print l[0] == (1997, 1, 1, 9, 0, 0), (1997, 1, 1, 9, 0, 0), l[0] 425 print l[-1] == (2006, 1, 1, 9, 0, 0), (2006, 1, 1, 9, 0, 0), l[-1] 426 print 427 428 qualifiers = [ 429 ("YEARLY", {"interval" : 1}), 430 ("BYDAY", {"values" : [(1, 20)]}) 431 ] 432 dt = (1997, 5, 19, 9, 0, 0) 433 s = select(dt, qualifiers) 434 435 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 436 print len(l) == 3, 3, len(l) 437 print l[0] == (1997, 5, 19, 9, 0, 0), (1997, 5, 19, 9, 0, 0), l[0] 438 print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1] 439 print 440 441 """ 442 qualifiers = [ 443 ("YEARLY", {"interval" : 1}), 444 ("BYWEEKNO", {"values" : [20]}), 445 ("BYDAY", {"values" : [(1, None)]}) 446 ] 447 dt = (1997, 5, 12, 9, 0, 0) 448 s = select(dt, qualifiers) 449 450 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 451 print len(l) == 3, 3, len(l) 452 print l[0] == (1997, 5, 12, 9, 0, 0), (1997, 5, 12, 9, 0, 0), l[0] 453 print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1] 454 print 455 """ 456 457 qualifiers = [ 458 ("YEARLY", {"interval" : 1}), 459 ("BYMONTH", {"values" : [3]}), 460 ("BYDAY", {"values" : [(4, None)]}) 461 ] 462 dt = (1997, 3, 13, 9, 0, 0) 463 s = select(dt, qualifiers) 464 465 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 466 print len(l) == 11, 11, len(l) 467 print l[0] == (1997, 3, 13, 9, 0, 0), (1997, 3, 13, 9, 0, 0), l[0] 468 print l[-1] == (1999, 3, 25, 9, 0, 0), (1999, 3, 25, 9, 0, 0), l[-1] 469 print 470 471 qualifiers = [ 472 ("YEARLY", {"interval" : 1}), 473 ("BYMONTH", {"values" : [6, 7, 8]}), 474 ("BYDAY", {"values" : [(4, None)]}) 475 ] 476 dt = (1997, 6, 5, 9, 0, 0) 477 s = select(dt, qualifiers) 478 479 l = s.materialise(dt, (1999, 12, 24, 0, 0, 0)) 480 print len(l) == 39, 39, len(l) 481 print l[0] == (1997, 6, 5, 9, 0, 0), (1997, 6, 5, 9, 0, 0), l[0] 482 print l[-1] == (1999, 8, 26, 9, 0, 0), (1999, 8, 26, 9, 0, 0), l[-1] 483 print 484 485 qualifiers = [ 486 ("MONTHLY", {"interval" : 1}), 487 ("BYMONTHDAY", {"values" : [13]}), 488 ("BYDAY", {"values" : [(5, None)]}) 489 ] 490 dt = (1997, 9, 2, 9, 0, 0) 491 s = select(dt, qualifiers) 492 493 l = s.materialise(dt, (2000, 12, 24, 0, 0, 0)) 494 print len(l) == 6, 6, len(l) 495 print l[1] == (1998, 2, 13, 9, 0, 0), (1998, 2, 13, 9, 0, 0), l[1] 496 print l[-1] == (2000, 10, 13, 9, 0, 0), (2000, 10, 13, 9, 0, 0), l[-1] 497 print 498 499 qualifiers = [ 500 ("MONTHLY", {"interval" : 1}), 501 ("BYMONTHDAY", {"values" : [7, 8, 9, 10, 11, 12, 13]}), 502 ("BYDAY", {"values" : [(6, None)]}) 503 ] 504 dt = (1997, 9, 13, 9, 0, 0) 505 s = select(dt, qualifiers) 506 507 l = s.materialise(dt, (1998, 6, 30, 0, 0, 0)) 508 print len(l) == 10, 10, len(l) 509 print l[0] == (1997, 9, 13, 9, 0, 0), (1997, 9, 13, 9, 0, 0), l[0] 510 print l[-1] == (1998, 6, 13, 9, 0, 0), (1998, 6, 13, 9, 0, 0), l[-1] 511 print 512 513 qualifiers = [ 514 ("YEARLY", {"interval" : 4}), 515 ("BYMONTH", {"values" : [11]}), 516 ("BYMONTHDAY", {"values" : [2, 3, 4, 5, 6, 7, 8]}), 517 ("BYDAY", {"values" : [(2, None)]}) 518 ] 519 dt = (1996, 11, 5, 9, 0, 0) 520 s = select(dt, qualifiers) 521 522 l = s.materialise(dt, (2004, 12, 24, 0, 0, 0)) 523 print len(l) == 3, 3, len(l) 524 print l[0] == (1996, 11, 5, 9, 0, 0), (1996, 11, 5, 9, 0, 0), l[0] 525 print l[-1] == (2004, 11, 2, 9, 0, 0), (2004, 11, 2, 9, 0, 0), l[-1] 526 print 527 528 qualifiers = [ 529 ("MONTHLY", {"interval" : 1}), 530 ("BYDAY", {"values" : [(2, None), (3, None), (4, None)]}), 531 ("BYSETPOS", {"values" : [3]}), 532 ("COUNT", {"values" : [3]}) 533 ] 534 dt = (1997, 9, 4, 9, 0, 0) 535 s = select(dt, qualifiers) 536 537 l = s.materialise(dt, (1997, 12, 24, 0, 0, 0)) 538 print len(l) == 3, 3, len(l) 539 print l[0] == (1997, 9, 4, 9, 0, 0), (1997, 9, 4, 9, 0, 0), l[0] 540 print l[-1] == (1997, 11, 6, 9, 0, 0), (1997, 11, 6, 9, 0, 0), l[-1] 541 print 542 543 l2 = l 544 545 qualifiers = [ 546 ("MONTHLY", {"interval" : 1}), 547 ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None)]}), 548 ("BYSETPOS", {"values" : [-2]}) 549 ] 550 dt = (1997, 9, 29, 9, 0, 0) 551 s = select(dt, qualifiers) 552 553 l = s.materialise(dt, (1998, 4, 1, 0, 0, 0)) 554 print len(l) == 7, 7, len(l) 555 print l[0] == (1997, 9, 29, 9, 0, 0), (1997, 9, 29, 9, 0, 0), l[0] 556 print l[-1] == (1998, 3, 30, 9, 0, 0), (1998, 3, 30, 9, 0, 0), l[-1] 557 print 558 559 qualifiers = get_qualifiers(["BYMONTHDAY=5", "FREQ=HOURLY", "INTERVAL=12"]) 560 dt = (2017, 6, 13) 561 s = select(dt, qualifiers) 562 563 l = s.materialise(dt, (2019, 1, 1)) 564 print len(l) == 37, 37, len(l) 565 print l[1] == (2017, 7, 5, 0), (2017, 7, 5, 0), l[1] 566 print l[-1] == (2018, 12, 5, 12), (2018, 12, 5, 12), l[-1] 567 568 qualifiers = get_qualifiers(["FREQ=DAILY", "BYMONTH=1"]) 569 dt = (2017, 6, 13) 570 s = select(dt, qualifiers) 571 572 l = s.materialise(dt, (2019, 1, 1)) 573 print len(l) == 32, 32, len(l) 574 print l[1] == (2018, 1, 1), (2018, 1, 1), l[1] 575 print l[-1] == (2018, 1, 31), (2018, 1, 31), l[-1] 576 577 qualifiers = get_qualifiers(["FREQ=MONTHLY", "BYDAY=WE,1FR,2MO,2FR"]) 578 dt = (2017, 10, 15) 579 s = select(dt, qualifiers) 580 581 l = s.materialise(dt, (2018, 1, 1)) 582 print len(l) == 18, 18, len(l) 583 print l[1] == (2017, 10, 18), (2017, 10, 18), l[1] 584 print l[-1] == (2017, 12, 27), (2017, 12, 27), l[-1] 585 586 # vim: tabstop=4 expandtab shiftwidth=4