
    _jQ                        S SK r S SKrS SKrS SKJrJr  S SKJrJrJr  S SKJ	r	   " S S\	R                  5      r " S S\5      r " S	 S
\5      r " S S\	R                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\S:X  a  \R,                  " 5         gg)    N)datetime	timedelta)CroniterBadCronErrorCroniterNotAlphaErrorcroniter)basec                   <    \ rS rSr\" SSSSS5      rSr S	S jrSrg)
CroniterHashBase
        r   helloNc                 4   Uc  U R                   nUc  U R                  nUc  [        n[        U[        [
        45      (       d  U4n[        XUS9nUR                  U5      nU R                  X5        Ub$  U R                  UR                  U5      X-   5        g g )Nhash_id)
epochr   r   
isinstancelisttupler   get_nextassertInassertEqual)	self
definitionexpectationsdeltar   r   	next_typeobjtestvals	            V/home/rurouni/.local/lib/python3.13/site-packages/croniter/tests/test_croniter_hash.py
_test_iterCroniterHashBase._test_iter   s     =JJE?llG I,u66(?Lz':,,y)g,S\\)4goF      )NNN)	__name__
__module____qualname____firstlineno__r   r   r   r!   __static_attributes__r$   r#   r    r
   r
   
   s&    T1aA&EG TXGr#   r
   c                       \ 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g)CroniterHashTest    c           
      R    U R                  S[        SSSSS5      [        SS95        g)zTest manually-defined hourly	H * * * *r   r   r   r   hoursNr!   r   r   r   s    r    test_hash_hourly!CroniterHashTest.test_hash_hourly!   s%    XdAq!R%@)RSBTUr#   c           
      R    U R                  S[        SSSSS5      [        SS95        g)zTest manually-defined daily	H H * * *r   r      r   daysNr1   r2   s    r    test_hash_daily CroniterHashTest.test_hash_daily%   s%    XdAq"b%A9RSCTUr#   c                 p    U R                  S[        SSSSS5      [        SSSSS5      4[        SS95        g	)
zTest manually-defined weekly	H H * * Hr   r      r7   r      weeksNr1   r2   s    r    test_hash_weekly!CroniterHashTest.test_hash_weekly)   s=    
 	dAq"b)8D!QB+GHA	
r#   c           
      R    U R                  S[        SSSSS5      [        SS95        g)	zTest manually-defined monthly	H H H * *r   r   r7   r      r8   Nr1   r2   s    r    test_hash_monthly"CroniterHashTest.test_hash_monthly4   s%    XdAq"b%A9RTCUVr#   c           
      R    U R                  S[        SSSSS5      [        SS95        g	)
zTest manually-defined yearlyz	H H H H *r   	   r   r7   r   m  r8   Nr1   r2   s    r    test_hash_yearly!CroniterHashTest.test_hash_yearly8   s%    XdAq"b%A9RUCVWr#   c                 T    U R                  S[        SSSSSS5      [        SS95        g)	zSTest seconds

If a sixth field is provided, seconds are included in the datetime()
zH H * * * Hr   r   r7   r   r,   r8   Nr1   r2   s    r    test_hash_second!CroniterHashTest.test_hash_second<   s)    
 	xaBB'GXYIZ[r#   c                 T    U R                  S[        SSSSSS5      [        SS95        g)	z,Test years

provide a seventh field as year
zH H * * * H Hi  r   r7   r   r,   r8   Nr1   r2   s    r    test_hash_yearCroniterHashTest.test_hash_yearC   s)    
 	$1b"b)I9Z[K\]r#   c           
          U R                  S[        SSSSS5      [        SS95        U R                  S[        SSSSS5      [        SS9S	S
9  g)zRTest a different hash_id returns different results given same definition and epochr6   r   r   r7   r   r8   r      zdifferent idr   Nr1   r2   s    r    test_hash_id_change$CroniterHashTest.test_hash_id_changeJ   sR    XdAq"b%A9RSCTU$1a4iQ6GQ_ 	 	
r#   c                     U R                  S[        SSSSS5      [        SS95        U R                  S[        SSSSS5      [        SS9[        SSSSS5      S	9  g
)zRTest a different epoch returns different results given same definition and hash_idr6   r   r   r7   r   r8   i     )r   Nr1   r2   s    r    test_hash_epoch_change'CroniterHashTest.test_hash_epoch_changeQ   sa    XdAq"b%A9RSCTUT2r2r*14RR0	 	 	
r#   c           
          U R                  S[        SSSSS5      [        SS95        U R                  S	[        S
SSSS5      [        SS95        g)zTest a hashed range definitionzH H H(3-5) * *r   r   r?   r7   r   rF   r8   zH H * * * 0 H(2025-2030)i  Nr1   r2   s    r    test_hash_range CroniterHashTest.test_hash_range[   sL    ((4Ar2*F	WYHZ[&q!R(DiUVFW	
r#   c                     U R                  S[        SSSSS5      [        SS95        U R                  S[        SS	SS
SS5      [        SS95        g)z!Test a hashed division definitionzH H/3 * * *r   r      r   r>   r/   zH H H H * H H/2rJ   r7   r,   i  r8   Nr1   r2   s    r    test_hash_division#CroniterHashTest.test_hash_divisionb   sM    xaAr'BITUDVWxaBB?PWAX	
r#   c           
      R    U R                  S[        SSSSS5      [        SS95        g)	z)Test a hashed range + division definitionzH(30-59)/10 H * * *r   r   r7      r   minutesNr1   r2   s    r    test_hash_range_division)CroniterHashTest.test_hash_range_divisioni   s&    -xaB/KY_aMbcr#   c           
           U R                  S[        SSSSS5      [        SS95        g	! [         a%  nU R	                  [        U5      S5         S	nAg	S	nAff = f)
z:Test validation logic for range_begin and range_end valueszH(11-10) H * * *r   r   r7   rF   r   re   z*Range end must be greater than range beginN)r!   r   r   r   r   str)r   exs     r    test_hash_invalid_range(CroniterHashTest.test_hash_invalid_rangem   sZ    	TOO"HT1aR$@)TVBW $ 	TSW&RSS	Ts   '* 
AAAc           
      P    U R                  S[        SSSSS5      [        SS9SS9  g	)
zTest hash_id as a bytes objectr6   r   r      5   r8   s   r   Nr1   r2   s    r    test_hash_id_bytes#CroniterHashTest.test_hash_id_bytesv   s1    T1aR(1'	 	 	
r#   c                 0    U R                  SSS[        S9  g)zTest result as a float objectr6   g   AiQ )r   N)r!   floatr2   s    r    test_hash_float CroniterHashTest.test_hash_float   s    \LUSr#   c                     U R                  [        5         [        SU R                  U R                  S9  SSS5        g! , (       d  f       g= f)z7Test an invalid definition raises CroniterNotAlphaErrorz	X X * * *r   N)assertRaisesr   r   r   r   r2   s    r    test_invalid_definition(CroniterHashTest.test_invalid_definition   s1    45[$**dllC 655	    ?
Ac                     U R                  [        5         [        SU R                  SS0S9  SSS5        g! , (       d  f       g= f)z-Test an invalid hash_id type raises TypeErrorr6   r   r`   r   N)rx   	TypeErrorr   r   r2   s    r    test_invalid_hash_id_type*CroniterHashTest.test_invalid_hash_id_type   s0    y)[$**q!f= *))s	   7
Ac                     U R                  [        5         [        SU R                  U R                  S9  SSS5        g! , (       d  f       g= f)z8Test an invalid divisor type raises CroniterBadCronErrorz* * H/0 * *r   N)rx   r   r   r   r   r2   s    r    test_invalid_divisor%CroniterHashTest.test_invalid_divisor   s1    34]DJJE 544r{   r$   N)r%   r&   r'   r(   r3   r:   rB   rG   rL   rO   rR   rV   rZ   r]   ra   rg   rl   rq   ru   ry   r~   r   r)   r$   r#   r    r+   r+       sg    VV	
WX\^



dT
TD
>
Fr#   r+   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)CroniterWordAliasTest   c                 T    U R                  S[        SSSSSS5      [        SS95        g)	zbTest built-in @midnight

@midnight is actually up to 3 hours after midnight, not exactly midnight
z	@midnightr   r   r`   r   r,   r8   Nr1   r2   s    r    test_hash_word_midnight-CroniterWordAliasTest.test_hash_word_midnight   s)    
 	XdAq!R%DiUVFWXr#   c                 T    U R                  S[        SSSSSS5      [        SS95        g)	zTest built-in @hourlyz@hourlyr   r   r   r   r,   r/   Nr1   r2   s    r    test_hash_word_hourly+CroniterWordAliasTest.test_hash_word_hourly   s'    	8D!Q2r#BITUDVWr#   c                 T    U R                  S[        SSSSSS5      [        SS95        g)	zTest built-in @dailyz@dailyr   r   r7   r   r,   r8   Nr1   r2   s    r    test_hash_word_daily*CroniterWordAliasTest.test_hash_word_daily   s'    (4Ar2r"BISTDUVr#   c                 t    U R                  S[        SSSSSS5      [        SSSSSS5      4[        SS	95        g
)zTest built-in @weeklyz@weeklyr   r   r>   r7   r   r,   r?   r@   Nr1   r2   s    r    test_hash_word_weekly+CroniterWordAliasTest.test_hash_word_weekly   sA    
 	dAq"b"-xaBB/OPA	
r#   c                 T    U R                  S[        SSSSSS5      [        SS95        g	)
zTest built-in @monthlyz@monthlyr   r   r7   r   r,   rF   r8   Nr1   r2   s    r    test_hash_word_monthly,CroniterWordAliasTest.test_hash_word_monthly   s'    
HT1aR$DiUWFXYr#   c                 T    U R                  S[        SSSSSS5      [        SS	95        g
)zTest built-in @yearly@yearlyr   rJ   r   r7   r   r,   rK   r8   Nr1   r2   s    r    test_hash_word_yearly+CroniterWordAliasTest.test_hash_word_yearly   s'    	8D!QB#CYTWEXYr#   c                 `   [        SU R                  U R                  S9n[        SU R                  U R                  S9nU R                  UR	                  [
        5      UR	                  [
        5      5        U R                  UR	                  [
        5      UR	                  [
        5      5        g)z:Test built-in @annually

@annually is the same as @yearly
z	@annuallyr   r   N)r   r   r   r   r   r   )r   obj_annually
obj_yearlys      r    test_hash_word_annually-CroniterWordAliasTest.test_hash_word_annually   s|    
  TZZNiT\\J
..x8*:M:Mh:WX..x8*:M:Mh:WXr#   r$   N)r%   r&   r'   r(   r   r   r   r   r   r   r   r)   r$   r#   r    r   r      s+    YXW	
ZZYr#   r   c                       \ rS rSrS rSrg)CroniterHashExpanderBase   c                     [         R                  " 5       nUR                  S5        [        S5       Vs/ s H0  n[        R
                  " UR                  S5      S9R                  PM2     snU l        g s  snf )Nd   i^     )int)	randomRandomseedrangeuuidUUIDgetrandbitsbytesHASH_IDS)r   _rd_s      r    setUpCroniterHashExpanderBase.setUp   sN    mmoLQRUJWJqss';<BBJWWs   7A4)r   N)r%   r&   r'   r(   r   r)   r$   r#   r    r   r      s    Xr#   r   c                   >    \ rS rSrSrSrSrS rS rS r	S r
S	 rS
rg)%CroniterHashExpanderExpandMinutesTest   r   ;   <   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nr.   r   r   setr   r   expandaddlenTOTALmin	MIN_VALUEmax	MAX_VALUEr   rf   
expressionr   expandeds        r    test_expand_minutes9CroniterHashExpanderExpandMinutesTest.test_expand_minutes   s    % 
}}GzCHKKAq)* % 7|tzz)))7|t~~---7|t~~---r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH/2 * * * *r   r   rd   r   r   r   r   r   updater   r   r   r   r   r   rf   r   r   r   _minutess         r    #test_expand_minutes_range_2_minutesICroniterHashExpanderExpandMinutesTest.test_expand_minutes_range_2_minutes       %"
}}GzCH{1~Hx=B&&&NN8$	 %
 7|tzz)))7|t~~---7|t~~---r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH/3 * * * *r   r      r   r   s         r    #test_expand_minutes_range_3_minutesICroniterHashExpanderExpandMinutesTest.test_expand_minutes_range_3_minutes   r   r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH/15 * * * *r   r      r   r   s         r    $test_expand_minutes_range_15_minutesJCroniterHashExpanderExpandMinutesTest.test_expand_minutes_range_15_minutes   s    %#
}}GzCH{1~Hx=A%%%NN8$	 %
 7|tzz)))7|t~~---7|t~~---r#   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH(0-59) * * * *r   r   r   r   s        r    #test_expand_minutes_with_full_rangeICroniterHashExpanderExpandMinutesTest.test_expand_minutes_with_full_range       %&
}}GzCHKKAq)* % 7|tzz)))7|t~~---7|t~~---r#   r$   N)r%   r&   r'   r(   r   r   r   r   r   r   r   r   r)   r$   r#   r    r   r      s*    IIE.
.
.
..r#   r   c                   J    \ 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g)#CroniterHashExpanderExpandHoursTesti  r      rU   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nr6   r   r   r   r   )r   r0   r   r   r   s        r    test_expand_hours5CroniterHashExpanderExpandHoursTest.test_expand_hours  s     
}}GzCHIIhqk!nQ'( % 5zTZZ'''5zT^^+++5zT^^+++r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H/2 * * *r   r   r   rY   r   r   r0   r   r   r   _hourss         r    %test_expand_hours_range_every_2_hoursICroniterHashExpanderExpandHoursTest.test_expand_hours_range_every_2_hours  s    "
}}GzCHa[^Fv;"$$$LL 	 %
 5zTZZ'''5zT^^+++5zT^^+++r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H/4 * * *r   r   r      r   r   s         r    test_expand_hours_range_4_hoursCCroniterHashExpanderExpandHoursTest.test_expand_hours_range_4_hours!      "
}}GzCHa[^Fv;!###LL 	 %
 5zTZZ'''5zT^^+++5zT^^+++r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H/8 * * *r   r   r   r>   r   r   s         r    test_expand_hours_range_8_hoursCCroniterHashExpanderExpandHoursTest.test_expand_hours_range_8_hours-  r   r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S;   d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H/10 * * *r   r   r      r`   r>   r   r   s         r     test_expand_hours_range_10_hoursDCroniterHashExpanderExpandHoursTest.test_expand_hours_range_10_hours9  s    #
}}GzCHa[^Fv;&(((LL 	 %
 5zTZZ'''5zT^^+++5zT^^+++r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H/12 * * *r   r   r   r`   r   r   s         r     test_expand_hours_range_12_hoursDCroniterHashExpanderExpandHoursTest.test_expand_hours_range_12_hoursE  s    #
}}GzCHa[^Fv;!###LL 	 %
 5zTZZ'''5zT^^+++5zT^^+++r#   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nz* H(0-23) * * *r   r   r   r   r   s        r    !test_expand_hours_with_full_rangeECroniterHashExpanderExpandHoursTest.test_expand_hours_with_full_rangeQ  r   r#   r$   N)r%   r&   r'   r(   r   r   r   r   r   r   r   r   r   r   r)   r$   r#   r    r   r     s4    IIE,
,
,
,
,
,.r#   r   c                   >    \ rS rSrSrSrSrS rS rS r	S r
S rS	rg
)'CroniterHashExpanderExpandMonthDaysTesti\  r   rF   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NrE   r   r   r`   r   r   
month_daysr   r   r   s        r    test_expand_month_days>CroniterHashExpanderExpandMonthDaysTest.test_expand_month_daysa      U
 
}}GzCHNN8A;q>!,- % :$**,,,:$..000:$..000r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S;   d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nz0 0 H/2 * *r   r   r`   >         r   r   r   r   r   r   _dayss         r    #test_expand_month_days_range_2_daysKCroniterHashExpanderExpandMonthDaysTest.test_expand_month_days_range_2_daysk  s    U
"
}}GzCHQKNEu:)))e$	 %
 :$**,,,:$..000:$..000r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S;   d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H H/5 * *r   r   r`   >   r      r   r  s         r    #test_expand_month_days_range_5_daysKCroniterHashExpanderExpandMonthDaysTest.test_expand_month_days_range_5_daysw  s    U
"
}}GzCHQKNEu:'''e$	 %
 :$**,,,:$..000:$..000r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S;   d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H H/12 * *r   r   r`   r   r   r  s         r    $test_expand_month_days_range_12_daysLCroniterHashExpanderExpandMonthDaysTest.test_expand_month_days_range_12_days  s    U
#
}}GzCHQKNEu:'''e$	 %
 :$**,,,:$..000:$..000r#   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nz* * H(1-31) * *r   r   r`   r   r   s        r    &test_expand_month_days_with_full_rangeNCroniterHashExpanderExpandMonthDaysTest.test_expand_month_days_with_full_range  s    U
&
}}GzCHNN8A;q>!,- % :$**,,,:$..000:$..000r#   r$   N)r%   r&   r'   r(   r   r   r   r   r  r	  r  r  r)   r$   r#   r    r   r   \  s*    IIE1
1
1
11r#   r   c                   >    \ rS rSrSrSrSrS rS rS r	S r
S rS	rg
)#CroniterHashExpanderExpandMonthTesti  r   rY   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nz	H H * H *r   r   r>   r   r   s        r    r   :CroniterHashExpanderExpandMonthTest.test_expand_month_days  r   r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H * H/2 *r   r   r>   r   r   r   monthsr   r   r   _monthss         r    %test_expand_month_days_range_2_monthsICroniterHashExpanderExpandMonthTest.test_expand_month_days_range_2_months      "
}}GzCHqk!nGw<1$$$MM'"	 %
 6{djj(((6{dnn,,,6{dnn,,,r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S:X  d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H * H/3 *r   r   r>   r   r   r  s         r    %test_expand_month_days_range_3_monthsICroniterHashExpanderExpandMonthTest.test_expand_month_days_range_3_months  r  r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S;   d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H * H/5 *r   r   r>   r   r   r  s         r    %test_expand_month_days_range_5_monthsICroniterHashExpanderExpandMonthTest.test_expand_month_days_range_5_months  s    "
}}GzCHqk!nGw<6)))MM'"	 %
 6{djj(((6{dnn,,,6{dnn,,,r#   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nz* * * H(1-12) *r   r   r>   r   )r   r  r   r   r   s        r    "test_expand_months_with_full_rangeFCroniterHashExpanderExpandMonthTest.test_expand_months_with_full_range  s    &
}}GzCHJJx{1~a() % 6{djj(((6{dnn,,,6{dnn,,,r#   r$   N)r%   r&   r'   r(   r   r   r   r   r  r  r   r#  r)   r$   r#   r    r  r    s*    IIE1
-
-
--r#   r  c                   8    \ rS rSrSrSrSrS rS rS r	S r
S	rg
)"CroniterHashExpanderExpandWeekDaysi  r   r   r  c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nr=   r   r   r   r   )r   	week_daysr   r   r   s        r    test_expand_week_days8CroniterHashExpanderExpandWeekDays.test_expand_week_days  s    E	 
}}GzCHMM(1+a.+, % 9~+++9~///9~///r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S;   d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H * * H/2r   r   r   >   r>   r   r   r   r9   r   r   r   r  s         r    "test_expand_week_days_range_2_daysECroniterHashExpanderExpandWeekDays.test_expand_week_days_range_2_days      u"
}}GzCHQKNEu:'''KK	 %
 4yDJJ&&&4yDNN***4yDNN***r#   c                 `   [        5       nSnU R                   HA  n[        R                  " X#S9nUS   S   n[	        U5      S;   d   eUR                  U5        MC     [	        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )NzH H * * H/4r   r   r   >   r   r`   r   r,  s         r    "test_expand_week_days_range_4_daysECroniterHashExpanderExpandWeekDays.test_expand_week_days_range_4_days  r/  r#   c                 @   [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      U R                  :X  d   e[        U5      U R                  :X  d   e[        U5      U R                  :X  d   eg )Nz* * * * H(0-6)r   r   r   r   )r   r9   r   r   r   s        r    %test_expand_week_days_with_full_rangeHCroniterHashExpanderExpandWeekDays.test_expand_week_days_with_full_range  s    u%
}}GzCHHHXa[^A&' % 4yDJJ&&&4yDNN***4yDNN***r#   r$   N)r%   r&   r'   r(   r   r   r   r)  r-  r1  r4  r)   r$   r#   r    r&  r&    s%    IIE0
+
++r#   r&  c                   &    \ rS rSrS rS rS rSrg)#CroniterHashExpanderExpandYearsTesti
  c                 `   [        5       n[        R                  S   u  p#SnU R                   HE  n[        R                  " XES9n[        US   S   5      S:X  d   eUR                  US   S   5        MG     [        U5      X2-
  S-   :X  d   e[        U5      U:X  d   e[        U5      U:X  d   eg )Nr   z* * * * * * H/10r   r      r   )	r   r   RANGESr   r   r   r   r   r   )r   yearsyear_minyear_maxr   r   r   s          r    test_expand_years_by_divisionACroniterHashExpanderExpandYearsTest.test_expand_years_by_division  s    %__Q/'
}}GzCHx{1~&",,,LL!Q( % 5zX0144445zX%%%5zX%%%r#   c                    [        5       nSnU R                   H1  n[        R                  " X#S9nUR	                  US   S   S   5        M3     [        U5      S:X  d   e[        U5      S:X  d   e[        U5      S:X  d   eg )Nz* * * * * * H(2020-2030)r   r   r   r7   r   i  )r   r   r   r   r   r   r   r   r   r;  r   r   r   s        r    test_expand_years_by_range>CroniterHashExpanderExpandYearsTest.test_expand_years_by_range  s{    /
}}GzCHIIhqk!nQ'( % 5zR5zT!!!5zT!!!r#   c                     [        5       nSnU R                   H.  n[        R                  " X#S9nUR	                  US   S   5        M0     [        U5      S:X  d   e[        U5      S:X  d   e[        U5      S:X  d   eg )Nz* * * * * * H(2020-2050)/10r   r   r   rF   r   i  )r   r   r   r   r   r   r   r   rA  s        r    'test_expand_years_by_range_and_divisionKCroniterHashExpanderExpandYearsTest.test_expand_years_by_range_and_division!  sv    2
}}GzCHLL!Q( % 5zR5zT!!!5zT!!!r#   r$   N)r%   r&   r'   r(   r>  rB  rE  r)   r$   r#   r    r7  r7  
  s    
&""r#   r7  __main__)r   unittestr   r   r   r   r   r   croniter.testsr   TestCaser
   r+   r   r   r   r   r   r  r&  r7  r%   mainr$   r#   r    <module>rL     s       ( J J Gt}} G,pF' pFf+Y, +Y\Xt}} X;.,D ;.|S.*B S.l;1.F ;1|;-*B ;-|/+)A /+d"*B "D zMMO r#   