
    _j                        S SK r S SKrS SKJrJr  S SKJr  S SKJr  S SKr	S SK
r
S SKJrJrJrJrJrJr  S SKJr  S SKJr   " S S	\R*                  5      rSS
 jrSS jrSS jr\S:X  a  \ R6                  " 5         gg)    N)datetime	timedelta)partial)sleep)CroniterBadCronErrorCroniterBadDateErrorCroniterNotAlphaErrorCroniterUnsupportedSyntaxErrorcroniterdatetime_to_timestamp)VALID_LEN_EXPRESSION)basec                   v   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7SS7 jr8SS8 jr9S9 r:S: r;S; r<S< r=S= r>S> r?S? r@S@ rASA rBSB rCSC rDSD rESE rFSF rGSG rHSH rISI rJSJ rKSK rLSL rMSM rNSN rOSO rPSP rQSQ rRSR rSSS rTST rUSU rVSV rWSW rXSX rYSY rZSZ r[S[ r\S\ r]S] r^S^ r_S_ r`S` raSa rbSb rcSc rdSd reSe rfSf rgSg rhSh riSi rjSj rkSk rlSl rmSm rnSn roSo rpSp rqSq rrS6rsSr rtSs ruSt rvSu rwSv rxSw rySx rzSy r{Sz r|S{ r}S| r~S} rS~ rS rS rS rS rS rS rS rS rS rS rS rS rS r SS jrSS jrSS jrSrg6)CroniterTest   c                    [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  SUR                  5        UR                  [         5      nU R                  S	UR                  5        UR                  [         5      nU R                  SUR                  5        U R                  S
UR
                  5        g )N              
   z* * * * * 15,25         )r   r   get_nextassertEqualsecondminuteselfr   itrns       Q/home/rurouni/.local/lib/python3.13/site-packages/croniter/tests/test_croniter.pytest_second_secCroniterTest.test_second_sec   s    aBB/($/LL"QXX&LL"QXX&LL"QXX&QXX&    c                 4   [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  S-   UR                  5        g )	Nr   r   r   r   r   r   z*/1 * * * * *   
r   r   r   r   yearmonthdayhourr   r   r!   r   r"   n1s       r$   test_secondCroniterTest.test_second$   s    aBB/-\\(#BGG,RXX.266*BGG,bii0q"))4r'   c                    [        SSSSSS5      n[        SU5      nUR                  [         5      nUR                  [         5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  SUR                  5        U R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  S	-   UR                  5        U R                  S
UR                  5        U R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  S	-   UR                  5        U R                  SUR                  5        g )Nr   r   r   r   r   $   z* * * * * */15-   r)   r   r   r*   r!   r   r"   r0   n2n3s         r$   test_second_repeatCroniterTest.test_second_repeat/   s   aBB/'.\\(#\\(#\\(#BGG,RXX.266*BGG,bii0RYY'BGG,RXX.266*BGG,q"))4BII&BGG,RXX.266*BGG,q"))4RYY'r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  S-
  5        [        S5       H  nUR                  5         M     UR                  [         5      nU R                  UR                  S5        UR                  [         5      nU R                  UR                  S	5        U R                  UR                  S
5        [        SU5      nUR                  [         5      nU R                  UR                  S5        [        S5       H  nUR                  5         M     UR                  [         5      nU R                  UR                  S5        UR                  [         5      n	U R                  U	R                  S	5        U R                  U	R                  S
5        g )N  r)            */1 * * * *'   ;   r   r   */5 * * * *   r   7   )
r   r   r   r   r+   r,   r-   r.   r   range)
r!   r   r"   r0   ir7   r8   n4n5n6s
             r$   test_minuteCroniterTest.test_minuteH   s   aR,}d+\\(#BGG,RXX.266*BGG,bii!m4rALLN \\(#B'\\(#A&"%}d+\\(#B'qALLN \\(#B'\\(#A&"%r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        [        S5       H  nUR                  5         M     UR                  [         5      nU R                  UR                  S5        U R                  UR                  S	5        g )
Nr<   r)   r   r>      z0 */3 * * *r   r   r   )r   r   r   r   r.   r   rF   r-   )r!   r   r"   r0   rG   r7   s         r$   	test_hourCroniterTest.test_houre   s    aR+}d+\\(#"%A&qALLN \\(#!$$r'   c                 d   [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        UR                  [         5      nU R                  UR                  S	5        U R                  UR
                  S
5        [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        g )Nr<   rN   r   r>   	   z0 0 */3 * *r      r)      i  r   	0 0 * * *     )r   r   r   r   r-   r,   )	r!   r   r"   r0   r7   r8   base2itr2rH   s	            r$   test_dayCroniterTest.test_dayq   s   aR+}d+\\(#$\\(#$\\(##1% a${D)\\(#$1%\\(#$1%q"%U+]]8$$1%]]8$$1%r'   c                    [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        g )N  rN   rS   z
* * 29 2 *  rV   )r   r   get_prevr   r+   r,   r-   )r!   base3rY   r8   s       r$   	test_day2CroniterTest.test_day2   sf    q"%e,]]8$$'1%$r'   c                 Z   [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR	                  5       S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR	                  5       S5        U R                  UR
                  S5        U R                  UR                  S5        [        SSS5      n[        S	U5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        g )
Nr<   rN   r   z0 0 * * satr   r   rT   r)   z0 0 1 * wedr   r   r   r   
isoweekdayr-   r,   r+   r6   s         r$   test_weekdayCroniterTest.test_weekday   s   a$}d+\\(#!,$\\(#!,#1%a$}d+\\(#1%$$'\\(#1%#$'\\(#1%#$'r'   c                    [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR	                  5       S5        U R                  UR
                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR	                  5       S5        U R                  UR
                  S5        U R                  UR                  S5        [        SSS5      n[        S	U5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S
5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        g )Nr<   rN   r   z0 0 * * sat#1r   rT   r   r)   z0 0 * * wed#5      rR   rV   rd   r6   s         r$   test_nth_weekdayCroniterTest.test_nth_weekday   s   a$-\\(#!,#1%\\(#!,#1%a$-\\(#1%$$'\\(#1%$$'\\(#1%$$'r'   c                    [        SSS5      n[        SUSS9nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S	5        U R                  UR
                  S5        U R                  UR                  S5        g )
Nr<   r)   r   z0 0 1 * monFday_orrN   rT      )r   r   r   r   r,   r-   r+   r6   s         r$   test_weekday_day_and!CroniterTest.test_weekday_day_and   s    a$}d59\\(#1%#$'\\(#1%#$'\\(#2&#$'r'   c                 R   Sn[        U[        SSS5      [        S9nU R                  UR                  5       [        SSSSSS5      5        U R                  UR                  5       [        SSSSSS5      5        U R                  UR                  5       [        SSS	SSS5      5        U R                  UR                  5       [        SSS
SSS5      5        [        U[        SSS5      [        SS9nU R                  UR                  5       [        SSSSSS5      5        U R                  UR                  5       [        SSSSSS5      5        U R                  UR                  5       [        SS	SSSS5      5        U R                  UR                  5       [        SS	SSSS5      5        g )Nz0 16 */2 * sat     rN   )
start_timeret_typerT      r   r      T)rv   rw   implement_cron_bugr   r      )r   r   r   r   )r!   exprr"   s      r$   test_dom_dow_vixie_cron_bug(CroniterTest.test_dom_dow_vixie_cron_bug   si    tq!(<xP$1b!Q)GH$1b!Q)GH$1b!Q)GH$1b!Q)GH XdAq1HY]
 	$2r1a)HI$2r1a)HI$1b!Q)GH$2r1a)HIr'   c                    [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        [        S5       H  nUR                  5         M     UR                  [         5      nU R                  UR                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR                  S	5        g )
Nr<   r)   r   z	0 0 1 * *rN   rT      r>   i  )r   r   r   r   r,   r-   rF   r+   )r!   r   r"   r0   r7   rG   r8   rH   s           r$   
test_monthCroniterTest.test_month   s   a${D)\\(#1%#\\(#1%#qALLN \\(#2&$'\\(#1%$'r'   c                    [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S	5        U R                  UR
                  S5        g )
N  rR   r   	0 0 l * *rj   r   ri   rp   r>   r   r   r   r   r,   r-   )r!   r   r"   r0   r7   r8   rH   s          r$   test_last_day_of_month#CroniterTest.test_last_day_of_month  s    a#{D)\\(#1%$\\(#2&$\\(#2&$\\(#2&$r'   c                 j   [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        g )Nr   rR   r   z0 0 29-L * *rV   rj   r   r!   r   r"   r0   r7   s        r$   +test_range_with_uppercase_last_day_of_month8CroniterTest.test_range_with_uppercase_last_day_of_month  s    a#~t,\\(#1%$\\(#1%$r'   c                    [        SSSSS9n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        [        S	S
S5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        [        S	S
SSS9n[        SU5      nUR                  [         5      nU R                  UR                  S
5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S
5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        g )Ni  r>   ri   rD   )r.   r   rp   rj   r<   r)   ru   r   rR   rN   )r   z	* * l * *)r   r   r_   r   r,   r-   r/   s       r$   test_prev_last_day_of_month(CroniterTest.test_prev_last_day_of_month  s   b"2.{D)\\(#2&$b"%{D)\\(#2&$a#{D)\\(#2&$\\(#2&$\\(#2&$\\(#1%$aA.{D)\\(#1%$\\(#1%$\\(#2&$\\(#2&$r'   c                 r   [        S5      nU R                  [        UR                  [        5        U R                  [
        [         S5        U R                  [
        [         S5        U R                  [
        [         S5        U R                  [
        [         S5        U R                  [
        [         S5        U R                  [
        [         S5        U R                  [
        [         S5        U R                  [        [         S	[        R                  " 5       5        U R                  [
        [         S
5        g )N	* * * * ** * * *z-90 * * * *z	a * * * ** * * janu-jun *z1-1_0 * * * *z0-10/error * * * *z0-10/ * * * *z0-1& * * * *z* * 5-100 * *)	r   assertRaises	TypeErrorr   str
ValueErrorr   r   nowr!   r"   s     r$   
test_errorCroniterTest.test_errorG  s    {#)S\\37*h	:*h>*h<*h0BC*h@*h0DE*h@..(,,.Y*h@r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  SUR                  5        U R                  SUR                  5        g )	Nr<   r   r   r   8   z30 22 * * sun-thu   rj   	r   r   r   r   r+   r,   r-   r.   r   )r!   r   r"   nexts       r$   -test_sunday_to_thursday_with_alpha_conversion:CroniterTest.test_sunday_to_thursday_with_alpha_conversionT  s    aR,*D1||H%DII.TZZ0488,TYY'T[[)r'   c                    S/n[        S5      u  p#pEpgU R                  [        S5      R                  U   U5        U R                  [        S5      R                  U   U5        U R                  [        S5      R                  U   S/5        U R                  [        S5      R                  U   U5        U R                  [        S5      R                  U   U5        U R                  [        S	5      R                  U   / S
Q5        U R                  [        S5      R                  U   U5        U R                  [        S	5      R                  U   / S
Q5        U R                  [        S5      R                  U   / S
Q5        U R                  [        S5      R                  U   U5        U R                  [        S5      R                  U   U5        U R                  [        S5      R                  U   U5        U R                  [        S5      R                  U   U5        U R                  [        S5      R                  U   U5        g)z4Non-optimal cron expressions that can be simplified.*r   z0-59 0 1 1 0z0 0-23 1 1 0z0 0 1-31 1 0r   z0 0 1-31 1 *z0 0 1 1-12 0z0 0 1 1 0-6)r   r)   rN   rT   r   ru   r   z0 0 * 1 0-6z0 0 1 1 0-6,sat#3z0 0 * 1 0-6,sat#3z0 0 1 1 0 0-59z30 1-12,0,10-23 15-21 * friz30 1-23,0 15-21 * friNrF   r   r   expanded)r!   wildcardmhdmondowss           r$   test_optimize_cron_expressions+CroniterTest.test_optimize_cron_expressions_  s   5$Qxac.1::1=xH.1::1=xH.1::3?!E.1::1=xH.1::3?J-099#>@UV-099#>I-099#>@UV"56??DF[\-099#>I"56??DhO"23<<Q?J"?@II!LhW"9:CCAFQr'   c                    [        S5      u  pp4pVU R                  [        S5      R                  U   / SQ5        U R                  [        S5      R                  U   / SQ5        U R                  [        S5      R                  U   / SQ5        U R                  [        S5      R                  U   / S	Q5        U R                  [        S
5      R                  U   / S	Q5        g)z5Ensure that duplicate/overlapping ranges are squashedr   z* 5,5,1-6 * * *)r)   rN   rT   r   ru   r   z* * * * 2-3,4-5,3,3,3)rN   rT   r   ru   z* * * * * 1,5,*/20,20,15)r   r)   ru   r   rD   (   z* 4,1-4,5,4 * * *)r)   rN   rT   r   ru   z!59 23 * 1 wed,fri,mon-thu,tue,tueNr   r!   r   r   r   r   r   r   s          r$   test_block_dup_ranges"CroniterTest.test_block_dup_rangest  s    $Qxac"34==a@BTU"9:CCCH,W"<=FFqIK`a"56??BOT89BB3G	
r'   c                 n   [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  S-   5        [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  S-   5        U R                  S	UR                  5        [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  S-   5        U R                  S
UR                  5        U R                  S	UR                  5        g )Nr<   r   r   r   r   r@   r)   r   rB   r=   	r   r   r_   r   r+   r,   r-   r.   r   r!   r   r"   prevs       r$   test_prev_minuteCroniterTest.test_prev_minute  s   aR,}d+||H%DII.TZZ0488,DII.dkkAo6aR+}d+||H%DII.TZZ0488,DIIM2T[[)aQ*}d+||H%DII.TZZ0488a<0TYY'T[[)r'   c                 |   [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g)	zD
Test getting previous occurrence that crosses into previous month.
r   rT   r   r   z
0 0 22 * *rN   r   Nr   r   s       r$   $test_prev_day_of_month_with_crossing1CroniterTest.test_prev_day_of_month_with_crossing  s     aQ*|T*||H%D)Q'2&A&a(r'   c                 x   [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  S	5        U R                  UR                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g )
Nr<   r   r   r   r   z0 0 * * sat,sunr   r      r   r!   r   r"   prev1prev2prev3s         r$   test_prev_weekdayCroniterTest.test_prev_weekday  s   aR,($/X&TYY/djj1B'Q'q)X&TYY/djj1B'Q'q)X&TYY/djj1B'Q'q)r'   c                 d   [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  S5        U R                  UR                  S	5        U R                  UR                  S5        U R                  UR                  S5        g )
Nr<   r   r   r   r   z0 0 * * sat#1,sun#2r   ry   rp   r   r   s         r$   test_prev_nth_weekday"CroniterTest.test_prev_nth_weekday  s   aR,,d3X&TYY/djj1A&Q'q)X&TYY/djj1A&Q'q)X&TYY/a(B'Q'q)r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S	5        g )
Nr<   r   r   r   r   z
10 0 * * 0r   r   r   )r   r   r_   r   r-   r.   r   r   s       r$   test_prev_weekday2CroniterTest.test_prev_weekday2  sj    aR,|T*||H%2&A&b)r'   c                    [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR	                  5       S5        U R                  UR
                  S5        UR                  [         5      nU R                  UR	                  5       S5        U R                  UR
                  S5        U R                  UR                  S5        g )Nr<   rN   r   z	0 0 * * 6r   r   rT   )r   r   r   r   re   r-   r,   r   s        r$   test_iso_weekdayCroniterTest.test_iso_weekday  s    a${D)\\(#!,$\\(#!,#1%r'   c                 @   [        SSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        g )Nr   rN   r   z5 0 */2 * *r   ru   r=   )r   r   r_   r   r.   r   r,   r-   r/   s       r$   	test_bug1CroniterTest.test_bug1  s|    a$}d+\\(#!$A&1% 	$r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  S5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        UR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  S5        U R                  UR                  UR                  5        U R                  UR                  UR                  S-   5        U R                  UR                  UR                  5        UR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  S5        U R                  UR                  UR                  5        U R                  UR                  UR                  S-   5        U R                  UR                  UR                  5        g )Nr   r)   r   z	0 * * 3 *rT   rN   r   )r!   r   iterr0   r7   r8   s         r$   	test_bug2CroniterTest.test_bug2  s   aAq)T*]]8$$)),1%*$)),DKK0]]8$$)),1%*$))a-0DKK0]]8$$)),1%*$))a-0DKK0r'   c           	         [        SSSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S	5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S
5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S	5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S
5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S	5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S	5        g )N  rT   r)   r>   r{   "   iU z00 03 16,30 * *rx   rj   r   rN   )r   r   r   r   r,   r-   r_   )	r!   r   cr0   r7   r8   rH   rI   rJ   s	            r$   	test_bug3CroniterTest.test_bug3  si   aBB7&-ZZ!1%$ZZ!1%$ZZ!1%$ZZ!1%$ZZ!1%$ZZ!1%$r'   c                     [        SSSSSS5      n[        SU5      n UR                  [         5        g ! [        4 a  nU R	                  U S5         S nAg S nAff = f)Nr   rN   r   r   z
* * 31 2 *zfailed to find next date)r   r   r   r   r   )r!   r   r"   exs       r$   
test_bug34CroniterTest.test_bug34+  s_    aQ1-|T*	BLL"$& 	Bt&@AA	Bs   4 AAAc                 |   [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        [        S	U5      nUR                  [         5      nU R                  UR                  S
5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        UR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        g )Nr   rN   r   r   z0 4/6 * * *r   r   r=   z0 0/6 * * *r   )	r   r   r   r   r.   r   r,   r-   r_   r/   s       r$   
test_bug57CroniterTest.test_bug573  s   aQ1-}d+\\(#!$A&1%$\\(#"%A&1%$}d+\\(#!$A&1%$\\(#!$A&1%$r'   c                 
   [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        [        SS	SS
SS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S	5        U R                  UR                  S5        U R                  UR                  S5        [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        g )N  rT   r)   r   z0 0 1 3,6,9,12 *r   rN   r   r>   r     r   z0 0 1,15,31 * *ri   z0 0 1 1,3,6,9,12 *)	r   r   r   r   r.   r,   r-   r+   r_   )r!   r   r"   r0   p1s        r$   test_multiple_months!CroniterTest.test_multiple_monthsO  s   aAq!,)40\\(#!$1%#$'aQ1-)40\\(#!$1%#$'b!RA.)40\\(#!$1%#$'
 aAq!,)40\\(#!$2&#$' aAq!,($/\\(#!$1%$$'aAq!,)40\\(#!$1%#$'aAq!,+T2\\(#!$1%#$'aAq!,+T2\\(#!$1%#$'r'   c                 $   [        SSSSS5      n[        SU5      nUR                  [         5      nUR                  [         5      nUR                  [         5      nUR                  [         5      nUR                  [         5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S	5        g )
Nr   rT   r   r   z1-9/2 0 1 * *r)   ru   ry   rR   )r   r   r   r   r   )r!   r   r"   r0   r7   r8   rH   rI   s           r$   test_range_generator!CroniterTest.test_range_generator  s    aAq)-\\(#\\(#\\(#\\(#\\(#A&A&A&A&A&r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  S5        U R                  UR                  S5        g )	Nr   r   r=   r{   )   z
* 10 * * *r   rB   r   r!   r   r"   r   s       r$   test_previous_hourCroniterTest.test_previous_hour  s    aR,|T*X&TYY/djj1DHH-R(r*r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S	5        g )
Nr   r   r   r   r   z
* * 26 * *r   r=   rB   r   r   s       r$   test_previous_dayCroniterTest.test_previous_day  s    aQ+|T*X&TYY/djj1B'R(r*r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S	5        U R                  UR                  S
5        g )Nr   r   r?   r   r   z	* * * 5 *ru   ri   r=   rB   r   r   s       r$   test_previous_month CroniterTest.test_previous_month  s    aQ+{D)X&TYY/a(B'R(r*r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S	5        g )
Nr   ru   r   r?   0   z* * * * satr>   r=   rB   r   r   s       r$   test_previous_dowCroniterTest.test_previous_dow  s    aR,}d+X&TYY/djj1B'R(r*r'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        g )Nr   rR   r   rp   r   r   )	r   r   get_currentr   r+   r,   r-   r.   r   )r!   r   r"   ress       r$   test_get_currentCroniterTest.test_get_current  s    aR,{D)ooh'CHH-SYY/377+CHH-cjj1r'   c                     [        S[        SSS5      5      nU R                  UR                  [        5      R	                  5       S5        g)z_Test not skipping first of March.

This fixes https://github.com/pallets-eco/croniter/issues/1
z0 0 */10 * *  rN   r   z2025-03-01T00:00:00N)r   r   r   r   	isoformat)r!   its     r$   test_first_of_march CroniterTest.test_first_of_march  s<    
 nhtQ&;<X.88:<QRr'   c           	      r   [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  S 5        [
        R                  " S5      n[        SSSSSUS9n[        SU5      nUR                  [         5      nU R                  UR                  R                  S5        g )	Nr   rT   r   r>   r   r   
Asia/Tokyotzinfo)r   r   r   r   r	  zoneinfoZoneInfokey)r!   r   r"   r0   tokyostartrY   r7   s           r$   test_timezoneCroniterTest.test_timezone  s    aB+{D)\\(#D)!!,/q!RE:U+]]8$5r'   c                     [         R                  " S5      n[        SSSSS5      n[        SUR	                  U5      5      nUR                  [        5      nU R                  UR                  R                  S5        g )Nr  r   rT   r   r>   r   r   )	pytztimezoner   r   localizer   r   r	  zone)r!   r  r   rY   r7   s        r$   test_timezone_pytzCroniterTest.test_timezone_pytz  s]    l+aB+U^^D%9:]]8$6r'   c           	          [         R                  R                  S5      n[        SSSSSUS9n[	        SU5      nUR                  [        5      nU R                  UR                  R                  U5      S	5        g )
Nr  r   rT   r   r>   r   r  r   JST)	dateutiltzgettzr   r   r   r   r	  tzname)r!   r  r   r"   r0   s        r$   test_timezone_dateutil#CroniterTest.test_timezone_dateutil  sc    !!,/aB59{D)\\(#))"-u5r'   c                     [        S5      n[        S5        [        S5      nU R                  UR                  UR                  :  5        g )Nr   g{Gz?)r   r   
assertTruecur)r!   r"   rY   s      r$   test_init_no_start_time$CroniterTest.test_init_no_start_time  s6    {#d$377*+r'   c           
         [         R                  " S5      n/ SQn[        SSSSSSUS9n[        S	U5      n[	        S
5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  Xb5        [        SSSSSSUS9n[        S	U5      n[	        S
5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  U[        [        U5      5      5        gs  snf s  snf )HTest Athens jumps backwards: 2013-10-27 04:00 -> 03:00 (UTC+3 -> UTC+2).Europe/Athensz2013-10-27T02:30:00+03:00z2013-10-27T03:00:00+03:00z2013-10-27T03:30:00+03:00z2013-10-27T03:00:00+02:00z2013-10-27T03:30:00+02:00z2013-10-27T04:00:00+02:00z2013-10-27T04:30:00+02:00r   r   r   rN   r   r  */30 * * * *ry   ru   Nr
  r  r   r   rF   r   r  r   r_   listreversedr!   r  expected_scheduler  ct_schedules          r$   test_timezone_winter_time&CroniterTest.test_timezone_winter_time  s    /
 r2q!Qr:ne,?DQxHx!KK)335xH5r2q!Qr:ne,?DQxHx!KK)335xH41B(C#DE I
 I   ,C=*,Dc                 N   [         R                  " S5      n/ SQn[        SSSSSS5      n[        SUR	                  U5      5      n[        S	5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  Xb5        [        SSSS
SS5      n[        SUR	                  U5      5      n[        S	5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  U[        [        U5      5      5        gs  snf s  snf )r&  r'  r(  r   r   r   rN   r   r)  ry   ru   Nr  r  r   r   r  rF   r   r  r   r_   r+  r,  r-  s          r$   test_timezone_winter_time_pytz+CroniterTest.test_timezone_winter_time_pytz  s    ]]?+
 r2q!Q/nbkk%&89?DQxHx!KK)335xH5r2q!Q/nbkk%&89?DQxHx!KK)335xH41B(C#DE I
 I   ,D
,D"c           
         [         R                  " S5      n/ SQn[        SSSSSSUS9n[        S	U5      n[	        S
5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  Xb5        [        SSSS
SSUS9n[        S	U5      n[	        S
5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  U[        [        U5      5      5        gs  snf s  snf )FTest Athens jumps forward: 2013-03-31 03:00 -> 04:00 (UTC+2 -> UTC+3).r'  z2013-03-31T01:30:00+02:00z2013-03-31T02:00:00+02:00z2013-03-31T02:30:00+02:00z2013-03-31T04:00:00+03:00z2013-03-31T04:30:00+03:00r   rT   ri   r)   r   r  r)  ru   Nr*  r-  s          r$   test_timezone_summer_time&CroniterTest.test_timezone_summer_time-  s    /
 q"aAb9ne,?DQxHx!KK)335xH5q"aAb9ne,?DQxHx!KK)335xH41B(C#DE I
 Ir4  c                 N   [         R                  " S5      n/ SQn[        SSSSSS5      n[        SUR	                  U5      5      n[        S	5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  Xb5        [        SSSS	SS5      n[        SUR	                  U5      5      n[        S	5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  U[        [        U5      5      5        g
s  snf s  snf )r;  r'  r<  r   rT   ri   r)   r   r)  ru   Nr6  r-  s          r$   test_timezone_summer_time_pytz+CroniterTest.test_timezone_summer_time_pytzC  s    ]]?+
 q"aA.nbkk%&89?DQxHx!KK)335xH5q"aA.nbkk%&89?DQxHx!KK)335xH41B(C#DE I
 Ir9  c           	      @   [         R                  " S5      n[        SSSUS9n[        SU5      R	                  [        5      nU R                  UR                  5       S5        [        SSSSUS9n[        S	U5      nUR	                  [        5      nU R                  UR                  5       S
5        UR                  [        5      nU R                  UR                  5       S
5        [        SSSUS9n[        SU5      R	                  [        5      nU R                  UR                  5       S5        [        SSSSSUS9n[        S	U5      n[        S5       Vs/ s H%  oTR	                  [        5      R                  5       PM'     nn/ SQnU R                  Xg5        gs  snf )G
DST tests

This fixes https://github.com/taichino/croniter/issues/82

Europe/Warsawr   rT   r   r  rU   2017-03-27T00:00:00+02:00r)   	0 * * * *2017-03-26T03:00:00+02:00r   rV   2017-10-30T00:00:00+01:00rB   r   z2017-10-29T02:00:00+02:00z2017-10-29T02:00:00+01:00z2017-10-29T03:00:00+01:00z2017-10-29T04:00:00+01:00N)	r
  r  r   r   r   r   r  r   rF   r!   r  
local_datevalcrr0  r1  r.  s           r$   test_std_dstCroniterTest.test_std_dstY  s`    /dAr"5
{J/88B*EFdAr1R8
k:.kk(#*EFnnX&*EF dB26
{J/88B*EFdBAr"=
k:.?DQxHx!KK)335xH
 	5 Is   ,Fc           	         [         R                  " S5      nUR                  [        SSS5      5      n[	        SU5      R                  [        5      nU R                  UR                  5       S5        UR                  [        SSSS5      5      n[	        SU5      nUR                  [        5      nU R                  UR                  5       S	5        UR                  [        5      nU R                  UR                  5       S	5        UR                  [        SS
S5      5      n[	        SU5      R                  [        5      nU R                  UR                  5       S5        UR                  [        SS
SSS5      5      n[	        SU5      n[        S5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nn/ SQnU R                  Xg5        gs  snf )rC  rD  r   rT   r   rU   rE  r)   rF  rG  r   rV   rH  rB   r   rI  N)
r  r  r  r   r   r   r   r  r   rF   rJ  s           r$   test_std_dst_pytzCroniterTest.test_std_dst_pytz|  sz    ]]?+[[$2!67
{J/88B*EF[[$2q!9:
k:.kk(#*EFnnX&*EF [[$B!78
{J/88B*EF[[$B2!>?
k:.?DQxHx!KK)335xH
 	5 Is   ,Gc                 J   [         R                  " S5      n[        SSSSSSUS9S4[        SSSS	SSUS9S4[        SSSS
SSUS9S4[        SSSSSSUS9S4[        SSSSSSUS9S4[        SSSS	SSUS9S4[        SSSS
SSUS9S4[        SSSSSSUS9S4/nU Vs/ s H%  n[        SUS   5      R	                  [        5      PM'     nnU Vs/ s H  n[        U5      PM     nnU Vs/ s H  n[        US   5      PM     nnU R                  XV5        gs  snf s  snf s  snf )   
DST tests

This fixes https://github.com/taichino/croniter/issues/87

São Paulo, Brazil: 18/02/2018 00:00 -> 17/02/2018 23:00

America/Sao_Paulo  rN   r{   r   r   r  2018-02-18 00:00:00-03:00r   r=   r?   2018-02-19 00:00:00-03:00ru   rU   r)   N)r
  r  r   r   r   r   r   r!   r  local_datesr   ret1sret1lret1s          r$   test_std_dst2CroniterTest.test_std_dst2  sj    23 dAr2q!B79TUdAr2q!B79TUdAr2q!B79TUdAr1a268STdAr2q!B79TUdAr2q!B79TUdAr2q!B79TUdAr1a268ST!
$ ITT1ad+44X>T!%&AQ&$/0KqQqTK0& U&0s   ,DD*D c                 J   [         R                  " S5      nUR                  [        SSSSSS5      5      S4UR                  [        SSSSSS5      5      S4UR                  [        SSSS	SS5      5      S4UR                  [        SSS
SSS5      5      S4UR                  [        SSSSSS5      5      S4UR                  [        SSSSSS5      5      S4UR                  [        SSSS	SS5      5      S4UR                  [        SSS
SSS5      5      S4/nU Vs/ s H%  n[	        SUS   5      R                  [        5      PM'     nnU Vs/ s H  n[        U5      PM     nnU Vs/ s H  n[        US   5      PM     nnU R                  XV5        gs  snf s  snf s  snf )rT  rU  rV  rN   r{   r   r   rW  r   r=   r?   rX  ru   rU   r)   N)r  r  r  r   r   r   r   r   rY  s          r$   test_std_dst2_pytzCroniterTest.test_std_dst2_pytz  s    ]]./ [[$2r1a89;VW[[$2r1a89;VW[[$2r1a89;VW[[$2q!Q78:UV[[$2r1a89;VW[[$2r1a89;VW[[$2r1a89;VW[[$2q!Q78:UV!
$ ITT1ad+44X>T!%&AQ&$/0KqQqTK0& U&0s   ,FF*F c           
      0   [         R                  " S5      n[        S[        SSSUS95      nUR	                  [        5      nU R                  UR                  5       S5        UR                  [        5      nU R                  UR                  5       S5        g	)
|
DST tests

This fixes https://github.com/taichino/croniter/issues/90

Adelaide, Australia: 15/04/2020 00:00 -> 15/03/2020

Australia/Adelaide
0 0 24 * *r^   r   r   r  2020-03-24T00:00:00+10:302020-04-24T00:00:00+09:30N)r
  r  r   r   r_   r   r  r   r!   r  r1  val1val2s        r$   test_std_dst3CroniterTest.test_std_dst3  s|     34L(4Br*JK  *)+FG  *)+FGr'   c           
      P   [         R                  " S5      n[        SUR                  [	        SSS5      5      5      nUR                  [        5      nU R                  UR                  5       S5        UR                  [        5      nU R                  UR                  5       S5        g)	rd  re  rf  r^   r   r   rg  rh  N)	r  r  r   r  r   r_   r   r  r   ri  s        r$   test_std_dst3_pytzCroniterTest.test_std_dst3_pytz  s     ]]/0L"++htQ6K*LM  *)+FG  *)+FGr'   Nc                    [         R                  R                  S5      n[        SSSUS9n[	        SU5      n[        S5       Vs/ s H%  oCR                  [        5      R                  5       PM'     nn/ SQnU R                  XV5        gs  snf )	z`
DST test for daily schedule

London jumps forward: 2025-03-30 01:00 -> 02:00 (UTC+0 -> UTC+1).
Europe/Londonr  rT   rj   r  z	7 0 * * *)2025-03-30T00:07:00+00:00z2025-03-31T00:07:00+01:00z2025-04-01T00:07:00+01:00N	r  r  r  r   r   rF   r   r  r   r!   londonr  r/  r0  r1  r.  s          r$   test_dst_dailyCroniterTest.test_dst_daily  sz     ""?3q"V4k5)?DQxHx!KK)335xH

 	5 I   ,B	c                    [         R                  R                  S5      n[        SSSUS9n[	        SU5      n[        S5       Vs/ s H%  oCR                  [        5      R                  5       PM'     nn/ SQnU R                  XV5        gs  snf )	z
DST test for hourly schedule

This fixes https://github.com/pallets-eco/croniter/issues/149

London jumps forward: 2025-03-30 01:00 -> 02:00 (UTC+0 -> UTC+1).
rr  r  rT   rj   r  z	7 * * * *)rs  z2025-03-30T02:07:00+01:00z2025-03-30T03:07:00+01:00Nrt  ru  s          r$   test_dst_hourlyCroniterTest.test_dst_hourly  sz     ""?3q"V4k5)?DQxHx!KK)335xH

 	5 Iry  c                 N    U R                  [        [        R                  S5        g )Nr   )r   r	   r   expandr!   s    r$   test_error_alpha_cron"CroniterTest.test_error_alpha_cron)  s    /BTUr'   c                     U R                  [        [        R                  S5        U R                  [        [        R                  S[	        [
        5      S-   -  R                  5       5        g )Nr   z* r)   )r   r   r   r~  maxr   stripr  s    r$   test_error_bad_cron CroniterTest.test_error_bad_cron,  sL    .K (//DC@T<UXY<Y4Z3a3a3c	
r'   c                 *   U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " SSS95        g )NrF  z0 * *r   z	H 0 * * *abc)hash_idr!  r   is_validassertFalser  s    r$   test_is_validCroniterTest.test_is_valid2  se    ))+67**734**+=>?))+uEFr'   c                 ~   U R                  [        R                  " S5      5        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " S	SS95        U R                  [        R                  " S
SS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R	                  [
        5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)N
0 0 31 2 *Tstrictz
0 0 30 2 *z
0 0 31 4 *z
0 0 31 6 *
0 0 29 2 *
0 0 31 1 *z0 0 31 1,2 *z0 0 30 2,4 *z
0 0 31 * *z	0 0 * 2 *r   rF  rC   )r!  r   r  r  r   r   r~  r  s    r$   test_is_valid_strict!CroniterTest.test_is_valid_strict8  s   )),78**<EF**<EF**<EF**<EF)),tDE)),tDE)).FG)).FG)),tDE))+dCD))+dCD))+dCD))-EF34OOL6 544s   H..
H<c                    U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        U R                  [        R                  " S	SS95        U R                  [        R                  " S
SS95        U R                  [        R                  " SSS95        U R                  [        R                  " SSS95        g )Nz0 0 29 2 * 0 2024Tr  z0 0 29 2 * 0 2028z0 0 29 2 * 0 2023z0 0 29 2 * 0 2025z0 0 29 2 * 0 2023,2024z0 0 29 2 * 0 2023-2025z0 0 29 2 * 0 2025-2027z0 0 31 2 * 0 2024z0 0 30 2 * 0 2024z0 0 29 2 * 0 *r  r  s    r$   test_is_valid_strict_with_year+CroniterTest.test_is_valid_strict_with_yearW  s   ))*=dKL))*=dKL**+>tLM**+>tLM))*B4PQ))*B4PQ**+CDQR**+>tLM**+>tLM))*:4HIr'   c                    U R                  [        R                  " SSSS95        U R                  [        R                  " SSSS95        U R                  [        R                  " SSSS95        U R                  [        R                  " SSSS95        U R                  [        R                  " SSSS95        U R                  [        R                  " SSSS/S95        U R                  [        R                  " SSSS	/S95        U R                  [        R                  " S
SSS95        U R                  [        R                  " SSS95        g )Nr  Tr]   )r  strict_yearrW   rt   il  r  r  r  )r  r  r  s    r$   #test_is_valid_strict_year_parameter0CroniterTest.test_is_valid_strict_year_parameterk  s    	)),tQUVW)),tQUVW**<RVWX**<RVWX**<RVWX)),tRVX\Q]^_**<SWY]R^_`)),tQUVW)),DIJr'   c           
      n   [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        UR                  [         5      nU R                  U[        SSSSS5      5        UR                  [         5      nU R                  U[        SSSSS5      5        g )	Nr]   r)   0 9 15W * *r   rR   r   rN   rT   r   r   r   r   r    s       r$   test_nearest_weekday_basic'CroniterTest.test_nearest_weekday_basic}  s     a#}d+LL"HT1b!Q78 LL"HT1b!Q78 LL"HT1b!Q78r'   c           
          [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        g )Nr]   r   r)   r     rR   r   r  r    s       r$   test_nearest_weekday_saturday*CroniterTest.test_nearest_weekday_saturday  G    a#}d+LL"HT1b!Q78r'   c           
          [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        g )Nr]   rR   r)   r  rx   r   r  r    s       r$   test_nearest_weekday_sunday(CroniterTest.test_nearest_weekday_sunday  r  r'   c           
          [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        g )	Nr]   ru   ri   
0 9 1W * *r   rT   rR   r   r  r    s       r$   #test_nearest_weekday_first_saturday0CroniterTest.test_nearest_weekday_first_saturday  sI     a$|T*LL"HT1aA67r'   c           
          [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        g )Nr  rT   r)   0 9 31W * *ri   rR   r   r  r    s       r$   $test_nearest_weekday_last_day_sunday1CroniterTest.test_nearest_weekday_last_day_sunday  r  r'   c           
      8   [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        g )	Nr]   rp   r)   z0 9 30W * *rV   rR   r   r  r  r    s       r$   *test_nearest_weekday_end_of_month_boundary7CroniterTest.test_nearest_weekday_end_of_month_boundary  s    b!$}d+LL"HT2r1a89 b!$}d+LL"HT2r1a89r'   c           
          [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        g )Nr]   r)   0 9 W15 * *r   rR   r   r  r    s       r$   test_nearest_weekday_wn_format+CroniterTest.test_nearest_weekday_wn_format  r  r'   c           
          [        SSS5      n[        SU5      nUR                  [         5      nU R                  U[        SSSSS5      5        g )Nr]   r   rj   r  r  rR   r   r   r   r_   r   r    s       r$   test_nearest_weekday_get_prev*CroniterTest.test_nearest_weekday_get_prev  sG    a$}d+LL"HT1b!Q78r'   c                 T   U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        g )	Nr  r  r  r  z0 9 15W,16 * *z0 9 1,15W * *z
0 9 0W * *z0 9 32W * *r  r  s    r$   test_nearest_weekday_is_valid*CroniterTest.test_nearest_weekday_is_valid  s    ))-89))-89)),78))-89**+;<=**?;<**<89**=9:r'   c           
      2   [        SSS5      n[        SU5      n[        S5       Vs/ s H  o2R                  [         5      PM     nnU R	                  US   [        SSSSS5      5        U R	                  US   [        SS	SSS5      5        U R	                  US	   [        SS
SSS5      5        U R	                  US
   [        SSSSS5      5        U R	                  US   [        SSSSS5      5        U R	                  US   [        SSS
SS5      5        g s  snf )Nrt   r>   ri   z
0 0 1W * *r   r   r]   r)   rN   rT   r   ru   )r   r   rF   r   r   )r!   r   r"   r0  resultss        r$   test_nearest_weekday_iteration+CroniterTest.test_nearest_weekday_iteration  s   b"%|T*388<8a<<)8<XdAq!Q%?@XdAq!Q%?@XdAq!Q%?@XdAq!Q%?@XdAq!Q%?@XdAq!Q%?@ =s   Dc                 b   [        SSSSSS5      n[        SU5      nUR                  [         5      nU R                  SUR                  5        UR                  [         5      nU R                  SUR                  5        UR                  [         5      nU R                  SUR                  5        g )	NrV  rT   ru   r>   rj   2   z30 7,12,17 * * *ry   )r   r   r_   r   r.   r   r6   s         r$   test_exactly_the_same_minute)CroniterTest.test_exactly_the_same_minute  s    aBB/)40\\(#RWW%\\(#BGG$\\(#RWW%r'   c                     [        SSSSSS5      n[        SSSSSS5      nSn[        X1S	9R                  5       n[        X2S	9R                  5       nU R                  XT:  5        g )
NrV  ru   r   r   rT   r   rD   z	4 * * * *rv   )r   r   r   r!  )r!   ts_ats_b	test_cronnext_anext_bs         r$   !test_next_when_now_satisfies_cron.CroniterTest.test_next_when_now_satisfies_cron  sc    aQ1-aQ2.	)5>>@)5>>@(r'   c           
         [        [        S[        S9n[        SSSSSSS5      nU R                  U" US	9R	                  5       [        SSSSS5      5        U R                  U" US	9R                  5       [        SSS
SS5      5        [        SSSSSSS5      nU R                  U" US	9R	                  5       [        SSSSS5      5        U R                  U" US	9R                  5       [        SSS
SS5      5        [        SSSSSSS5      nU R                  U" US	9R	                  5       [        SSSSS5      5        U R                  U" US	9R                  5       [        SSSSS5      5        g)z1
https://github.com/taichino/croniter/issues/107
z
0 10 * * *rw   rV  r)   rN   r   r   i  r  rT   rR   rB   ?B N)r   r   r   r   r_   r   )r!   	_croniterdts      r$   test_millisecondsCroniterTest.test_milliseconds  sh   
 HlXF	dAq"aC0b1::<htQPQSUWX>YZb1::<htQPQSUWX>YZdAq"aA.b1::<htQPQSUWX>YZb1::<htQPQSUWX>YZdAq!RV4b1::<htQPQSUWX>YZb1::<htQPQSUWX>YZr'   c                 N    U R                  [        R                  " S5      5        g )Nz*/0 * * * *)r  r   r  r  s    r$   test_invalid_zerorepeat$CroniterTest.test_invalid_zerorepeat  s    **=9:r'   c           	      <   / n[        SSSSSSS5      n[        S5       Hx  n[        SUS9n[         R                  " UR	                  5       [
        R                  R                  5       5      R                  S S9nUR                  U5        U[        SS	9-  nMz     U Vs/ s H  n[        U5      PM     nnU R                  U/ S
Q5        / n[        SSSSSSS5      n[        S5       Hx  n[        SUS9n[         R                  " UR	                  5       [
        R                  R                  5       5      R                  S S9nUR                  U5        U[        SS	9-  nMz     U Vs/ s H  n[        U5      PM     nnU R                  U/ SQ5        g s  snf s  snf )N  r)   r  r   r   z0 0 * * 2-4 *r  r  days)
z2019-01-15 00:00:00z2019-01-16 00:00:01z2019-01-17 00:00:02z2019-01-22 00:00:00z2019-01-23 00:00:01z2019-01-24 00:00:02z2019-01-29 00:00:00z2019-01-30 00:00:01z2019-01-31 00:00:02z2019-02-05 00:00:00z0 0 * * 0-6 *)
z2019-01-14 00:00:01z2019-01-15 00:00:02z2019-01-16 00:00:03z2019-01-17 00:00:04z2019-01-18 00:00:05z2019-01-19 00:00:06z2019-01-20 00:00:07z2019-01-21 00:00:08z2019-01-22 00:00:09z2019-01-23 00:00:10r   rF   r   fromtimestampr   r  r  tzutcreplaceappendr   r   r   r!   retr  rG   r   rsrets          r$   test_weekday_rangeCroniterTest.test_weekday_range  st   dAr1aA.rAR8A''

hkk6G6G6IJRRZ^R_BJJrN)##B	 
 !$$1A$	
 dAr1aA.rAR8A''

hkk6G6G6IJRRZ^R_BJJrN)##B	 
 !$$1A$	
1 %. %s   F(Fc           	         / n[        SSSSSSS5      n[        S5       Hv  n[        SUS9n[         R                  " UR	                  5       [
        R                  R                  5       S9R                  S S	9nUR                  U5        U[        SS
9-  nMx     U Vs/ s H  n[        U5      PM     nnU R                  U/ SQ5        g s  snf )Nr  r)   r  r   r>   z0 0 * * Wed-Sun *r  )r  r  r  )z2019-01-16 00:00:00z2019-01-17 00:00:01z2019-01-18 00:00:02z2019-01-19 00:00:03z2019-01-20 00:00:04z2019-01-23 00:00:00z2019-01-24 00:00:01z2019-01-25 00:00:02z2019-01-26 00:00:03z2019-01-27 00:00:04z2019-01-30 00:00:00z2019-01-31 00:00:01r  r  s          r$   test_issue_monsun_117"CroniterTest.test_issue_monsun_117A  s    dAr1aA.rA,<A''

9J9J9LMUU]aUbBJJrN)##B  !$$1A$	
 %s   C	c                     [        SSSSS5      n[        SU5      nU R                  [        UR	                  5       [
        5      5        g )NrV  r   r)   r   1 1 7,14,21,L * *)r   r   r!  
isinstancer   floatr!   r   r"   s      r$   test_mixdowCroniterTest.test_mixdow]  s:    b!Q**D1
3<<>59:r'   c                    U R                  [        R                  " S[        SSSSSSS5      5      5        U R	                  [        R                  " S[        SSSSSSS5      5      5        U R                  [        R                  " S[        SSS	SSSS5      5      5        U R	                  [        R                  " S[        SSS	SSS
S5      5      5        U R                  [        R                  " S[        SSSSSSS5      5      5        U R                  [        R                  " S[        SSSSSSS5      SS95        U R                  [        R                  " S[        SSSSSSS5      SS95        U R                  [        R                  " S[        SSSSSSS5      SS95        U R                  [        R                  " S[        SSSSSSS5      SS95        U R	                  [        R                  " S[        SSSSSSS5      SS95        U R	                  [        R                  " S[        SSSSSSS5      SS95        g )NrU   r  r)   r  r   0 0 * * * 1rt   ru   r   rN   
31 * * * *ri   0 0 10 * wedr^   r   r   Trn   0 0 10 * frir>   Fr!  r   matchr   r  r  s    r$   
test_matchCroniterTest.test_matchb  s   {HT1b!QPQST4UVWXdAr1aQRTU5VWX}htQAqRSUV6WXYxaQPQSTVW7XYZ|XdAr1bRSUV5WXYNN>8D!RAq!+LUYZ	
 	NN>8D!RAq!+LUYZ	
 	NN>8D!RAq!+LUYZ	
 	NN>8D!RAq!+LUZ[	
 	NN>8D!RAq!+LUZ[	
 	NN>8D!RAq!+LUZ[	
r'   c                    U R                  [        R                  " S[        SSSSSSS5      5      5        U R	                  [        R                  " S[        SSSSSSS5      5      5        U R                  [        R                  " S[        SSSSSSS5      SS95        U R	                  [        R                  " S[        SSSSSSS5      SS95        U R                  [        R                  " S[        SSSSSSS5      5      5        U R	                  [        R                  " S[        SSSSSSS5      5      5        U R                  [        R                  " S[        SSSSSSS5      S	S95        g )
NrU   r  r)   r  r   rB   precision_in_secondsz0 0 * * * 0<   r  r  s    r$   test_match_precision!CroniterTest.test_match_precision{  sH    	{HT1b!QPRTU4VWXXdAr1aQRTU5VWX 	NN;q"aAq(I`ab	
 	NN;q"aB(Jabc	

 	}htQAqRSUV6WXYxaQPQSTVW7XYZ 	NNxaQ2qAXZ	
r'   c                    U R                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      SS95        U R	                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      5      5        g )	NrU   r  r)   r  r   rj   r   r  )r  r   match_ranger   r!  r  s    r$   test_match_range_precision'CroniterTest.test_match_range_precision  s      q"aB2q"aB2%&		
 	  q"aB2q"aB2	
r'   c           
          U R                  [        R                  " S[        SSS5      SS95        U R                  [        R                  " S[        SSS5      5      5        g )Nz0 0 31 1 1#1r^   r)   ri   Frn   z0 0 31 1 * 0 2024/2)r  r   r  r   r  s    r$   test_match_handle_bad_cron'CroniterTest.test_match_handle_bad_cron  sK    q"8MV[\](=xaQS?TUVr'   c                    U R                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      5      5        U R	                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      5      5        U R                  [        R                  " S[        S	S
SSSSS5      [        S	S
SSSSS5      5      5        U R	                  [        R                  " S[        S	S
SSSSS5      [        S	S
SSSSS5      5      5        U R                  [        R                  " S[        S	S
SSSSS5      [        S	S
SSSSS5      5      5        U R                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      5      5        U R                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      SS95        U R                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      SS95        U R                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      SS95        U R                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      SS95        U R	                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      SS95        U R	                  [        R                  " S[        SSSSSSS5      [        SSSSSSS5      SS95        U R	                  [        R                  " S[        SSSSSSS5      [        SSSS
SSS5      SS95        g ) NrU   r  r)   r   r   rB   r  r  rt   ru   r   rN   r   r  rj   ri   r  r^   r   rR   rp   Trn   r  r   r>   Fr   ry   z2 4 1 * wedrT   )r!  r   r  r   r  r  s    r$   test_match_rangeCroniterTest.test_match_range  s     XdAr1b!Q?$PQSUWXZ[]^`aAb	

 	  XdAr1aA>qRTVWY[]^`a@b	

 	  xaQ1a@(4QRTVXY[\^_abBc	

 	  xaQ1a@(4QRTVXY[\^_abBc	

 	  xaQ1a@(4QRTVXY[\^_abBc	

 	  q"aQ2q"aQ2	
 	  q!Q1a0q"aAq1		
 	  q"aAq1q"aAq1		
 	  q"aAq1q"aAq1		
 	  q!Q1a0q"aAq1		
 	  q!Q1a0q!Q1a0		
 	  q!Q1a0q"aAq1		
 	  q!Q1a0q!Q1a0		
r'   c           
         / SQn[         R                  " S5      n[        SSSSSSUS	9n[        S
U5      n[	        S5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  XaSS 5        [	        S5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  U[        [        USS 5      5      5        gs  snf s  snf )Test DST gap with cron job every day at 02:01.

Paris jumps forward: 2020-03-29 02:00 -> 03:00 (UTC+1 -> UTC+2).
So 2020-03-29 02:01 does not exist in local time.

This fixes https://github.com/taichino/croniter/issues/90#issuecomment-605615205
z2020-03-28T02:01:00+01:00z2020-03-29T03:00:00+02:00z2020-03-30T02:01:00+02:00z2020-03-31T02:01:00+02:00Europe/Parisr^   rT   rV   r)   rB   rE   r  	1 2 * * *Nr*  r!   r.  r  r   r  r0  r1  s          r$   test_dst_issue90_st31ny$CroniterTest.test_dst_issue90_st31ny  s    
 ~.tQAr2b9k3'?DQxHx!KK)335xHQR#89?DQxHx!KK)335xH41B3B1G(H#IJ	 I Is   ,C(,C-c           
         / SQn[         R                  " S5      nUR                  [        SSSSSS5      5      n[	        S	U5      n[        S5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  XaSS
 5        [        S5       Vs/ s H%  oTR                  [        5      R                  5       PM'     nnU R                  U[        [        US
S 5      5      5        g
s  snf s  snf )r  r  r  r^   rT   rV   r)   rB   rE   r  Nr  )r  r  r  r   r   rF   r   r  r   r_   r+  r,  r  s          r$   test_dst_issue90_st31ny_pytz)CroniterTest.test_dst_issue90_st31ny_pytz  s    
 ]]>*kk(4B2r:;k3'?DQxHx!KK)335xHQR#89?DQxHx!KK)335xH41B3B1G(H#IJ	 I Is   ,C8",C=c           
      ^   [         R                  " S5      n[        SSSSSSUS9n[        SU5      nUR	                  [        5      R                  5       UR	                  [        5      R                  5       UR	                  [        5      R                  5       /nU R                  U/ SQ5        g	)
HTest Hebron jumps one hour forward on 2022-03-27 00:00 (UTC+2 -> UTC+3).Asia/Hebron  rT   r   r   r  rU   z2022-03-26T00:00:00+02:00z2022-03-27T01:00:00+03:00z2022-03-28T00:00:00+03:00N)r
  r  r   r   r   r  r   r!   r  r   r  r  s        r$   test_dst_iterCroniterTest.test_dst_iter7  s    }-tQAq!B7k3'KK!++-KK!++-KK!++-

 		
r'   c           
      ~   [         R                  " S5      nUR                  [        SSSSSS5      5      n[	        SU5      nUR                  [        5      R                  5       UR                  [        5      R                  5       UR                  [        5      R                  5       /nU R                  U/ SQ5        g)	r  r  r  rT   r   r   rU   r  N)r  r  r  r   r   r   r  r   r  s        r$   test_dst_iter_pytzCroniterTest.test_dst_iter_pytzJ  s    ]]=)kk(4B1a89k3'KK!++-KK!++-KK!++-

 		
r'   c                 b   S n[        S5      u  p#pEpgnU R                  U" SSU5      S5        U R                  U" SSU5      S5        U R                  U" SSU5      S5        U R                  U" SS	U5      S
5        U R                  U" SSU5      S5        U R                  U" SSU5      S5        g )Nc                 0    [         R                  " XU5      $ )Nr   _get_nth_weekday_of_monthyr   ws      r$   f,CroniterTest.test_nth_wday_simple.<locals>.f^  s    55aA>>r'   ry   rW   r)   )rT   r   r{   r   ri   rN   )r)   r   r   r   rV   rT   r   )r   r   rD   r   )r   rp   r?   r   )ru   r>      r   rF   r   	r!   r,  sunr   tuewedthufrisats	            r$   test_nth_wday_simple!CroniterTest.test_nth_wday_simple]  s    	? -2!H)#Cc4C*=>4C*<=4C*<=4C/:4C/:4C/:r'   c                    S n[        S5      u  p#pEpgnU R                  U" SSU5      S5        U R                  U" SSU5      S5        U R                  U" SSU5      S5        U R                  U" SSU5      S5        U R                  U" SSU5      S	5        U R                  U" SSU5      S
5        U R                  U" SSU5      S5        g )Nc                 6    [         R                  " XU5      S   $ Nr  r'  r)  s      r$   r,  4CroniterTest.test_nth_as_last_wday_simple.<locals>.fk      55aA>rBBr'   ry   rW   rN   rV   r   rS   r=   r   r   r   r/  r0  s	            r$   test_nth_as_last_wday_simple)CroniterTest.test_nth_as_last_wday_simplej      	C -2!H)#Cc4C"-4C"-4C"-4C"-4C"-4C"-4C"-r'   c                    S n[        S5      u  p#pEpgnU R                  U" SSU5      S5        U R                  U" SSU5      S5        U R                  U" SSU5      S5        U R                  U" SSU5      S5        U R                  U" SSU5      S	5        U R                  U" SSU5      S
5        U R                  U" SSU5      S5        g )Nc                 6    [         R                  " XU5      S   $ r;  r'  r)  s      r$   r,  0CroniterTest.test_wdom_core_leap_year.<locals>.fx  r=  r'   ry   rW   rN   rV   r   rS   r=   r   r   r   r/  r0  s	            r$   test_wdom_core_leap_year%CroniterTest.test_wdom_core_leap_yearw  r@  r'   c                    [        S[        SSS5      [        S9n[        S5       Vs/ s H  n[        U5      PM     nnU R	                  U[        SSS5      [        SSS	5      [        SS
S	5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS	5      [        SSS5      /5        g s  snf )Nz
0 0 * * L5  r)   r   r  r>   rj   rN   r   rT   r   r   ru   rV   r   r   ry   ri   r   rS   rR   r   r   rp   r   r   rF   r   assertListEqualr!   r  rG   itemss       r$   test_lwom_fridayCroniterTest.test_lwom_friday  s    lHT1b$9HM#(9-9ab9-q"%q"%q"%q"%q"%q"%q"%q"%q"%r2&r2&r2&	
 .s   C"c                    [        S[        SSS5      [        S9n[        S5       Vs/ s H  n[        U5      PM     nnU R	                  U[        SSSS5      [        SSSS5      [        SS	S
S5      [        SS	S
S5      [        SSS
S5      [        SSS
S5      [        SSSS5      [        SSSS5      [        SSSS5      [        SSSS5      [        SSSS5      [        SSSS5      /5        g s  snf )Nz0 1,5 * * L5rG  r)   r   r  r>   rj   ru   rN   r   rT   r   r   rV   r   r   rH  rJ  s       r$   test_lwom_friday_2hours$CroniterTest.test_lwom_friday_2hours  s    nhtQ&;hO#(9-9ab9-q"a(q"a(q"a(q"a(q"a(q"a(q"a(q"a(q"a(q"a(q"a(q"a(	
 .s   C.c                    [        S[        SSS5      [        S9n[        S5       Vs/ s H  n[        U5      PM     nnU R	                  U[        SSSSS5      [        SSSSS5      [        SSSS	S5      [        SSSS	S5      [        SS
SSS5      [        SS
SSS5      [        SS
SS	S5      [        SS
SS	S5      [        SSSSS5      [        SSSSS5      [        SSSS	S5      [        SSSS	S5      /5        g s  snf )Nz0,30 1,5 * * L5rG  r)   r   r  r>   rj   r   ru   rN   r   rT   rH  rJ  s       r$   test_lwom_friday_2xh_2xm%CroniterTest.test_lwom_friday_2xh_2xm  s   '$2)>R#(9-9ab9-q"a+q"a,q"a+q"a,q"a+q"a,q"a+q"a,q"a+q"a,q"a+q"a,	
 .s   C:c                    [        S[        SSS5      [        SS9n[        S5       Vs/ s H  n[        U5      PM     nnU R	                  U[        SSS5      [        SSS	5      [        SS
S5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS	5      [        SSS	5      [        SSS5      /5        g s  snf )N
0 0 * * L6r   r>   ri   T)rw   is_prevrj   rp   r   r   rS   rR   r   r   ry   rV   r   r   ru   r   r   rT   rN   r)   rH  rJ  s       r$   test_lwom_saturday_rev#CroniterTest.test_lwom_saturday_rev  s    lHT2r$:XW[\#(9-9ab9-r2&r2&r2&q"%q"%q"%q"%q"%q"%q"%q"%q"%	
 .s   C#c                    [        S[        SSS5      [        S9n[        S5       Vs/ s H  n[        U5      PM     nnU R	                  U[        SSS5      [        SSS5      [        SS	S
5      [        SS	S5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      /
5        g s  snf )Nz0 0 * * L2,L4r   r   r)   r  r   rS   rj   ry   r   r   r   rR   r   rV   rH  rJ  s       r$   test_lwom_tue_thuCroniterTest.test_lwom_tue_thu  s    oxa';hO#(9-9ab9-q"%q"%q"%q"%q"%q"%q"%q"%r2&r2&	
 .s   C
c                   ^ SnSnSn[        SSS5      m[        SSS5      /n[        SSS5      [        SSS	5      [        SSS
5      [        SSS5      /n[        [        U5      [        U5      -  5      nU4S jnU R                  U" US5      U5        U R                  U" US5      U5        U R	                  [
        5         U R                  U" US5      U5        S S S 5        g ! , (       d  f       g = f)Nz0 0 * * 6#3	0 0 * * 5z0 0 * * 5,6#3  rT   r)   rD   ru   r>   r.  r   c                 v   > [        U T[        S9n[        U5       Vs/ s H  n[        U5      PM     sn$ s  snf Nr  r   r   rF   r   r|   r#   r  rG   r  s       r$   getn:CroniterTest.test_hash_mixup_all_fri_3rd_sat.<locals>.getn  1    $9B&+Ah/hDHh///   6r   r   sortedsetrI  r   r
   	r!   cron_acron_bcron_cexpect_aexpect_bexpect_crc  r  s	           @r$   test_hash_mixup_all_fri_3rd_sat,CroniterTest.test_hash_mixup_all_fri_3rd_sat  s     q!$T1b)*T1a T1b!T1b!T1b!	
 #h-#h-78	0 	T&!_h7T&!_h7=>  fa(; ?>>   C%%
C3c                   ^ SnSnSn[        SSS5      m[        SSS5      /n[        SSS5      [        SSS	5      [        SSS
5      [        SSS5      /n[        [        U5      [        U5      -  5      nU4S jnU R                  U" US5      U5        U R                  U" US5      U5        U R	                  [
        5         U R                  U" US5      U5        S S S 5        g ! , (       d  f       g = f)NrU  r]  z0 0 * * 5,L6r^  rT   r)   r   ru   r>   r.  r   c                 v   > [        U T[        S9n[        U5       Vs/ s H  n[        U5      PM     sn$ s  snf r`  ra  rb  s       r$   rc  ;CroniterTest.test_lwom_mixup_all_fri_last_sat.<locals>.getn  re  rf  r   rg  rj  s	           @r$    test_lwom_mixup_all_fri_last_sat-CroniterTest.test_lwom_mixup_all_fri_last_sat  s     q!$T1b)*T1a T1b!T1b!T1b!	
 #h-#h-78	0 	T&!_h7T&!_h7=>  fa(; ?>>rs  c                   ^ [        SSS5      mSnSnSn[        SSS5      [        SSS5      [        SS	S5      /n[        SSS
5      [        SSS5      [        SS	S5      /n[        XE-   5      nU4S jnU R                  U" US5      U5        U R                  U" US5      U5        U R                  U" US5      U5        g )Nr^  rT   r)   z0 0 * * 6#1rU  z0 0 * * L6,6#1r   r   ru   r   r   rV   c                 v   > [        U T[        S9n[        U5       Vs/ s H  n[        U5      PM     sn$ s  snf r`  ra  rb  s       r$   rc  8CroniterTest.test_lwom_mixup_firstlast_sat.<locals>.getn'  re  rf  )r   rh  rI  rj  s	           @r$   test_lwom_mixup_firstlast_sat*CroniterTest.test_lwom_mixup_firstlast_sat  s    q!$!T1a((4A*>qRS@TUT1b)8D!R+@(4QRTVBWX(-.	0 	T&!_h7T&!_h7T&!_h7r'   c                   ^ [        SSS5      mSnSnSn[        SSS5      [        SSS	5      [        S
SS5      /n[        SSS5      [        SSS	5      [        S
SS5      /n[        [        U5      [        U5      -  5      nU4S jnU R                  U" US5      U5        U R                  U" US5      U5        U R                  U" US5      U5        g )Nr^  rp   r)   z0 0 * * 1#4z
0 0 * * L1z0 0 * * 1#4,L1r   r>   r   r  r   rV   ri   c                 v   > [        U T[        S9n[        U5       Vs/ s H  n[        U5      PM     sn$ s  snf r`  ra  rb  s       r$   rc  7CroniterTest.test_lwom_mixup_4th_and_last.<locals>.getn9  re  rf  rT   ru   )r   rh  ri  rI  rj  s	           @r$   test_lwom_mixup_4th_and_last)CroniterTest.test_lwom_mixup_4th_and_last/  s    r1%!T2r*HT2r,BHTSTVXDYZT2r*HT2r,BHTSTVXDYZ#h-#h-78	0 	T&!_h7T&!_h7T&!_h7r'   c                    [        SSSS5      n[        SUSS9nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  S5        U R                  UR                  S	5        U R                  UR                  S
5        g )Nr<   r   r   r   z59 58 1 * * *Tsecond_at_beginningr)   :   rB   r*   r    s       r$   test_configure_second_location+CroniterTest.test_configure_second_locationA  s    aQ'$GLL"+$**-)#2&2&r'   c                     U R                  [        5         [        S5        S S S 5        U R                  [        5         [        S5        S S S 5        g ! , (       d  f       N8= f! , (       d  f       g = f)Nz0 0 * * 1#7z0 0 * * 1#0r   r   r   r  s    r$   test_nth_out_of_range"CroniterTest.test_nth_out_of_rangeL  sM    34]# 534]# 54 5444   AA%
A"%
A3c                     U R                  [        5         [        S5        S S S 5        U R                  [        5         [        S5        S S S 5        g ! , (       d  f       N8= f! , (       d  f       g = f)Nz0 0 * * L-1z
0 0 * * L8r  r  s    r$   test_last_out_of_range#CroniterTest.test_last_out_of_rangeR  sM    34]# 534\" 54 5444r  c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S	5        U R                  UR                  S	5        g )
Nr<   r   r   r   r   z	0 0 1 * ?rR   r)   r   r   r    s       r$   test_question_markCroniterTest.test_question_markX  s    aR,{D)LL"+!$"#1%r'   c                     U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        g )Nz	? * * * *z	* ? * * *z* * ?,* * *r  r  s    r$   test_invalid_question_mark'CroniterTest.test_invalid_question_markb  s;    .+F.+F.-Hr'   c                    [        S[        SSS5      5      nUR                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        UR                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [        S[        SSS	5      5      nUR                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [        S
[        SSS5      5      nUR                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [        S[        SSS5      5      nUR                  [        5      n	U R                  U	R                  S5        U R                  U	R
                  S5        U R                  U	R                  S5        [        S[        SSS5      5      n
U
R                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [        S[        SSS5      5      nUR                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        g )Nz0 0 11 * * 0 2060  r)   i  rp   rN   z0 0 11 * * 0 2050-2060i  rj   z 0 0 29 2 * 0 2025,2021-2023,2028r^   i  rV   z0 0 29 2 * 0 2025,*z0 0 29 2 * 0 2022/3z0 0 29 2 * 0 2023-2035/3i  r   r   r   r   r+   r,   r-   )r!   itr1r0   r7   rY   r8   itr3rH   itr4rI   itr5rJ   itr6n7s                 r$   	test_yearCroniterTest.test_yearg  s   +XdAq-AB]]8$$'1%$]]8$$'1%$0(4B2GH]]8$$'1%$:HT1a<PQ]]8$$'1%$-xa/CD]]8$$'1%$-xa/CD]]8$$'1%$2HT1a4HI]]8$$'1%$r'   c                    [        S[        SSS5      5      nUR                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [        S[        S	SS5      5      nUR                  [        5      nU R                  UR                  S
5        U R                  UR
                  S5        U R                  UR                  S5        [        S[        SSS5      SS9nUR                  [        5      nU R                  UR                  S	5        U R                  UR
                  S5        U R                  UR                  S5        g )Nz0 0 31 11-12 * 0 2023rW   r)   rj   rt   r>   ri   z0 0 31 1-2 * 0 2023-2025r]   r  z0 0 1 1 1 0 2020-2030Frn   r  )r!   r  r0   rY   r7   r  r8   s          r$   test_year_with_other_field'CroniterTest.test_year_with_other_field  s$   /$21FG]]8$$'2&$2HT2r4JK]]8$$'1%$/$11EeT]]8$$'1%#r'   c                    [        S[        SSS5      5      nUR                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [        S[        SSS5      5      nUR                  [        5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [        S[        SSS5      5      nUR                  [        5      nU R                  UR                  S	5        U R                  UR
                  S
5        U R                  UR                  S5        g )Nz0 0 11 * * 0 2000r<   r)   rW   r>   rp   z0 0 29 2 * 0 2010-2030r^   r   rN   rV   )r   r   r_   r   r+   r,   r-   )r!   r  r   rY   p2s        r$   test_year_get_prevCroniterTest.test_year_get_prev  s"   +XdAq-AB]]8$$'2&$+XdAq-AB]]8$$'2&$0(4A2FG]]8$$'1%$r'   c                    U R                  [        R                  " S[        SSS5      5      5        U R                  [        R                  " S[        SSSSSS	5      S
S95        U R	                  [        R                  " S[        SSS5      5      5        U R	                  [        R                  " S[        SSS5      5      5        g )Nz* * * * * * 2024r]   r)   z59 58 23 31 12 * 2024r>   ri   r=   r  rB   Tr  z* * * * * * 2024-2026  z* * * * * * 2024/2r  r  r  s    r$   test_year_matchCroniterTest.test_year_match  s    '98D!Q;OPQNN'r2r2r2$(	
 	(?$PQSTAUVW(<htQPQ>RSTr'   c           	         U R                  [        5         [        S[        SSS5      5      nUR	                  5         S S S 5        U R                  [        5         [        S[        SSS5      5      nUR                  5         S S S 5        U R                  [        5         [        S[        SSS5      5      nUR	                  5         S S S 5        g ! , (       d  f       N= f! , (       d  f       Ne= f! , (       d  f       g = f)Nz* * * * * * 2020i  r)   rW   z* * 29 2 * * 2021-2023)r   r   r   r   r   r_   r   s     r$   test_year_bad_date_error%CroniterTest.test_year_bad_date_error  s    34-xa/CDCLLN 5 34-xa/CDCLLN 5 343XdAq5IJCLLN 54 54 54 54s#   (C(C" (C3
C"
C03
Dc                    [        SSS5      n[        SUSS9nUR                  [         5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S	5        U R                  UR                  S
5        U R                  UR                  S5        g )Nr  r)   z59 58 23 31 12 * 2070Tr  i  r>   ri   r=   r  rB   r*   r    s       r$   "test_year_with_second_at_beginning/CroniterTest.test_year_with_second_at_beginning  s    a#.$OLL"&"%#$2&2&r'   c                     U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        g )Nz0 0 1 * * 0 1000z0 0 1 * * 0 99999z0 0 1 * * 0 2070#3r  r  s    r$   test_invalid_yearCroniterTest.test_invalid_year  s>    .:LM.:MN.:NOr'   c                    [        SSSSS5      n[        SU5      nUR                  [         5      nU R                  UR                  UR                  S-
  5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g )	Nr^  rT   rj   r   r   z
0 6 30 3 *r)   r   r   r   s       r$   test_issue_47CroniterTest.test_issue_47  s    aQ*|T*X&TYY]3a(B'Q'q)r'   c           (         / n[        SS5       HA  nUR                  U[        S[        SSU5      [        S9R	                  5       45        US-  nMC     U R                  US[        SSSSS5      4S[        SSS	SS5      4S
[        SSS	SS5      4S[        SSS	SS5      4S[        SSS	SS5      4S[        SSS	SS5      4S[        SSS	SS5      4S[        SSS	SS5      4S	[        SSS	SS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S[        SSSSS5      4S [        SSSSS5      4S![        SSSSS5      4S"[        SSSSS5      4S#[        SSSSS5      4S$[        SSSSS5      4/5        g )%Nr)   ri   z35 * 1-l/8 * *r^   r  r   #   rN   rR   rT   r   ru   r   ry   r   r   r{   rp   r>   r   r  r   rx   r?   r   r.  rD   r   r   r=   r   r   r   rS   rV   rj   )rF   r  r   r   r   r   )r!   r  rG   s      r$   test_issue_142_dowCroniterTest.test_issue_142_dow  s   q"AJJH-xa/ChW``bc FA	 
 	HT1aB/0HT1aB/0HT1aB/0HT1aB/0HT1aB/0HT1aB/0HT1aB/0HT1aB/0HT1aB/0XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAr1b12XdAq!R01XdAq!R01XdAq!R01XdAq!R01XdAq!R01="	
r'   c           	      .   [        SSS5      nSnU R                  [        5         [        X!SSS9nUR	                  5         S S S 5        [        X!SSS9nU R                  UR	                  [         5      [        S	SS
S5      5        g ! , (       d  f       NK= f)Nr^   rR   r   0 13 8 1,4,7,10 wedFr)   ro   max_years_between_matchesru   r  r   r   )r   r   r   r   r   r   )r!   r  cronr  s       r$   test_issue145_getnext"CroniterTest.test_issue145_getnext  s}    q"%$34$eqQBKKM 5
 d%1MX.q!R0HI 54s   B
Bc           	         [        SSS5      nSn[        X!SS9nSUl        UR                  5       nU R	                  [
        5         [        U5        S S S 5        [        X!SSS	9R                  [         5      n[        U5      nU R                  U[        S
SSS5      5        [        X!SSS	9R                  [         5      nU R	                  [        5         [        U5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr^   rR   r   r  Frn   r)   ru   r  r  r   r   rN   )	r   r   _max_years_between_matchesall_nextr   r   r   r   StopIteration)r!   r  r  ccroniterabler#   s         r$   test_explicit_year_forward'CroniterTest.test_explicit_year_forward   s    q"%$ U3+,(>>#34N 5 DQRS\\
 NHT1a45 DQRS\\
 }-N .- 54 .-s   C)C:)
C7:
Dc                 n    U R                  [        R                  " S[        SSSSSSS5      5      5        g	)
.r   r  r)   r  rp   r   rB   r  N)r!  r   r  r   r  s    r$   test_issue151CroniterTest.test_issue151:  s,    {HT1b"aQSU[4\]^r'   c                 b    U R                  [        [        S[        R                  " 5       5        g)r  z0-10000000 * * * *N)r   r   r   r   r   r  s    r$   test_overflowCroniterTest.test_overflow>  s"    .:NPXP\P\P^_r'   c                 &   [        S[        SSSSSSS5      5      R                  5       nU R                  S	U5        U R	                  [
        [         S
5        [        S[        SSSSSSS5      5      R                  5       nU R                  SU5        g)r  z* * * * *,0r  r)   r  rp   r   rB   r  g   Az* * * * *,b0 0 * * *,sat#3g    AN)r   r   r   r   r   r   )r!   r  s     r$   test_issue156CroniterTest.test_issue156B  s    mXdAr2q"f%MNWWYr*.-H'$2r1b&)QR[[]r*r'   c                 r   [        S5      u  pp4pVU R                  [        S5      R                  U   / SQ5        U R                  [        S5      R                  U   / SQ5        U R                  [        S5      R                  U   / SQ5        U R                  [        S5      R                  U   S	S/5        g )
Nr   z0 8,22,10,23 1 1 0)r   r   r   r=   z0 0 25-L 1 0)r   r   r   rS   rV   rj   ri   r  )ry   r  r   lr  r   )rF   rI  r   r   r   s          r$   test_confirm_sortCroniterTest.test_confirm_sortJ  s    $QxacX&:;DDQGYXn5>>qAC_`X&9:CCAFHXYX&78AA#FaQr'   c                 p    U R                  [        [        S5        U R                  [        [        S5        g )Nz	0 0 0 0 0z	0 0 0 1 0r  r  s    r$   test_issue_k6CroniterTest.test_issue_k6Q  s(    .+F.+Fr'   c                    [        SSSSSS[        R                  " S5      S9n[        S	5      R	                  [         US
9n[        S	U5      R	                  [         5      nX#4 HX  nU R                  UR                  R                  S5        U R                  [        [        R                  " U5      5      S5        MZ     g )Nr  r)   r  rp   r   rB   zAmerica/New_Yorkr  z
* * * * * r  i<<\)
r   r
  r  r   r   r   r	  r  int_datetime_to_timestamp)r!   r   nextnownextnow2nts        r$   test_issue_k11CroniterTest.test_issue_k11U  s    tQB2h6G6GHZ6[\<(--h3-GL#.33H=#BRYY]],>?S!@!@!DEzR $r'   c           	          [         R                  " S5      n[        SSSSSUS9n[        S5      nUR	                  US	9  UR                  5       nU R                  U[        U5      S
-   5        g )Nr'  r<   r)   r=   r>   r?   r  r   r  r  )r
  r  r   r   set_currentr   r   r   )r!   r  r   r"   r0   s        r$   test_issue_k12CroniterTest.test_issue_k12]  sd    /aRB7{#4(\\^2482=>r'   c                 :    U R                  [        [        S5        g )Nz4 0 L/2 2 0r  r  s    r$   test_issue_k34CroniterTest.test_issue_k34f  s    .-Hr'   c           	      $   Sn/ n[        S5       Hf  n[        S[        X-   SS5      [        S9n[        S5       H8  nUR                  5       nUR                  X-   :X  d  M'  UR                  U5        M:     Mh     / [        SSSSS5      P[        SSS	SS5      P[        SSS
SS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSS	SS5      P[        SSS
SS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSS	SS5      P[        SSS
SS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSS
SS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSS	SS5      P[        SSS
SS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSS	SS5      P[        SSS
SS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSS	SS5      P[        SSS
SS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSS	SS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      P[        SSSSS5      PnU R                  X'5        [        R                  " S5        g )NrV  r   z30 23 1-7 JAN MON-FRI#1r)   r  ry   r=   rj   rN   rT   r   ru   r  r^   r   r^  r  rt   r]   r  i  r  z30 6 1-7 MAY MON#1)rF   r   r   r   r+   r  r   r~  )r!   r*  r  rG   r  jr   retss           r$   test_issue_k33CroniterTest.test_issue_k33j  s+   rA5xq!7LW_`D1XMMO66QU?JJqM  3
T1aR(3
T1aR(3
 T1aR(3
 T1aR(	3

 T1aR(3
 T1aR(3
 T1aR(3
 T1aR(3
 T1aR(3
 T1aR(3
 T1aR(3
 T1aR(3
 T1aR(3
 T1aR(3
 T1aR(3
  T1aR(!3
" T1aR(#3
$ T1aR(%3
& T1aR('3
( T1aR()3
* T1aR(+3
, T1aR(-3
. T1aR(/3
0 T1aR(13
2 T1aR(33
4 T1aR(53
6 T1aR(73
8 T1aR(93
: T1aR(;3
< T1aR(=3
> T1aR(?3
@ T1aR(A3
B T1aR(C3
D T1aR(E3
F T1aR(G3
H T1aR(I3
J T1aR(K3
L T1aR(M3
N T1aR(O3
P T1aR(Q3
R T1aR(S3
T T1aR(U3
V T1aR(W3
X T1aR(Y3
Z T1aR([3
\ T1aR(]3
^ T1aR(_3
` T1aR(a3
b T1aR(c3
d T1aR(e3
h 	#,-r'   c           
          [        S[        SSS5      5      R                  [        5      nU R                  U[        SSSSS5      5        g )Nz15 22 29 2 *r]   rN   rV   r^   r   r   )r   r   r_   r   )r!   r  s     r$   test_bug_62_leapCroniterTest.test_bug_62_leap  s?    ~xa'<=FFxPhtQB;<r'   c           	      f   Sn[        SSS5      [        SSS5      [        SSS5      4 H>  n[        X5      R                  [         5      nU R                  U[        SSS5      5        M@     [        U[        SSS5      5      R                  [         5      nU R                  U[        S	S
S5      5        g)z;get_prev should not skip Feb 29 on leap years (issue #203).z
0 0 29 * *r]   rT   rN   r   rS   rV   r)   rt   r>   Nr  )r!   r|   r  r  s       r$   test_get_prev_leap_year_feb29*CroniterTest.test_get_prev_leap_year_feb29  s    tQ*HT1b,A8DRSUWCXYE4'00:CS(4B"78 Z tXdAr23<<XFhtR45r'   c           
      X   Sn[        U[        SSSSS5      SS9R                  [        5      nU R                  U[        SSSSS5      5        [        U[        SSSSS	5      SS9R                  [        5      nU R                  U[        SSSSS
5      5        [        U[        SSSSS5      SS9R	                  [        5      nU R                  U[        SSSSS5      5        [        U[        SSSSS	5      SS9R	                  [        5      nU R                  U[        SSSSS5      5        g )Nz*/7 * * * *r]   ry   rp   r   Trv   expand_from_start_timer?   r>   r.  r   ru   r   r   r   r   r_   )r!   seven_seconds_interval_patternr[  ret2ret3ret4s         r$   "test_expand_from_start_time_minute/CroniterTest.test_expand_from_start_time_minute  s@   )6&*aR4#'
 (8
	 	
 	xaR<=*aR4#'
 (8
	 	
 	xaR<=*aR4#'
 (8
	 	
 	xaR;<*aR4#'
 (8
	 	
 	xaR;<r'   c           
      X   Sn[        U[        SSSSS5      SS9R                  [        5      nU R                  U[        SSSS	S5      5        [        U[        SSSS
S5      SS9R                  [        5      nU R                  U[        SSSSS5      5        [        U[        SSSSS5      SS9R	                  [        5      nU R                  U[        SSSSS5      5        [        U[        SSSS
S5      SS9R	                  [        5      nU R                  U[        SSSSS5      5        g )Nz0 */7 * * *r]   ry   rp   r   r   Tr  r   rx   r=   r   rR   r  )r!   seven_hours_interval_patternr[  r  r  r  s         r$    test_expand_from_start_time_hour-CroniterTest.test_expand_from_start_time_hour  s@   '4$(aR3#'
 (8
	 	
 	xaR;<(aR3#'
 (8
	 	
 	xaR;<(aR3#'
 (8
	 	
 	xaQ:;(aR3#'
 (8
	 	
 	xaQ:;r'   c                 8   Sn[        U[        SSS5      SS9R                  [        5      nU R                  U[        SSS5      5        [        U[        SSS5      SS9R                  [        5      nU R                  U[        SSS	5      5        [        U[        SSS5      SS9R	                  [        5      nU R                  U[        SSS5      5        [        U[        SSS5      SS9R	                  [        5      nU R                  U[        SSS
5      5        g )N0 0 */5 * *r]   ry   r>   Tr  r{   r   r?   r   r  )r!   five_days_interval_patternr[  r  r  r  s         r$    test_expand_from_start_time_date-CroniterTest.test_expand_from_start_time_date  s    %2"&a,#'
 (8
	 	
 	xa45&a,#'
 (8
	 	
 	xa45&a,#'
 (8
	 	
 	xa34&a,#'
 (8
	 	
 	xa34r'   c                 8   Sn[        U[        SSS5      SS9R                  [        5      nU R                  U[        SSS5      5        [        U[        SSS5      SS9R                  [        5      nU R                  U[        SS	S5      5        [        U[        SSS5      SS9R	                  [        5      nU R                  U[        SS
S5      5        [        U[        SSS5      SS9R	                  [        5      nU R                  U[        SSS5      5        g )Nz0 0 1 */3 *r]   ry   r)   Tr  r   r   rp   r   ru   r  r!   three_monts_interval_patternr[  r  r  r  s         r$   !test_expand_from_start_time_month.CroniterTest.test_expand_from_start_time_month	  s    '4$(a+#'
 (8
	 	
 	xb!45(a+#'
 (8
	 	
 	xb!45(a+#'
 (8
	 	
 	xa34(a+#'
 (8
	 	
 	xa34r'   c                 8   Sn[        U[        SSS5      SS9R                  [        5      nU R                  U[        SSS5      5        [        U[        SSS5      SS9R                  [        5      nU R                  U[        SSS	5      5        [        U[        SSS5      SS9R	                  [        5      nU R                  U[        SSS
5      5        [        U[        SSS5      SS9R	                  [        5      nU R                  U[        SSS5      5        g )Nz0 0 * * */2r]   ry   r   Tr  r>   rp   r   r   rR   r  r  s         r$   'test_expand_from_start_time_day_of_week4CroniterTest.test_expand_from_start_time_day_of_week1	  s    '4$(a,#'
 (8
	 	
 	xa45(a,#'
 (8
	 	
 	xa45(a,#'
 (8
	 	
 	xa34(a,#'
 (8
	 	
 	xa34r'   c           
      v    [        SSS9nU R                  [        UR                  [        [	        SSS5      S9  g )Nr  T)r  r]   ry   r>   r  )r   r   r   r   r   )r!   expanded_croniters     r$   4test_get_next_fails_with_expand_from_start_time_trueACroniterTest.test_get_next_fails_with_expand_from_start_time_trueO	  s>    $]4P)22HRVXY[]I^ 	 	
r'   c                 f   [        S5      nUR                  [        SSS5      SS9  [        S5       Vs/ s H,  o!R	                  [        5      UR                  [        5      4PM.     nnU R                  U[        SSSSSS	5      [        SSSSSS	5      4[        SSSSSS
5      [        SSSSSS
5      4[        SSSSSS5      [        SSSSSS5      4/5        UR	                  [        [        SSS5      S9UR                  [        5      4nU R                  US   U5        UR                  [        SSS5      SS9  [        S5       Vs/ s H,  o!R                  [        5      UR                  [        5      4PM.     nnU R                  U[        SSSSSS5      [        SSSSSS5      4[        SSSSSS5      [        SSSSSS5      4[        SSSSSS5      [        SSSSSS5      4/5        UR                  [        [        SSS5      S9UR                  [        5      4nU R                  US   U5        UR                  [        SSS5      SS9  UR                  [        5      n[        S5       Vs/ s H#  n[        U5      UR                  [        5      4PM%     nnUR                  [        [        SSS5      S9n[        S5       Vs/ s H#  n[        U5      UR                  [        5      4PM%     n	nUR                  [        SSS5      SS9  UR                  [        5      n[        S5       Vs/ s H#  n[        U5      UR                  [        5      4PM%     n
nUR                  [        [        SSS5      S9n[        S5       Vs/ s H#  n[        U5      UR                  [        5      4PM%     nnU R                  XZ5        U R                  X[5        U R                  X85        U R                  X95        UR                  [        SSS5      SS9  [        S5       Vs/ s H,  nUR	                  [        SS9UR                  [        5      4PM.     nnU R                  U[        SSSSSS	5      [        SSSSS5      4[        SSSSSS	5      [        SSSSS5      4[        SSSSSS	5      [        SSSSS5      4/5        UR                  [        SSS5      SS9  [        S5       Vs/ s H,  nUR                  [        SS9UR                  [        5      4PM.     nnU R                  U[        SSSSSS5      [        SSSSS5      4[        SSSSSS5      [        SSSSS5      4[        SSSSSS5      [        SSSSS5      4/5        UR                  [        SSS5      SS9  UR                  [        SS9n[        S5       Vs/ s H#  n[        U5      UR                  [        5      4PM%     nnUR                  [        SSS5      SS9  UR                  [        SS9n[        S5       Vs/ s H#  n[        U5      UR                  [        5      4PM%     nnU R                  X5        U R                  X5        g s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nz* * * * * *r]   ry   r>   T)forcerT   r   r)   rN   r  rp   r=   rB   r  9   F)update_current)r   r  r   rF   r   r   r   r_   r  r   all_prev)r!   r  aretnretnsretpretpsr  retanretansretapretapsuretnuretpuretanuretaps                   r$   test_get_next_update_current)CroniterTest.test_get_next_update_currentU	  s   &$2.d;OTUVxXx!x($*:*:8*DExX$2q!Q/$2q!Q1OP$2q!Q/$2q!Q1OP$2q!Q/$2q!Q1OP	
 MM(xa/DMEX&
 	a%($2.d;OTUVxXx!x($*:*:8*DExX$2r2r2HT1b"bRT4UV$2r2r2HT1b"bRT4UV$2r2r2HT1b"bRT4UV	
 MM(xa/DMEX&
 	a%($2.d;MM(#@EaI1$q'4++H56IMM(xa/DMEAFqJA47D,,X67J$2.d;MM(#@EaI1$q'4++H56IMM(xa/DMEAFqJA47D,,X67J%&%&$2.d; 1X
 ]]8E]:D<L<LX<VW 	 
 	$2q!Q/$2q!1LM$2q!Q/$2q!1LM$2q!Q/$2q!1LM	
 	$2.d; 1X
 ]]8E]:D<L<LX<VW 	 
 	$2r2r2HT1b!Q4OP$2r2r2HT1b!Q4OP$2r2r2HT1b!Q4OP	
 	$2.d;MM(5M9AFqJA47D,,X67J$2.d;MM(5M9AFqJA47D,,X67J''s Y" Y$ J K J K

 K Ks;   3Z	3Z3*Z*Z4*Z*Z$3Z-3Z$
*Z)2*Z.c                     [        SSSSS5      n[        SU5      n UR                  5         g ! [         a    [	        S5      ef = f)Ni  r)   r   r   zoverflow not fixed!)r   r   r   OverflowError	Exceptionr  s      r$   test_issue_2038yCroniterTest.test_issue_2038y	  sI    aAq){D)	3LLN 	3122	3s	   . Ac                     U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        g )Nz* * * * 1-7z	* * * * 7)r!  r   r  r  s    r$   %test_revert_issue_90_aka_support_dow72CroniterTest.test_revert_issue_90_aka_support_dow7	  s0    ))-89))+67r'   c           	      `   U R                  S[        [        SS5      5      5        U R                  S[        [        SS5      5      5        U R                  S/ SQ5        U R                  S/ SQ5        U R                  S	/ S
Q5        U R                  S/ SQ5        U R                  S/ SQ5        g )Nz0 0 * * Sun-SunrN       z0 0 * * Mon-Sunz0 0 * * Tue-Sun)rN   rT   r   ru   r   ry   rR   r   rp   r>   r   r  rx   r{   r?   r.  rD   r   r=   r   r   r   r   rS   rj   ri   r)   rN   rT   r   z0 0 * * Wed-Sun)rT   r   ru   r   ry   r   rp   r>   r   r  r{   r?   r.  rD   r   r   r   r   r   rS   ri   r)   rN   rT   r   ry   r   rR   r   rp   z0 0 * * Thu-Sun)r   ru   r   ry   rp   r>   r   r  r?   r.  rD   r   r   r   r   rS   r)   rN   rT   r   r   rR   r   rp   r   rx   r{   r?   r   r=   z0 0 * * Fri-Sun)ru   r   ry   r>   r   r  r.  rD   r   r   r   rS   rN   rT   r   rR   r   rp   rx   r{   r?   r=   r   r   r)   rN   rT   r   rR   r   z0 0 * * Sat-Sun)r   ry   r   r  rD   r   r   rS   rT   r   r   rp   r{   r?   r   r   rN   rT   rR   r   rx   r{   r=   r   rj   ri   r   ry   r   r  )_test_sunday_rangesr+  rF   r  s    r$   test_sunday_ranges_to"CroniterTest.test_sunday_ranges_to	  s      !2Dq"4FG  !2Dq"4FG  "	
H 	  "	
H 	  "	
H 	  "	
H 	  "	
r'   c                 D   U R                  S/ SQ5        U R                  S/ SQ5        U R                  S/ SQ5        U R                  S/ SQ5        U R                  S	/ S
Q5        U R                  S/ SQ5        U R                  S/ SQ5        U R                  S/ SQ5        g )Nz0 0 * * Sun-Mon)ry   r   r  r   r   r   rS   rV   r   ru   rp   r>   r?   r.  r   r   rT   r   r   rp   r{   r?   r   r   ri   r)   ry   r   r  r   z0 0 * * Sun-Tue)rN   ry   r   rR   r  r   rx   r   r   r=   rS   rV   rj   r   ru   r   rp   r>   r   r?   r.  rD   r   r   r   rT   r   ru   r   rp   z0 0 * * Sun-Wed)rN   rT   ry   r   rR   r   r  r   rx   r{   r   r   r=   r   rS   rV   rj   ri   r   ru   r   ry   rp   r>   r   r  r?   r.  rD   r   z0 0 * * Sun-Thu)rN   rT   r   ry   r   rR   r   rp   r  r   rx   r{   r?   r   r   r=   r   r   rS   rV   rj   ri   r)   r   ru   r   ry   r   rp   r>   z0 0 * * Sun-Fri)rN   rT   r   ru   ry   r   rR   r   rp   r>   r  r   rx   r{   r?   r.  r   r   r=   r   r   r   rS   rV   rj   ri   r)   rN   r   ru   z0 0 * * Sun-Sat)rN   rT   r   ru   r   ry   r   rR   r   rp   r>   r   r  r   rx   r{   r?   r.  rD   r   r   r=   r   r   r   r   rS   rV   rj   ri   z0 0 * * Thu-Tue/2)rN   r   r   rR   rp   r   rx   r?   rD   r=   r   r   rj   r)   rT   r   r   r   r   r   r{   rD   r   r   r   rV   rN   ru   ry   rR   z0 0 * * Thu-Tue/3)r   ry   rp   r  r?   r   r   rS   r)   r   r   rp   r   r?   r   r   rV   rT   ry   r   r  r{   r   r   rS   ri   r   ry   rp   r  )r5  r  s    r$   test_sunday_ranges_from$CroniterTest.test_sunday_ranges_fromx
  s      "	
H 	  "	
H 	  "	
H 	  "	
H 	  "	
H 	  "	
H 	  "	
H 	  "	
r'   c                    U R                  S/ SQ5        U R                  S/ SQ5        U R                  S/ SQ5        U R                  S/ SQ5        U R                  S	/ S
Q5        U R                  S/ SQ5        U R                  S/ SQ5        g )Nz0 0 1 Jan-Dec *)24 224 324 424 524 624 724 824 924 1024 1124 1225 125 225 325 425 5z0 0 1 Nov-Mar *)r<  r=  rE  rF  rG  rH  rI  z25 1125 1226 1z26 226 3z26 11z26 1227 1z27 2z0 0 1 Apr-Feb *)r<  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rJ  rK  25 625 7z0 0 1 Apr-Mar/3 *)r>  rA  rD  rG  rJ  rQ  25 10rM  26 426 7z26 10rO  z27 427 7z27 1028 1z0 0 1 Apr-Mar/2 *)r=  r>  r@  rB  rD  rF  rI  rJ  rP  z25 8rR  rL  rN  rS  z26 6z26 8z0 0 1 Jan-Aug/2 *)r=  r?  rA  rG  rI  rK  rQ  rM  rN  26 5rT  rO  z27 327 5rU  rV  z0 0 1 Jan-Aug/4 *)r?  rG  rK  rM  rW  rO  rX  rV  z28 5z29 1z29 5z30 1z30 5z31 1z31 5z32 1)_test_mth_cron_rangesr  s    r$   test_mth_ranges_from!CroniterTest.test_mth_ranges_from  s    ""	
* 	""	
* 	""	
* 	""	
* 	""	
* 	""	
* 	""	
r'   c           	          U=(       d    [         " X=(       d    SU=(       d    [        SSS5      US9nU H  nU R                  X(5        M     g )Nr   r]   r)   )loopsr  rV  )gen_x_resultsr   r   )	r!   r|   wanted	generatorr]  r  rV  r  r  s	            r$   _test_cron_rangesCroniterTest._test_cron_ranges.  sJ     *]*5+HHT1a4HRY
 CV) r'   c           	      D    U R                  UU[        U=(       d    SUUS9$ )Nrx   r`  r]  r  rV  )ra  gen_x_mth_resultsr!   r|   r_  r]  r  rV  s         r$   rY  "CroniterTest._test_mth_cron_ranges7  s0    %%'+2 & 
 	
r'   c           	      D    U R                  UU[        U=(       d    SUUS9$ )Nrj   rd  )ra  gen_all_sunday_formsrf  s         r$   r5   CroniterTest._test_sunday_rangesA  s0    %%*+2 & 
 	
r'    )returnN)NNNNNNN)__name__
__module____qualname____firstlineno__r%   r1   r9   rK   rO   rZ   ra   rf   rk   rq   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r#  r2  r7  r=  r@  rN  rQ  r^  ra  rl  ro  rw  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r   r#  r7  r>  rD  rL  rO  rR  rW  rZ  rq  rw  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  maxDiffr  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r	  r  r  r  r)  r.  r1  r6  r9  rZ  ra  rY  r5  __static_attributes__rk  r'   r$   r   r      s   	'	5(2&:
%&>%(4(6( J&($% %)%VA	*R*

*8)*0*0*	&	%10%8B%8C(J'++++2S
676,F0F0F,F,!6F!6F'B'BH$H$6"6&V
G7>J(K$9 9989:99
;A$
&)[&;/
b
8;

2
4
&W
X
tK0K0
&
&;..
*
,
*
*
&<0<28$8$	'$#&I
'%R$&%&
U		'P
* G)
V
J4_`+RGS?I?.B=6=<<<5<5<5<
](~38v
p_
B	S
l MQ*

r'   r   c                 \   U=(       d    [        SSS5      n[        XS9nU(       a  UR                  OUR                  n[	        U=(       d    S5       Vs/ s H  oe" [         5      PM     sn Vs/ s H*  n[        UR                  5      SS   SUR                   3PM,     sn/$ s  snf s  snf )Nr]   r)   r  rx    )r   r   r_   r   rF   r   r+   r,   r|   r]  r  rV  r  r#   rG   r  s           r$   re  re  L  s    )XdAq)ED+D dmmALQRWR][]L^6_L^qq{L^6_`6_AFFBC !177),6_`aa6_`s   B$/1B)c                 ,   U=(       d    [        SSS5      n[        XS9nU(       a  UR                  OUR                  n[	        U=(       d    S5       Vs/ s H  oe" [         5      PM     sn Vs/ s H  owR                  5       PM     sn/$ s  snf s  snf )Nr]   r)   r  rj   )r   r   r_   r   rF   r  rw  s           r$   r^  r^  S  sr    )XdAq)ED+D dmmA:?:L$M:LQQx[:L$MN$Mq[[]$MNOO$MNs   B/Bc                    U=(       d    [        SSS5      n[        XS9nU(       a  UR                  OUR                  n[	        U=(       d    S5       Vs/ s H  oe" [         5      PM     sn Vs/ s H  owR
                  PM     nn[        U R                  5       R                  SS5      US9nU(       a  UR                  OUR                  n[	        U=(       d    S5       Vs/ s H  oe" [         5      PM     sn Vs/ s H  owR
                  PM     n	n[        U R                  5       R                  SS5      US9nU(       a  UR                  OUR                  n[	        U=(       d    S5       Vs/ s H  oe" [         5      PM     sn Vs/ s H  owR
                  PM     n
nXU
4$ s  snf s  snf s  snf s  snf s  snf s  snf )Nr]   r)   r  rj   r1  70)r   r   r_   r   rF   r-   lowerr  )r|   r]  r  rV  r  r#   rG   r  r[  r  r  s              r$   ri  ri  Z  sX   )XdAq)ED+D dmmA16u{1CD1CAAhK1CDEDaEEDDEDJJL((4GD dmmA16u{1CD1CAAhK1CDEDaEEDDEDJJL((4GD dmmA16u{1CD1CAAhK1CDEDaEEDDEt EE EE EEs$   F&/F+#F0=F51F:F?__main__rm  )unittestr
  r   r   	functoolsr   timer   dateutil.tzr  r  r   r   r   r	   r
   r   croniter.croniterr   croniter.testsr   TestCaser   re  r^  ri  rn  mainrk  r'   r$   <module>r     sk      (      3 q0
4== q0
habP zMMO r'   