
    ]jQ                     ~   d dl Z d dlZd dlZd dlmZmZ d dlmZmZmZ d dlm	Z	  G d de	j                        Z G d de      Z G d	 d
e      Z G d de	j                        Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zedk(  r ej,                          yy)    N)datetime	timedelta)CroniterBadCronErrorCroniterNotAlphaErrorcroniter)basec                   2    e Zd Z eddddd      ZdZ	 ddZy)CroniterHashBase     r   helloNc                 .   || j                   }|| j                  }|t        }t        |t        t
        f      s|f}t        |||      }|j                  |      }| j                  ||       |%| j                  |j                  |      ||z          y y )Nhash_id)
epochr   r   
isinstancelisttupler   get_nextassertInassertEqual)	self
definitionexpectationsdeltar   r   	next_typeobjtestvals	            K/root/env/lib/python3.12/site-packages/croniter/tests/test_croniter_hash.py
_test_iterzCroniterHashBase._test_iter   s     =JJE?llG I,u6(?Lz5':,,y)g|,S\\)4goF     )NNN)__name__
__module____qualname__r   r   r   r     r!   r   r
   r
   
   s&    T1aA&EG TXGr!   r
   c                   x    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)CroniterHashTestc           
      X    | j                  dt        ddddd      t        d             y)zTest manually-defined hourly	H * * * *r   r   r   
   hoursNr    r   r   r   s    r   test_hash_hourlyz!CroniterHashTest.test_hash_hourly!   s%    XdAq!R%@)RSBTUr!   c           
      X    | j                  dt        ddddd      t        d             y)zTest manually-defined daily	H H * * *r   r      r*   daysNr-   r.   s    r   test_hash_dailyz CroniterHashTest.test_hash_daily%   s%    XdAq"b%A9RSCTUr!   c                 v    | j                  dt        ddddd      t        ddddd      ft        d             y	)
zTest manually-defined weekly	H H * * Hr   r      r2   r*      weeksNr-   r.   s    r   test_hash_weeklyz!CroniterHashTest.test_hash_weekly)   s=    
 	dAq"b)8D!QB+GHA	
r!   c           
      X    | j                  dt        ddddd      t        d             y)	zTest manually-defined monthly	H H H * *r   r   r2   r*      r3   Nr-   r.   s    r   test_hash_monthlyz"CroniterHashTest.test_hash_monthly4   s%    XdAq"b%A9RTCUVr!   c           
      X    | j                  dt        ddddd      t        d             y	)
zTest manually-defined yearlyz	H H H H *r   	   r   r2   r*   m  r3   Nr-   r.   s    r   test_hash_yearlyz!CroniterHashTest.test_hash_yearly8   s%    XdAq"b%A9RUCVWr!   c                 Z    | j                  dt        dddddd      t        d             y)	zcTest seconds

        If a sixth field is provided, seconds are included in the datetime()
        zH H * * * Hr   r   r2   r*       r3   Nr-   r.   s    r   test_hash_secondz!CroniterHashTest.test_hash_second<   s)    
 	xaBB'GXYIZ[r!   c                 Z    | j                  dt        dddddd      t        d             y)	z<Test years

        provide a seventh field as year
        zH H * * * H Hi  r   r2   r*   rF   r3   Nr-   r.   s    r   test_hash_yearzCroniterHashTest.test_hash_yearC   s)    
 	$1b"b)I9Z[K\]r!   c           
          | j                  dt        ddddd      t        d             | j                  dt        ddddd      t        d      d	
       y)zRTest a different hash_id returns different results given same definition and epochr1   r   r   r2   r*   r3   r      zdifferent idr   Nr-   r.   s    r   test_hash_id_changez$CroniterHashTest.test_hash_id_changeJ   sR    XdAq"b%A9RSCTU$1a4iQ6GQ_ 	 	
r!   c                     | j                  dt        ddddd      t        d             | j                  dt        ddddd      t        d      t        ddddd      	       y
)zRTest a different epoch returns different results given same definition and hash_idr1   r   r   r2   r*   r3   i     )r   Nr-   r.   s    r   test_hash_epoch_changez'CroniterHashTest.test_hash_epoch_changeQ   sa    XdAq"b%A9RSCTUT2r2r*14RR0	 	 	
r!   c           
          | j                  dt        ddddd      t        d             | j                  d	t        d
dddd      t        d             y)zTest a hashed range definitionzH H H(3-5) * *r   r   r9   r2   r*   r?   r3   zH H * * * 0 H(2025-2030)i  Nr-   r.   s    r   test_hash_rangez CroniterHashTest.test_hash_range[   sL    ((4Ar2*F	WYHZ[&q!R(DiUVFW	
r!   c                     | j                  dt        ddddd      t        d             | j                  dt        dd	dd
dd      t        d             y)z!Test a hashed division definitionzH H/3 * * *r   r      r*   r8   r+   zH H H H * H H/2rB   r2   rF   i  r3   Nr-   r.   s    r   test_hash_divisionz#CroniterHashTest.test_hash_divisionb   sM    xaAr'BITUDVWxaBB?PWAX	
r!   c           
      X    | j                  dt        ddddd      t        d             y)	z)Test a hashed range + division definitionzH(30-59)/10 H * * *r   r   r2      r*   minutesNr-   r.   s    r   test_hash_range_divisionz)CroniterHashTest.test_hash_range_divisioni   s&    -xaB/KY_aMbcr!   c           
          	 | j                  dt        ddddd      t        d             y	# t        $ r%}| j	                  t        |      d       Y d	}~y	d	}~ww xY w)
z:Test validation logic for range_begin and range_end valueszH(11-10) H * * *r   r   r2   r?   r*   rW   z*Range end must be greater than range beginN)r    r   r   r   r   str)r   exs     r   test_hash_invalid_rangez(CroniterHashTest.test_hash_invalid_rangem   sZ    	TOO"HT1aR$@)TVBW $ 	TSW&RSS	Ts   *- 	AAAc           
      \    | j                  dt        ddddd      t        d      d       y	)
zTest hash_id as a bytes objectr1   r   r      5   r3   s   r   Nr-   r.   s    r   test_hash_id_bytesz#CroniterHashTest.test_hash_id_bytesv   s1    T1aR(1'	 	 	
r!   c                 6    | j                  dddt               y)zTest result as a float objectr1   g   AiQ )r   N)r    floatr.   s    r   test_hash_floatz CroniterHashTest.test_hash_float   s    \LUSr!   c                     | j                  t              5  t        d| j                  | j                         ddd       y# 1 sw Y   yxY w)z7Test an invalid definition raises CroniterNotAlphaErrorz	X X * * *r   N)assertRaisesr   r   r   r   r.   s    r   test_invalid_definitionz(CroniterHashTest.test_invalid_definition   s>    45 	D[$**dllC	D 	D 	D   #AAc                     | j                  t              5  t        d| j                  ddi       ddd       y# 1 sw Y   yxY w)z-Test an invalid hash_id type raises TypeErrorr1   r   rS   r   N)rf   	TypeErrorr   r   r.   s    r   test_invalid_hash_id_typez*CroniterHashTest.test_invalid_hash_id_type   s9    y) 	>[$**q!f=	> 	> 	>s	   :Ac                     | j                  t              5  t        d| j                  | j                         ddd       y# 1 sw Y   yxY w)z8Test an invalid divisor type raises CroniterBadCronErrorz* * H/0 * *r   N)rf   r   r   r   r   r.   s    r   test_invalid_divisorz%CroniterHashTest.test_invalid_divisor   s>    34 	F]DJJE	F 	F 	Frh   N)r"   r#   r$   r/   r5   r<   r@   rD   rG   rI   rL   rO   rQ   rT   rY   r]   ra   rd   rg   rk   rm   r%   r!   r   r'   r'       sg    VV	
WX\^



dT
TD
>
Fr!   r'   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	CroniterWordAliasTestc                 Z    | j                  dt        dddddd      t        d             y)	zrTest built-in @midnight

        @midnight is actually up to 3 hours after midnight, not exactly midnight
        z	@midnightr   r   rS   r*   rF   r3   Nr-   r.   s    r   test_hash_word_midnightz-CroniterWordAliasTest.test_hash_word_midnight   s)    
 	XdAq!R%DiUVFWXr!   c                 Z    | j                  dt        dddddd      t        d             y)	zTest built-in @hourlyz@hourlyr   r   r   r*   rF   r+   Nr-   r.   s    r   test_hash_word_hourlyz+CroniterWordAliasTest.test_hash_word_hourly   s'    	8D!Q2r#BITUDVWr!   c                 Z    | j                  dt        dddddd      t        d             y)	zTest built-in @dailyz@dailyr   r   r2   r*   rF   r3   Nr-   r.   s    r   test_hash_word_dailyz*CroniterWordAliasTest.test_hash_word_daily   s'    (4Ar2r"BISTDUVr!   c                 z    | j                  dt        dddddd      t        dddddd      ft        d	             y
)zTest built-in @weeklyz@weeklyr   r   r8   r2   r*   rF   r9   r:   Nr-   r.   s    r   test_hash_word_weeklyz+CroniterWordAliasTest.test_hash_word_weekly   sA    
 	dAq"b"-xaBB/OPA	
r!   c                 Z    | j                  dt        dddddd      t        d             y	)
zTest built-in @monthlyz@monthlyr   r   r2   r*   rF   r?   r3   Nr-   r.   s    r   test_hash_word_monthlyz,CroniterWordAliasTest.test_hash_word_monthly   s'    
HT1aR$DiUWFXYr!   c                 Z    | j                  dt        dddddd      t        d	             y
)zTest built-in @yearly@yearlyr   rB   r   r2   r*   rF   rC   r3   Nr-   r.   s    r   test_hash_word_yearlyz+CroniterWordAliasTest.test_hash_word_yearly   s'    	8D!QB#CYTWEXYr!   c                 l   t        d| j                  | j                        }t        d| j                  | j                        }| j                  |j	                  t
              |j	                  t
                     | j                  |j	                  t
              |j	                  t
                     y)zJTest 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_annuallyz-CroniterWordAliasTest.test_hash_word_annually   s|    
  TZZNiT\\J
..x8*:M:Mh:WX..x8*:M:Mh:WXr!   N)
r"   r#   r$   rq   rs   ru   rw   ry   r|   r   r%   r!   r   ro   ro      s+    YXW	
ZZYr!   ro   c                       e Zd Zd Zy)CroniterHashExpanderBasec                     t        j                         }|j                  d       t        d      D cg c]1  }t	        j
                  |j                  d            j                  3 c}| _        y c c}w )Nd   i^     )int)	randomRandomseedrangeuuidUUIDgetrandbitsbytesHASH_IDS)r   _rd_s      r   setUpzCroniterHashExpanderBase.setUp   sJ    mmoLQRUJWqss';<BBWWs   6A2N)r"   r#   r$   r   r%   r!   r   r   r      s    Xr!   r   c                   6    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
y	)
%CroniterHashExpanderExpandMinutesTestr   ;   <   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nr)   r   r   setr   r   expandaddlenTOTALmin	MIN_VALUEmax	MAX_VALUEr   rX   
expressionr   expandeds        r   test_expand_minutesz9CroniterHashExpanderExpandMinutesTest.test_expand_minutes   s    % 
}} 	+Gz7CHKKAq)*	+ 7|tzz)))7|t~~---7|t~~---r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH/2 * * * *r   r   rV   r   r   r   r   r   updater   r   r   r   r   r   rX   r   r   r   _minutess         r   #test_expand_minutes_range_2_minuteszICroniterHashExpanderExpandMinutesTest.test_expand_minutes_range_2_minutes       %"
}} 	%Gz7CH{1~Hx=B&&&NN8$		%
 7|tzz)))7|t~~---7|t~~---r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH/3 * * * *r   r      r   r   s         r   #test_expand_minutes_range_3_minuteszICroniterHashExpanderExpandMinutesTest.test_expand_minutes_range_3_minutes   r   r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH/15 * * * *r   r      r   r   s         r   $test_expand_minutes_range_15_minuteszJCroniterHashExpanderExpandMinutesTest.test_expand_minutes_range_15_minutes   s    %#
}} 	%Gz7CH{1~Hx=A%%%NN8$		%
 7|tzz)))7|t~~---7|t~~---r!   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH(0-59) * * * *r   r   r   r   s        r   #test_expand_minutes_with_full_rangezICroniterHashExpanderExpandMinutesTest.test_expand_minutes_with_full_range       %&
}} 	+Gz7CHKKAq)*	+ 7|tzz)))7|t~~---7|t~~---r!   N)r"   r#   r$   r   r   r   r   r   r   r   r   r%   r!   r   r   r      s*    IIE.
.
.
..r!   r   c                   B    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
d	 Zd
 Zy)#CroniterHashExpanderExpandHoursTestr      rK   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nr1   r   r   r   r   )r   r,   r   r   r   s        r   test_expand_hoursz5CroniterHashExpanderExpandHoursTest.test_expand_hours  s     
}} 	)Gz7CHIIhqk!nQ'(	) 5zTZZ'''5zT^^+++5zT^^+++r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H/2 * * *r   r   r   rN   r   r   r,   r   r   r   _hourss         r   %test_expand_hours_range_every_2_hourszICroniterHashExpanderExpandHoursTest.test_expand_hours_range_every_2_hours  s    "
}} 	!Gz7CHa[^Fv;"$$$LL 		!
 5zTZZ'''5zT^^+++5zT^^+++r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H/4 * * *r   r   r      r   r   s         r   test_expand_hours_range_4_hourszCCroniterHashExpanderExpandHoursTest.test_expand_hours_range_4_hours!      "
}} 	!Gz7CHa[^Fv;!###LL 		!
 5zTZZ'''5zT^^+++5zT^^+++r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H/8 * * *r   r   r   r8   r   r   s         r   test_expand_hours_range_8_hourszCCroniterHashExpanderExpandHoursTest.test_expand_hours_range_8_hours-  r   r!   c                 X   t               }d}| j                  D ]A  }t        j                  ||      }|d   d   }t	        |      dv sJ |j                  |       C t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H/10 * * *r   r   r      rS   r8   r   r   s         r    test_expand_hours_range_10_hourszDCroniterHashExpanderExpandHoursTest.test_expand_hours_range_10_hours9  s    #
}} 	!Gz7CHa[^Fv;&(((LL 		!
 5zTZZ'''5zT^^+++5zT^^+++r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H/12 * * *r   r   r   rS   r   r   s         r    test_expand_hours_range_12_hourszDCroniterHashExpanderExpandHoursTest.test_expand_hours_range_12_hoursE  s    #
}} 	!Gz7CHa[^Fv;!###LL 		!
 5zTZZ'''5zT^^+++5zT^^+++r!   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nz* H(0-23) * * *r   r   r   r   r   s        r   !test_expand_hours_with_full_rangezECroniterHashExpanderExpandHoursTest.test_expand_hours_with_full_rangeQ  r   r!   N)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                   6    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
y)	'CroniterHashExpanderExpandMonthDaysTestr   r?   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nr>   r   r   rS   r   r   
month_daysr   r   r   s        r   test_expand_month_daysz>CroniterHashExpanderExpandMonthDaysTest.test_expand_month_daysa      U
 
}} 	.Gz7CHNN8A;q>!,-	. :$**,,,:$..000:$..000r!   c                 X   t               }d}| j                  D ]A  }t        j                  ||      }|d   d   }t	        |      dv sJ |j                  |       C t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nz0 0 H/2 * *r   r   rS   >         r   r   r   r   r   r   _dayss         r   #test_expand_month_days_range_2_dayszKCroniterHashExpanderExpandMonthDaysTest.test_expand_month_days_range_2_daysk  s    U
"
}} 	%Gz7CHQKNEu:)))e$		%
 :$**,,,:$..000:$..000r!   c                 X   t               }d}| j                  D ]A  }t        j                  ||      }|d   d   }t	        |      dv sJ |j                  |       C t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H H/5 * *r   r   rS   >   r      r   r   s         r   #test_expand_month_days_range_5_dayszKCroniterHashExpanderExpandMonthDaysTest.test_expand_month_days_range_5_daysw  s    U
"
}} 	%Gz7CHQKNEu:'''e$		%
 :$**,,,:$..000:$..000r!   c                 X   t               }d}| j                  D ]A  }t        j                  ||      }|d   d   }t	        |      dv sJ |j                  |       C t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H H/12 * *r   r   rS   r   r   r   s         r   $test_expand_month_days_range_12_dayszLCroniterHashExpanderExpandMonthDaysTest.test_expand_month_days_range_12_days  s    U
#
}} 	%Gz7CHQKNEu:'''e$		%
 :$**,,,:$..000:$..000r!   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nz* * H(1-31) * *r   r   rS   r   r   s        r   &test_expand_month_days_with_full_rangezNCroniterHashExpanderExpandMonthDaysTest.test_expand_month_days_with_full_range  s    U
&
}} 	.Gz7CHNN8A;q>!,-	. :$**,,,:$..000:$..000r!   N)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                   6    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
y)	#CroniterHashExpanderExpandMonthTestr   rN   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nz	H H * H *r   r   r8   r   r   s        r   r   z:CroniterHashExpanderExpandMonthTest.test_expand_month_days  r   r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H * H/2 *r   r   r8   r   r   r   monthsr   r   r   _monthss         r   %test_expand_month_days_range_2_monthszICroniterHashExpanderExpandMonthTest.test_expand_month_days_range_2_months      "
}} 	#Gz7CHqk!nGw<1$$$MM'"		#
 6{djj(((6{dnn,,,6{dnn,,,r!   c                 Z   t               }d}| j                  D ]B  }t        j                  ||      }|d   d   }t	        |      dk(  sJ |j                  |       D t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H * H/3 *r   r   r8   r   r   r   s         r   %test_expand_month_days_range_3_monthszICroniterHashExpanderExpandMonthTest.test_expand_month_days_range_3_months  r   r!   c                 X   t               }d}| j                  D ]A  }t        j                  ||      }|d   d   }t	        |      dv sJ |j                  |       C t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H * H/5 *r   r   r8   r   r   r   s         r   %test_expand_month_days_range_5_monthszICroniterHashExpanderExpandMonthTest.test_expand_month_days_range_5_months  s    "
}} 	#Gz7CHqk!nGw<6)))MM'"		#
 6{djj(((6{dnn,,,6{dnn,,,r!   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nz* * * H(1-12) *r   r   r8   r   )r   r   r   r   r   s        r   "test_expand_months_with_full_rangezFCroniterHashExpanderExpandMonthTest.test_expand_months_with_full_range  s    &
}} 	*Gz7CHJJx{1~a()	* 6{djj(((6{dnn,,,6{dnn,,,r!   N)r"   r#   r$   r   r   r   r   r   r   r   r   r%   r!   r   r   r     s*    IIE1
-
-
--r!   r   c                   0    e Zd ZdZdZdZd Zd Zd Zd Z	y)	"CroniterHashExpanderExpandWeekDaysr   r   r   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nr7   r   r   r   r   )r   	week_daysr   r   r   s        r   test_expand_week_daysz8CroniterHashExpanderExpandWeekDays.test_expand_week_days  s    E	 
}} 	-Gz7CHMM(1+a.+,	- 9~+++9~///9~///r!   c                 X   t               }d}| j                  D ]A  }t        j                  ||      }|d   d   }t	        |      dv sJ |j                  |       C t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H * * H/2r   r   r   >   r8   r   r   r   r4   r   r   r   r   s         r   "test_expand_week_days_range_2_dayszECroniterHashExpanderExpandWeekDays.test_expand_week_days_range_2_days      u"
}} 	Gz7CHQKNEu:'''KK		
 4yDJJ&&&4yDNN***4yDNN***r!   c                 X   t               }d}| j                  D ]A  }t        j                  ||      }|d   d   }t	        |      dv sJ |j                  |       C t	        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )NzH H * * H/4r   r   r   >   r   rS   r   r   s         r   "test_expand_week_days_range_4_dayszECroniterHashExpanderExpandWeekDays.test_expand_week_days_range_4_days  r   r!   c                 <   t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      | j                  k(  sJ t        |      | j                  k(  sJ t        |      | j                  k(  sJ y )Nz* * * * H(0-6)r   r   r   r   )r   r4   r   r   r   s        r   %test_expand_week_days_with_full_rangezHCroniterHashExpanderExpandWeekDays.test_expand_week_days_with_full_range  s    u%
}} 	(Gz7CHHHXa[^A&'	( 4yDJJ&&&4yDNN***4yDNN***r!   N)
r"   r#   r$   r   r   r   r   r   r   r   r%   r!   r   r   r     s%    IIE0
+
++r!   r   c                       e Zd Zd Zd Zd Zy)#CroniterHashExpanderExpandYearsTestc                 ^   t               }t        j                  d   \  }}d}| j                  D ]F  }t        j                  ||      }t        |d   d         dk(  sJ |j                  |d   d          H t        |      ||z
  dz   k(  sJ t        |      |k(  sJ t        |      |k(  sJ y )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_divisionzACroniterHashExpanderExpandYearsTest.test_expand_years_by_division  s    %__Q/('
}} 	)Gz7CHx{1~&",,,LL!Q(	) 5zX0144445zX%%%5zX%%%r!   c                     t               }d}| j                  D ]3  }t        j                  ||      }|j	                  |d   d   d          5 t        |      dk(  sJ t        |      dk(  sJ t        |      dk(  sJ y )Nz* * * * * * H(2020-2030)r   r   r   r2   r   i  )r   r   r   r   r   r   r   r   r   r  r   r   r   s        r   test_expand_years_by_rangez>CroniterHashExpanderExpandYearsTest.test_expand_years_by_range  s    /
}} 	)Gz7CHIIhqk!nQ'(	) 5zR5zT!!!5zT!!!r!   c                     t               }d}| j                  D ]0  }t        j                  ||      }|j	                  |d   d          2 t        |      dk(  sJ t        |      dk(  sJ t        |      dk(  sJ y )Nz* * * * * * H(2020-2050)/10r   r   r   r?   r   i  )r   r   r   r   r   r   r   r   r  s        r   'test_expand_years_by_range_and_divisionzKCroniterHashExpanderExpandYearsTest.test_expand_years_by_range_and_division!  s}    2
}} 	)Gz7CHLL!Q(	) 5zR5zT!!!5zT!!!r!   N)r"   r#   r$   r  r  r	  r%   r!   r   r   r   
  s    
&""r!   r   __main__)r   unittestr   r   r   r   r   r   croniter.testsr   TestCaser
   r'   ro   r   r   r   r   r   r   r   r"   mainr%   r!   r   <module>r     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HMMO r!   