B
    u9a‰›  ã               @   sô  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZyd dlZW n ek
rˆ   dZY nX e d¡p–dZdde d > d Ze d d ZdZd	ZdZd
Zd
ZG dd„ dejƒZejejfejejfejejfejejffZG dd„ dejƒZ G dd„ dejƒZ!G dd„ dƒZ"G dd„ dƒZ#G dd„ dƒZ$G dd„ de"e$ejƒZ%G dd„ de#e$ejƒZ&G dd„ dejƒZ'e (edkd¡G dd„ dƒƒZ)G d d!„ d!e)ejƒZ*G d"d#„ d#e)ejƒZ+e,d$krðe -¡  dS )%é    )ÚsupportNÚ
SIZEOF_INTé   é   é   il  i@B iè  i Êš;c               @   s   e Zd ZdZdZdZdZdS )Ú_PyTimer   r   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚROUND_FLOORÚROUND_CEILINGÚROUND_HALF_EVENÚROUND_UP© r   r   ú/usr/lib/python3.7/test_time.pyr      s   r   c               @   sî  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Ze 	e
edƒd¡dd„ ƒZe 	e
edƒd¡e 	e
edƒd¡dd„ ƒƒZe 	e
edƒd¡e 	e
edƒd¡dd„ ƒƒZe 	e
edƒd¡dd„ ƒZe 	e
edƒd¡dd„ ƒZdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Ze 	e
ed9ƒd:¡d;d<„ ƒZd=d>„ Zd?d@„ Z dAdB„ Z!dCdD„ Z"dEdF„ Z#e 	e$ %¡ dG dHkdI¡dJdK„ ƒZ&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdS„ Z*e 	e
edƒdT¡dUdV„ ƒZ+dWdX„ Z,dYdZ„ Z-d[S )\ÚTimeTestCasec             C   s   t   ¡ | _d S )N)ÚtimeÚt)Úselfr   r   r   ÚsetUp4   s    zTimeTestCase.setUpc             C   s   t j t j t j t j d S )N)r   ÚaltzoneÚdaylightÚtimezoneÚtzname)r   r   r   r   Útest_data_attributes7   s    z!TimeTestCase.test_data_attributesc             C   s.   t   ¡  t  d¡}|  |j¡ |  |j¡ d S )Nr   )r   Úget_clock_infoÚassertFalseÚ	monotonicÚ
assertTrueÚ
adjustable)r   Úinfor   r   r   Ú	test_time=   s    
zTimeTestCase.test_timec                s˜   ‡ fdd„}|t   ¡ t  ¡ ƒ |t  ¡ t  ¡ ƒ |t  ¡ t  ¡ ƒ |t  ¡ t  ¡ ƒ tt dƒrp|t  	¡ t  
¡ ƒ tt dƒr”|t  t j¡t  t j¡ƒ d S )Nc                s2   ˆ   |t¡ t| d ƒ}ˆ  || d| |f¡ d S )Ng    eÍÍAl   @¥F )ÚassertIsInstanceÚintÚ
assertLess)ZsecÚnsZsec_ns)r   r   r   Úcheck_nsD   s    z0TimeTestCase.test_time_ns_type.<locals>.check_nsÚthread_timeÚclock_gettime)r   Ztime_nsr   Zmonotonic_nsÚperf_counterZperf_counter_nsÚprocess_timeZprocess_time_nsÚhasattrr)   Zthread_time_nsr*   ÚCLOCK_REALTIMEZclock_gettime_ns)r   r(   r   )r   r   Útest_time_ns_typeC   s    






zTimeTestCase.test_time_ns_typec          	   C   sZ   |   t¡ t ¡  W d Q R X |   t¡ t d¡}W d Q R X |  |j¡ |  |j¡ d S )NÚclock)	ÚassertWarnsÚDeprecationWarningr   r0   r   r    r   r   r!   )r   r"   r   r   r   Ú
test_clock\   s    zTimeTestCase.test_clockr*   zneed time.clock_gettime()c             C   s   t  t j¡}|  |t¡ d S )N)r   r*   r.   r$   Úfloat)r   r   r   r   r   Útest_clock_realtimee   s    z TimeTestCase.test_clock_realtimeÚCLOCK_MONOTONICzneed time.CLOCK_MONOTONICc             C   s(   t  t j¡}t  t j¡}|  ||¡ d S )N)r   r*   r6   ÚassertLessEqual)r   ÚaÚbr   r   r   Útest_clock_monotonick   s    z!TimeTestCase.test_clock_monotonicÚpthread_getcpuclockidz!need time.pthread_getcpuclockid()c             C   sR   t  t ¡ ¡}|  t|ƒtk¡ |  |t j¡ t  	|¡}t  	|¡}|  
||¡ d S )N)r   r;   Ú	threadingÚ	get_identr    Útyper%   ÚassertNotEqualZCLOCK_THREAD_CPUTIME_IDr*   r7   )r   Zclk_idÚt1Út2r   r   r   Útest_pthread_getcpuclockidt   s    

z'TimeTestCase.test_pthread_getcpuclockidÚclock_getreszneed time.clock_getres()c             C   s(   t  t j¡}|  |d¡ |  |d¡ d S )Ng        g      ð?)r   rC   r.   ÚassertGreaterr7   )r   Zresr   r   r   Útest_clock_getres€   s    zTimeTestCase.test_clock_getresÚclock_settimezneed time.clock_settime()c             C   sV   t  t j¡}yt  t j|¡ W n tk
r2   Y nX tt dƒrR|  tt jt jd¡ d S )Nr6   r   )	r   r*   r.   rF   ÚPermissionErrorr-   ÚassertRaisesÚOSErrorr6   )r   r   r   r   r   Útest_clock_settime‡   s    
zTimeTestCase.test_clock_settimec             C   sJ   |   t | j¡t t | j¡¡¡ |   tt t | j¡¡ƒt| jƒ¡ d S )N)ÚassertEqualr   Úctimer   ÚasctimeÚ	localtimer%   Úmktime)r   r   r   r   Útest_conversions”   s    zTimeTestCase.test_conversionsc             C   s.   |   ttjd¡ |   ttjd¡ t d¡ d S )Néþÿÿÿéÿÿÿÿg333333ó?)rH   Ú
ValueErrorr   Úsleep)r   r   r   r   Ú
test_sleepš   s    zTimeTestCase.test_sleepc          	   C   s~   t  | j¡}xHdD ]@}d| }yt  ||¡ W q tk
rP   |  d| ¡ Y qX qW |  tt jd|¡ |  tt jd|¡ d S )N)r8   ÚAr9   ÚBÚcÚdÚHÚIÚjÚmÚMÚpÚSÚUÚwÚWÚxÚXÚyÚYÚZú%z %z conversion specifier: %r failed.s   %Sz%S )r   Úgmtimer   ÚstrftimerS   ÚfailrH   Ú	TypeError)r   ÚttÚ	directiveÚformatr   r   r   Útest_strftimeŸ   s    
zTimeTestCase.test_strftimec             C   s  |dƒ |dƒ |   t|d¡ |   t|d¡ |dƒ |dƒ |   t|d¡ |   t|d¡ |d	ƒ |   t|d
¡ |   t|d¡ |dƒ |   t|d¡ |   t|d¡ |   t|d¡ |dƒ |dƒ |   t|d¡ |  |dƒ|dƒ¡ |   t|d¡ |dƒ |dƒ |   t|d¡ |   t|d¡ d S )N)	il  r   r   r   r   r   r   r   rR   )	il  é   r   r   r   r   r   r   rR   )	il  rR   r   r   r   r   r   r   rR   )	il  é   r   r   r   r   r   r   rR   )	il  r   r   r   r   r   r   r   rR   )	il  r   é   r   r   r   r   r   rR   )	il  r   rR   r   r   r   r   r   rR   )	il  r   é    r   r   r   r   r   rR   )	il  r   r   é   r   r   r   r   rR   )	il  r   r   rR   r   r   r   r   rR   )	il  r   r   é   r   r   r   r   rR   )	il  r   r   r   é;   r   r   r   rR   )	il  r   r   r   rR   r   r   r   rR   )	il  r   r   r   é<   r   r   r   rR   )	il  r   r   r   r   rR   r   r   rR   )	il  r   r   r   r   ry   r   r   rR   )	il  r   r   r   r   é=   r   r   rR   )	il  r   r   r   r   é>   r   r   rR   )	il  r   r   r   r   r   rR   r   rR   )	il  r   r   r   r   r   é   r   rR   )	il  r   r   r   r   r   rQ   r   rR   )	il  r   r   r   r   r   r   r   rR   )	il  r   r   r   r   r   r   in  rR   )	il  r   r   r   r   r   r   rR   rR   )	il  r   r   r   r   r   r   io  rR   )rH   rS   rK   )r   Úfuncr   r   r   Ú_bounds_checking®   sL    

zTimeTestCase._bounds_checkingc             C   s   |   dd„ ¡ d S )Nc             S   s   t  d| ¡S )NÚ )r   rk   )Útupr   r   r   Ú<lambda>è   ó    z;TimeTestCase.test_strftime_bounding_check.<locals>.<lambda>)r~   )r   r   r   r   Útest_strftime_bounding_checkç   s    z)TimeTestCase.test_strftime_bounding_checkc             C   s`   xZdD ]R}xLt ddƒD ]>}x8dD ]0}yt || | ¡ W q  tk
rN   Y q X q W qW qW d S )N)r   rV   z%Az%AAr   é   )ri   zA%zAA%z%A%zA%A%z%#)Úranger   rk   rS   )r   rd   rf   Úzr   r   r   Útest_strftime_format_checkê   s    

z'TimeTestCase.test_strftime_format_checkc          	   C   s4   d}t  ¡  t dd¡}W d Q R X |  ||¡ d S )Nz2000 01 01 00 00 00 1 001z%Y %m %d %H %M %S %w %j)	iÐ  r   r   r   r   r   r   r   r   )r   Zcheck_warningsr   rk   rK   )r   ÚexpectedÚresultr   r   r   Útest_default_values_for_zero÷   s    
z)TimeTestCase.test_default_values_for_zeroc          	   C   sj   t  | j¡}xXdD ]P}d| }t  ||¡}yt  ||¡ W q tk
r`   |  d||f ¡ Y qX qW d S )N)r8   rV   r9   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   ri   z/conversion specifier %r failed with '%s' input.)r   rj   r   rk   ÚstrptimerS   rl   )r   rn   ro   rp   Zstrf_outputr   r   r   Útest_strptime  s    
zTimeTestCase.test_strptimec             C   s(   |   ttjdd¡ |   ttjdd¡ d S )Ns   2009z%YZ2009s   %Y)rH   rm   r   r‹   )r   r   r   r   Útest_strptime_bytes  s    z TimeTestCase.test_strptime_bytesc          	   C   sh   |   t¡}t dd¡ W d Q R X |  |jjd¡ |   t¡}t dd¡ W d Q R X |  |jjd¡ d S )Nr   z%DTZ19z%Y %)rH   rS   r   r‹   ÚassertIsZ	exceptionÚ__suppress_context__)r   Úer   r   r   Útest_strptime_exception_context  s    z,TimeTestCase.test_strptime_exception_contextc             C   sÂ   t  t  | j¡¡ xFttfD ]:}t  |ddfd ¡}|  |tt|ƒƒ d … t|ƒ¡ qW |  	t
t jtd fd ¡ |  	t
t jtd fd ¡ |  	tt jd¡ |  	tt jd¡ |  	tt jd¡ d S )Nr|   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   rM   rj   r   ÚTIME_MAXYEARÚTIME_MINYEARrK   ÚlenÚstrrH   ÚOverflowErrorrm   )r   ZbigyearZascr   r   r   Útest_asctime  s    &

zTimeTestCase.test_asctimec             C   s   |   tj¡ d S )N)r~   r   rM   )r   r   r   r   Útest_asctime_bounding_check.  s    z(TimeTestCase.test_asctime_bounding_checkc          
   C   sš   t  d¡}|  t  |¡d¡ t  d¡}|  t  |¡d¡ x\dD ]T}yt  |ddfd ¡}W n ttfk
rr   Y q>X |  t  |¡d	d … t|ƒ¡ q>W d S )
N)	iµ  é	   r„   r   r	   é4   r   r   rR   zSun Sep 16 01:03:52 1973)	iÐ  r   r   r   r   r   r   r   rR   zSat Jan  1 00:00:00 2000)iœÿÿÿéd   iè  iÐ  i  i'  r   é
   )r   r   r   r   r   r   é   )r   rO   rK   rL   rS   r–   r•   )r   r   ZyearZtestvalr   r   r   Ú
test_ctime1  s    


zTimeTestCase.test_ctimeÚtzsetz"time module has no attribute tzsetc          	   C   s  ddl m} d}d}d}d}| dd ¡}z¶||d< t ¡  ||d< t ¡  |  t |¡t |¡¡ |  tjd¡ |  tj	d¡ |  t |¡j
d¡ ||d< t ¡  |  t |¡t |¡¡ |  tjd¡ |  ttjƒd	¡ |  tjd
¡ |  tj	d¡ |  tjd¡ |  t |¡j
d¡ |  ttjƒd	¡ ||d< t ¡  |  t |¡t |¡¡ |  tjd dtjd ¡ |  tjd
 dkttjd
 ƒ¡ |  ttjƒd	¡ |  tjd
¡ |  tj	d¡ |  tjd¡ |  t |¡j
d
¡ W d |d k	rö||d< nd|kr|d= t ¡  X d S )Nr   )Úenvirong   €zÏAzEST+05EDT,M4.1.0,M10.5.0zAEST-10AEDT-11,M10.5.0,M3.5.0zUTC+0ZTZ)ZESTÚEDTr   r   iPF  i@8  ZAESTEST)ZAEDTr¡   i`sÿÿiPeÿÿ)Úosr    Úgetr   rŸ   rK   rj   rN   r   r   Útm_isdstr?   r   r”   r   ZassertInr    r•   )r   r    Zxmas2002ZeasternZvictoriaZutcZorg_TZr   r   r   Ú
test_tzset@  sR     


zTimeTestCase.test_tzsetc             C   s:   x4t jt jt jfD ] }xdD ]}|  t||¡ qW qW d S )N)gZb××çtégZb××çti)r   rL   rj   rN   rH   r–   )r   r}   Zunreasonabler   r   r   Útest_insane_timestamps‹  s    
z#TimeTestCase.test_insane_timestampsc             C   s   t  ¡  t  d ¡ d S )N)r   rL   )r   r   r   r   Útest_ctime_without_arg”  s    z#TimeTestCase.test_ctime_without_argc             C   s:   t  ¡ }t  d ¡}t  |¡}t  |¡}| j||dd d S )Ngš™™™™™É?)Údelta)r   rj   rO   ÚassertAlmostEqual)r   Zgt0Zgt1Út0r@   r   r   r   Útest_gmtime_without_arg›  s
    


z$TimeTestCase.test_gmtime_without_argc             C   s:   t  ¡ }t  d ¡}t  |¡}t  |¡}| j||dd d S )Ngš™™™™™É?)r¨   )r   rN   rO   r©   )r   Zlt0Zlt1rª   r@   r   r   r   Útest_localtime_without_arg¢  s
    


z'TimeTestCase.test_localtime_without_argc          
   C   sb   x\dD ]T}t j d¡r |dkr qyt |¡}W n ttfk
rF   Y qX |  t |¡|¡ qW d S )N)rQ   rR   r   r   ZaixrR   )	ÚsysÚplatformÚ
startswithr   rN   r–   rI   rK   rO   )r   r   rn   r   r   r   Útest_mktime©  s    
zTimeTestCase.test_mktimer   Zglibcz0disabled because of a bug in glibc. Issue #13309c             C   s`   t  | j¡}t  d|¡}|  |d¡ yt  d¡ W n tk
rF   Y nX |  t  d|¡|¡ d S )Nz%ZZLMT)	rR   r   r   r   r   r   rR   rR   rR   )r   rj   r   rk   r?   rO   r–   rK   )r   rn   r   r   r   r   Útest_mktime_error¼  s    zTimeTestCase.test_mktime_errorc             C   s¨   dd„ t dƒD ƒ}|d }x*|dd … D ]}|  ||d| ¡ |}q(W t ¡ }t d¡ t ¡ }|| }|  ||¡ |  d|k¡ t d	¡}|  |j¡ |  |j	¡ d S )
Nc             S   s   g | ]}t  ¡ ‘qS r   )r   r   )Ú.0Únr   r   r   ú
<listcomp>Í  s    z/TimeTestCase.test_monotonic.<locals>.<listcomp>r›   r   r   ztimes=%sg      à?gÍÌÌÌÌÌÜ?r   )
r…   ÚassertGreaterEqualr   r   rT   rD   r    r   r   r!   )r   Útimesr@   rA   Zdtr"   r   r   r   Útest_monotonicË  s    

zTimeTestCase.test_monotonicc             C   s   t  ¡  d S )N)r   r+   )r   r   r   r   Útest_perf_counterâ  s    zTimeTestCase.test_perf_counterc             C   sP   t  ¡ }t  d¡ t  ¡ }|  || d¡ t  d¡}|  |j¡ |  |j¡ d S )Ngš™™™™™¹?g{®Gáz”?r,   )	r   r,   rT   r&   r   r    r   r   r!   )r   ÚstartÚstopr"   r   r   r   Útest_process_timeå  s    

zTimeTestCase.test_process_timec             C   s„   t tdƒs4tj d¡r*|  dtjf ¡ n
|  d¡ t ¡ }t d¡ t ¡ }|  	|| d¡ t 
d¡}|  |j¡ |  |j¡ d S )Nr)   )ZlinuxÚwinz,time.thread_time() should be available on %rzneed time.thread_timegš™™™™™¹?g{®Gáz”?)r-   r   r­   r®   r¯   rl   ÚskipTestr)   rT   r&   r   r    r   r   r!   )r   r¹   rº   r"   r   r   r   Útest_thread_timeò  s    



zTimeTestCase.test_thread_timezneed time.clock_settimec          
   C   s~   t  ¡ }t  t j¡}yt  t j|d ¡ W n, tk
rV } z|  |¡ W d d }~X Y nX t  ¡ }t  t j|¡ |  ||¡ d S )Ni  )r   r   r*   r.   rF   rG   r½   rµ   )r   r@   ZrealtimeÚerrrA   r   r   r   Útest_monotonic_settime  s    z#TimeTestCase.test_monotonic_settimec          	   C   s¶   d }xRdD ]J}yt  |¡ W q
 tk
r:   |  d¡ Y q
 tk
rR   |}P Y q
X q
W |d krj|  d¡ |  tt j|¡ |  tt j|¡ |  tt jtdƒ¡ |  tt jtdƒ¡ d S )N)rR   i   @l        l            zneed 64-bit time_tz&unable to find an invalid time_t valueÚnan)	r   rN   r–   r½   rI   rH   rL   rS   r4   )r   Zinvalid_time_tZtime_tr   r   r   Útest_localtime_failure  s    

z#TimeTestCase.test_localtime_failurec          
   C   sÆ   dddddg}x¢|D ]š}|dkrB|   t¡ t d¡}W d Q R X n
t |¡}|  |jt¡ |  |jd¡ |  |jt	¡ |  |j
t¡ |  |j
d¡ |  |j
d¡ |  |jt	¡ qW |  ttjd	¡ d S )
Nr0   r   r+   r,   r   r   g        g      ð?Zxxx)r1   r2   r   r   r$   Úimplementationr•   r?   r   ÚboolZ
resolutionr4   rD   r7   r!   rH   rS   )r   ZclocksÚnamer"   r   r   r   Útest_get_clock_info*  s    

z TimeTestCase.test_get_clock_infoN).r
   r   r   r   r   r#   r/   r3   ÚunittestÚ
skipUnlessr-   r   r5   r:   rB   rE   rJ   rP   rU   rq   r~   rƒ   r‡   rŠ   rŒ   r   r‘   r—   r˜   rž   r¥   r¦   r§   r«   r¬   r°   r®   Zlibc_verr±   r·   r¸   r»   r¾   rÀ   rÂ   rÆ   r   r   r   r   r   2   sb   		9

J	r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
TestLocalec             C   s   t  t j¡| _d S )N)ÚlocaleÚ	setlocaleÚLC_ALLÚoldloc)r   r   r   r   r   B  s    zTestLocale.setUpc             C   s   t  t j| j¡ d S )N)rÊ   rË   rÌ   rÍ   )r   r   r   r   ÚtearDownE  s    zTestLocale.tearDownc             C   sD   yt  t jd¡}W n  t jk
r2   |  d¡ Y nX t dd¡ d S )NÚfr_FRz$could not set locale.LC_ALL to fr_FRz%B)	iÙ  r   r   r   r   r   r   r   r   )rÊ   rË   rÌ   ÚErrorr½   r   rk   )r   Ztmpr   r   r   Útest_bug_3061H  s
    zTestLocale.test_bug_3061N)r
   r   r   r   rÎ   rÑ   r   r   r   r   rÉ   A  s   rÉ   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_TestAsctimeYearz%dc             C   s   t  |fd ¡ ¡ d S )N)r   r   r   r   r   r   r   r   rR   )r   rM   Úsplit)r   rf   r   r   r   ÚyearstrT  s    z_TestAsctimeYear.yearstrc             C   s(   |   |  d¡d¡ |   |  d¡d¡ d S )Ni90  Ú12345iÍ[Ú	123456789)rK   rÔ   )r   r   r   r   Útest_large_yearW  s    z _TestAsctimeYear.test_large_yearN)r
   r   r   Ú_formatrÔ   r×   r   r   r   r   rÒ   Q  s   rÒ   c                   sl   e Zd Ze dd¡dkrdZndZdd„ Zdd	„ Zd
d„ Zedƒ‡ fdd„ƒZ	edƒ‡ fdd„ƒZ
[‡  ZS )Ú_TestStrftimeYearz%Y)	r   r   r   r   r   r   r   r   r   Z0001z%04dz%dc             C   s   t  d|fd ¡S )Nz%Y)r   r   r   r   r   r   r   r   )r   rk   )r   rf   r   r   r   rÔ   h  s    z_TestStrftimeYear.yearstrc             C   s0   | j dkr|  d¡ ndd„ }| jd|d d S )Nz%04dc             S   s   t  d| fd ¡S )Nz%4Y)r   r   r   r   r   r   r   r   )r   rk   )rf   r   r   r   Úyear4dp  s    z-_TestStrftimeYear.test_4dyear.<locals>.year4d)r}   )rØ   Ú	test_year)r   rÚ   r   r   r   Útest_4dyeark  s    
z_TestStrftimeYear.test_4dyearc             C   sD   d}yt  d| fd ¡ W n tk
r2   d}Y nX d}t ||¡S )Nz5strftime() is limited to [1; 9999] with Visual Studioz%Y)r   r   r   r   r   r   r   r   FT)r   rk   rS   rÇ   rÈ   )rf   ÚmsgZcondr   r   r   Úskip_if_not_supportedt  s    
z'_TestStrftimeYear.skip_if_not_supportedi'  c                s
   t ƒ  ¡ S )N)Úsuperr×   )r   )Ú	__class__r   r   r×     s    z!_TestStrftimeYear.test_large_yearr   c                s
   t ƒ  ¡ S )N)rß   Útest_negative)r   )rà   r   r   rá   ƒ  s    z_TestStrftimeYear.test_negative)r
   r   r   r   rk   rØ   rÔ   rÜ   rÞ   r×   rá   Ú__classcell__r   r   )rà   r   rÙ   \  s   	rÙ   c               @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
Ú_Test4dYearz%dNc             C   s   |p| j }|p| j}|  |dƒ|d ¡ |  |dƒ|d ¡ |  |dƒ|d ¡ |  |dƒ|d ¡ |  |dƒ|d ¡ |  |dƒ|d ¡ d S )Nr   éD   éE   éc   iç  i'  )rØ   rÔ   rK   )r   Zfmtr}   r   r   r   rÛ     s    

z_Test4dYear.test_yearc             C   sd   |   |  d¡ d¡d¡ |   |  d¡ d¡d¡ |   |  t¡ d¡ttƒ¡ |  t| jtd ¡ d S )Ni90  ú+rÕ   iÍ[rÖ   r   )rK   rÔ   Úlstripr’   r•   rH   r–   )r   r   r   r   r×   —  s    z_Test4dYear.test_large_yearc          	   C   s¼   |   |  d¡| jd ¡ |   |  d¡d¡ |   |  d¡d¡ |   |  d¡tdƒ¡ |   |  d¡tdƒ¡ |   |  t¡ttƒ¡ |  t| jtd ¡ |  t¡ |  t d ¡ W d Q R X d S )	NrR   i.ûÿÿz-1234iÀþÿz-123456ië2¤øi.ýi¶r   )rK   rÔ   rØ   r•   r“   rH   r–   r’   )r   r   r   r   rá     s    z_Test4dYear.test_negative)NN)r
   r   r   rØ   rÛ   r×   rá   r   r   r   r   rã   Š  s   

rã   c               @   s   e Zd ZdS )ÚTestAsctime4dyearN)r
   r   r   r   r   r   r   ré   ª  s   ré   c               @   s   e Zd ZdS )ÚTestStrftime4dyearN)r
   r   r   r   r   r   r   rê   ­  s   rê   c               @   sZ   e Zd Ze ejdkd¡dd„ ƒZe ejdkd¡dd„ ƒZe ejdkd¡dd„ ƒZ	d	S )
Ú
TestPytimeé   zneeds tm_zone supportc             C   s0  t  ¡ }|  t|dƒ¡ |  t|dƒ¡ |jd krF|  tt dƒ ¡ n|  |jt jt jg|j  ¡ |j	d kr‚|  tt dƒ ¡ n|  |j	t j
|j ¡ t  |¡}t  |d d… ¡}|  ||¡ t  |¡}t  |¡}|  ||¡ |  |j|j¡ |  |j	|j	¡ |  ||¡ |  |j|j¡ |  |j	|j	¡ d S )NÚ	tm_gmtoffÚtm_zoner   r   r™   )r   rN   r    r-   rí   rK   r   r   r¤   rî   r   rO   )r   Últr   Zt9Znew_ltZnew_lt9r   r   r   Útest_localtime_timezone²  s(    


 
 
z"TestPytime.test_localtime_timezonec             C   s8   t  dd¡}|  |jd¡ t  dd¡}|  |jd¡ d S )NZUTCz%Zz+0500z%ziPF  )r   r‹   rK   rî   rí   )r   r   r   r   r   Útest_strptime_timezoneÕ  s    z!TestPytime.test_strptime_timezonec             C   s6   dd l }d}| |¡}|  |jd ¡ |  |jd ¡ d S )Nr   sL   ctime
struct_time
p0
((I2007
I8
I11
I1
I24
I49
I5
I223
I1
tp1
(dp2
tp3
Rp4
.)ÚpickleÚloadsrŽ   rí   rî   )r   rò   Ústrï   r   r   r   Útest_short_timesÜ  s
    
zTestPytime.test_short_timesN)
r
   r   r   rÇ   rÈ   r   Z_STRUCT_TM_ITEMSrð   rñ   rõ   r   r   r   r   rë   ±  s   #rë   zneed the _testcapi modulec               @   sR   e Zd ZdZdZdd„ Zdd„ Zdd„ Zdd	d
„Zddd„Z	ddd„Z
dd„ ZdS )ÚCPyTimeTestCasez1
    Base class to test the C _PyTime_t API.
    Nc             C   s6   ddl m} |d d }d|  | _d| d | _d S )Nr   )ÚSIZEOF_TIME_Tr   r   r   )Ú	_testcapir÷   Ú
time_t_minÚ
time_t_max)r   r÷   Úbitsr   r   r   r   ï  s    zCPyTimeTestCase.setUpc             C   s   | j |  ko| jkS   S )N)rù   rú   )r   Úsecondsr   r   r   Útime_t_filterõ  s    zCPyTimeTestCase.time_t_filterc       
   
   C   s  dt ttg}|r| d¡ d}dg}x2|D ]*}x$|D ]}|| }| | |f¡ q4W q*W xDdD ]<}d| t }| | d | | d |d ||d f¡ q^W x"tjtjfD ]}	| |	t ¡ q¬W |rîx&dD ]}d|  }| | |f¡ qÌW d	t t }| | |f¡ |S )
z'Build timestamps used to test rounding.r   gü©ñÒMbP?)r   r   é   é   é{   iÈ  iÒ  r™   ræ   iç  i'  iŸ† i?B ió  iô  iõ  iÛ  iÜ  iÝ  iÄ	  i¬  i”  r   )	r   rþ   rœ   é   é   rv   rw   é   é!   r   )r	   rÿ   rœ   r  g       @l            )ÚUS_TO_NSÚMS_TO_NSÚ	SEC_TO_NSÚappendÚextendrø   ÚINT_MINÚINT_MAX)
r   Ú	use_floatZunitsÚvaluesÚns_timestampsZunitÚvaluer'   Zpow2rü   r   r   r   Ú_rounding_valuesø  s.    





z CPyTimeTestCase._rounding_valuesc                s*  ‡ ‡‡fdd„}|   ˆ¡}||ƒ}x˜tD ]\}	}
t ¡ z}|
|_xl|D ]d}||
dœ}y|||	ƒ}||ƒ}W n0 tk
rš } z|  d| ¡ W d d }~X Y nX |  |||¡ qFW W d Q R X q(W | jt	 }| |f}||ƒ}xLtD ]D\}	}x:|D ]2}||	dœ}| j
t|d |||	ƒ W d Q R X qìW qÞW d S )Nc                sX   ˆr$t tˆƒ ‰ ‡ fdd„| D ƒ}nt ˆ ‰ ‡ fdd„| D ƒ}ˆrLtˆ|ƒ}tt|ƒƒS )Nc                s   g | ]}|ˆ  ‘qS r   r   )r²   r'   )Ú
unit_to_nsr   r   r´   1  s    zKCPyTimeTestCase._check_rounding.<locals>.convert_values.<locals>.<listcomp>c                s   g | ]}|ˆ  ‘qS r   r   )r²   r'   )r  r   r   r´   4  s    )r  r4   ÚfilterÚsortedÚset)r  r  )Úunit_to_secr  Úvalue_filter)r  r   Úconvert_values.  s    
z7CPyTimeTestCase._check_rounding.<locals>.convert_values)r  Úroundingz!Error on timestamp conversion: %s)rÝ   )r  ÚROUNDING_MODESÚdecimalZlocalcontextr  Ú	Exceptionrl   rK   ÚOVERFLOW_SECONDSr  rH   r–   )r   Úpytime_converterÚexpected_funcr  r  r  r  r  Zvalid_valuesÚtime_rndZdecimal_rndÚcontextr  Z
debug_infor‰   rˆ   Úexcr'   Zoverflow_valuesÚ_r   )r  r  r  r   Ú_check_rounding+  s0    




 



zCPyTimeTestCase._check_roundingr   c             C   s   |   ||d||¡ d S )NF)r#  )r   r  r  r  r  r   r   r   Úcheck_int_roundingX  s    z"CPyTimeTestCase.check_int_roundingc             C   s   |   ||d||¡ d S )NT)r#  )r   r  r  r  r  r   r   r   Úcheck_float_rounding]  s    z$CPyTimeTestCase.check_float_roundingc             C   s   t  |¡}| d¡}t|ƒS )Nr   )r  ÚDecimalZquantizer%   )r   rd   rY   r   r   r   Údecimal_roundb  s    

zCPyTimeTestCase.decimal_round)N)r   N)r   N)r
   r   r   Ú__doc__r  r   rý   r  r#  r$  r%  r'  r   r   r   r   rö   è  s   4
-

rö   c               @   sp   e Zd ZdZe de ¡Zdd„ Zdd„ Z	dd„ Z
d	d
„ Zdd„ Ze eedƒd¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestCPyTimez#
    Test the C _PyTime_t API.
    l           c          
      sh   ddl m‰  dd„ }| j‡ fdd„dd„ |d x2tD ]*\}}|  t¡ ˆ td	ƒƒ W d Q R X q6W d S )
Nr   )ÚPyTime_FromSecondsc             S   s   t j|   kot jkS   S )N)rø   r
  r  )Úsecsr   r   r   Úc_int_filters  s    z2TestCPyTime.test_FromSeconds.<locals>.c_int_filterc                s   ˆ | ƒS )Nr   )r+  Úrnd)r*  r   r   r   v  r‚   z.TestCPyTime.test_FromSeconds.<locals>.<lambda>c             S   s   | t  S )N)r  )r+  r   r   r   r   w  r‚   )r  rÁ   )rø   r*  r$  r  rH   rm   r4   )r   r,  r  r"  r   )r*  r   Útest_FromSecondso  s    zTestCPyTime.test_FromSecondsc          
      sj   ddl m} ˆ  |dd„ ¡ ˆ  |‡ fdd„¡ x4tD ],\}}ˆ  t¡ |tdƒ|ƒ W d Q R X q6W d S )Nr   )ÚPyTime_FromSecondsObjectc             S   s   | t  S )N)r  )r+  r   r   r   r   „  r‚   z4TestCPyTime.test_FromSecondsObject.<locals>.<lambda>c                s   ˆ   | t ¡S )N)r'  r  )r'   )r   r   r   r   ˆ  r‚   rÁ   )rø   r/  r$  r%  r  rH   rS   r4   )r   r/  r  r"  r   )r   r   Útest_FromSecondsObject  s    
z"TestCPyTime.test_FromSecondsObjectc          
      sb   ddl m‰  dd„ }|  ‡ fdd„|t¡ x2tD ]*\}}|  t¡ ˆ tdƒƒ W d Q R X q0W d S )Nr   )ÚPyTime_AsSecondsDoublec             S   s,   t | ƒt dkrt| t ƒS t| ƒt S d S )Nr   )Úabsr  r4   )r'   r   r   r   Úfloat_converter’  s    z9TestCPyTime.test_AsSecondsDouble.<locals>.float_converterc                s   ˆ | ƒS )Nr   )r'   r-  )r1  r   r   r   ˜  r‚   z2TestCPyTime.test_AsSecondsDouble.<locals>.<lambda>rÁ   )rø   r1  r$  Ú	NS_TO_SECr  rH   rm   r4   )r   r3  r  r"  r   )r1  r   Útest_AsSecondsDouble  s    z TestCPyTime.test_AsSecondsDoublec                s   t  |¡‰ ‡ ‡fdd„}|S )Nc                s   t  | ¡ˆ  }ˆ |¡S )N)r  r&  r'  )r  rY   )Údenomr   r   r   Ú	converter¤  s    z7TestCPyTime.create_decimal_converter.<locals>.converter)r  r&  )r   Údenominatorr7  r   )r6  r   r   Úcreate_decimal_converter¡  s    
z$TestCPyTime.create_decimal_converterc                sh   ddl m} |  t¡‰‡fdd„}tjdkrLddl m‰m‰  ‡ ‡fdd„}n| j}| j	||t
|d	 d S )
Nr   )ÚPyTime_AsTimevalc                s   ˆ | ƒ}t |tƒS )N)ÚdivmodÚ	SEC_TO_US)r'   Úus)Úus_converterr   r   Útimeval_converter¯  s    z5TestCPyTime.test_AsTimeval.<locals>.timeval_converterÚwin32)ÚLONG_MINÚLONG_MAXc                s   ˆ|   koˆ kS   S )Nr   )r+  )rB  rA  r   r   Úseconds_filter·  s    z2TestCPyTime.test_AsTimeval.<locals>.seconds_filter)r  )rø   r:  r9  r  r­   r®   rA  rB  rý   r$  r4  )r   r:  r?  rC  r   )rB  rA  r>  r   Útest_AsTimevalª  s    

zTestCPyTime.test_AsTimevalÚPyTime_AsTimespecz need _testcapi.PyTime_AsTimespecc                s4   ddl m‰  dd„ }| j‡ fdd„|t| jd d S )Nr   )rE  c             S   s
   t | tƒS )N)r;  r  )r'   r   r   r   Útimespec_converterÆ  s    z7TestCPyTime.test_AsTimespec.<locals>.timespec_converterc                s   ˆ | ƒS )Nr   )r'   r-  )rE  r   r   r   É  r‚   z-TestCPyTime.test_AsTimespec.<locals>.<lambda>)r  )rø   rE  r$  r4  rý   )r   rF  r   )rE  r   Útest_AsTimespecÁ  s    zTestCPyTime.test_AsTimespecc             C   s$   ddl m} |  ||  t¡t¡ d S )Nr   )ÚPyTime_AsMilliseconds)rø   rH  r$  r9  r  r4  )r   rH  r   r   r   Útest_AsMillisecondsÎ  s    zTestCPyTime.test_AsMillisecondsc             C   s$   ddl m} |  ||  t¡t¡ d S )Nr   )ÚPyTime_AsMicroseconds)rø   rJ  r$  r9  r  r4  )r   rJ  r   r   r   Útest_AsMicrosecondsÕ  s    zTestCPyTime.test_AsMicrosecondsN)r
   r   r   r(  ÚmathZceilr  r  r.  r0  r5  r9  rD  rÇ   rÈ   r-   rø   rG  rI  rK  r   r   r   r   r)  h  s   	r)  c               @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestOldPyTimezH
    Test the old C _PyTime_t API: _PyTime_ObjectToXXX() functions.
    l            c             C   s:   ddl m} | j|dd„ | jd | j|| j| jd d S )Nr   )Úpytime_object_to_time_tc             S   s   | S )Nr   )r+  r   r   r   r   é  r‚   z5TestOldPyTime.test_object_to_time_t.<locals>.<lambda>)r  )rø   rN  r$  rý   r%  r'  )r   rN  r   r   r   Útest_object_to_time_tå  s    
z#TestOldPyTime.test_object_to_time_tc                s   ‡ ‡fdd„}|S )Nc                sb   t  | ¡\}}t|ƒ}|ˆ 9 }ˆ |¡}|dk rB|ˆ 7 }|d8 }n|ˆ krZ|ˆ 8 }|d7 }||fS )Nr   r   )rL  Zmodfr%   r'  )r+  Z	floatpartZintpart)Úsec_to_unitr   r   r   r7  ñ  s    

z1TestOldPyTime.create_converter.<locals>.converterr   )r   rP  r7  r   )rP  r   r   Úcreate_converterð  s    zTestOldPyTime.create_converterc          
   C   st   ddl m} | j|dd„ | jd | j||  t¡| jd x4tD ],\}}|  t	¡ |t
dƒ|ƒ W d Q R X q@W d S )Nr   )Úpytime_object_to_timevalc             S   s   | dfS )Nr   r   )r+  r   r   r   r     r‚   z6TestOldPyTime.test_object_to_timeval.<locals>.<lambda>)r  rÁ   )rø   rR  r$  rý   r%  rQ  r<  r  rH   rS   r4   )r   rR  r  r"  r   r   r   Útest_object_to_timevalÿ  s    

z$TestOldPyTime.test_object_to_timevalc          
   C   st   ddl m} | j|dd„ | jd | j||  t¡| jd x4tD ],\}}|  t	¡ |t
dƒ|ƒ W d Q R X q@W d S )Nr   )Úpytime_object_to_timespecc             S   s   | dfS )Nr   r   )r+  r   r   r   r     r‚   z7TestOldPyTime.test_object_to_timespec.<locals>.<lambda>)r  rÁ   )rø   rT  r$  rý   r%  rQ  r  r  rH   rS   r4   )r   rT  r  r"  r   r   r   Útest_object_to_timespec  s    

z%TestOldPyTime.test_object_to_timespecN)	r
   r   r   r(  r  rO  rQ  rS  rU  r   r   r   r   rM  Ý  s   rM  Ú__main__).Ztestr   r  ÚenumrÊ   rL  r®   r­   Z	sysconfigr   r<   rÇ   Úwarningsrø   ÚImportErrorZget_config_varr   r’   r“   r<  r  r  r  r4  ÚIntEnumr   r   r   r   r   r  ZTestCaser   rÉ   rÒ   rÙ   rã   ré   rê   rë   ZskipIfrö   r)  rM  r
   Úmainr   r   r   r   Ú<module>   s\   



    . 7 uC
