a
    äze‰Ÿ  ã                   @   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zd dlZW n ey~   dZY n0 d dlmZ 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u d¡G dd „ d ƒƒZ*G d!d"„ d"e*ej ƒZ+G d#d$„ d$e*ej ƒZ,e -ejd%kd&¡G d'd(„ d(ej ƒƒZ.e/d)kre 0¡  dS )*é    )ÚsupportN)Úskip_if_buggy_ucrt_strfptimeÚ
SIZEOF_INTé   é   é   él  i@B éè  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.9/test/test_time.pyr
      s   r
   c                   @   sê  e Z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ed+d,„ ƒZd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Ze e	e
d7ƒd8¡d9d:„ ƒZd;d<„ Zd=d>„ Z d?d@„ Z!dAdB„ Z"dCdD„ Z#e e$ %¡ dE dFkdG¡dHdI„ ƒZ&dJdK„ Z'dLdM„ Z(dNdO„ Z)dPdQ„ Z*e e	e
dƒdR¡dSdT„ ƒZ+dUdV„ Z,dWdX„ Z-dYS )ZÚ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 r   )r   ÚaltzoneÚdaylightÚtimezoneÚtznamer   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_nsr   r   r   Úcheck_nsD   s    z0TimeTestCase.test_time_ns_type.<locals>.check_nsÚthread_timeÚclock_gettime)r   Útime_nsr$   Úmonotonic_nsÚperf_counterÚperf_counter_nsÚprocess_timeÚprocess_time_nsÚhasattrr.   Úthread_time_nsr/   ÚCLOCK_REALTIMEÚclock_gettime_ns)r   r-   r   r   r   Útest_time_ns_typeC   s*    ÿÿÿÿ
ÿ

ÿzTimeTestCase.test_time_ns_typer/   zneed time.clock_gettime()c                 C   s   t  t j¡}|  |t¡ d S r   )r   r/   r8   r)   Úfloat©r   r   r   r   r   Útest_clock_realtime\   s    z TimeTestCase.test_clock_realtimeÚCLOCK_MONOTONICzneed time.CLOCK_MONOTONICc                 C   s(   t  t j¡}t  t j¡}|  ||¡ d S r   )r   r/   r>   ÚassertLessEqual)r   ÚaÚbr   r   r   Útest_clock_monotonicb   s    z!TimeTestCase.test_clock_monotonicÚpthread_getcpuclockidz!need time.pthread_getcpuclockid()c                 C   s˜   t  t ¡ ¡}|  t|ƒtu ¡ t ¡ dkrJt	j
 ¡ dkrJ|  |t j¡ n*t	j d¡rf|  |t j¡ n|  |t j¡ t  |¡}t  |¡}|  ||¡ d S )NZAIXé    Zsunos)r   rC   Ú	threadingÚ	get_identr%   Útyper*   ÚplatformÚsystemÚsysÚmaxsizeÚ
bit_lengthÚassertEqualÚCLOCK_THREAD_CPUTIME_IDÚ
startswithÚassertNotEqualr/   r?   )r   Zclk_idÚt1Út2r   r   r   Útest_pthread_getcpuclockidk   s    

z'TimeTestCase.test_pthread_getcpuclockidÚclock_getreszneed time.clock_getres()c                 C   s(   t  t j¡}|  |d¡ |  |d¡ d S )Nç        ç      ð?)r   rT   r8   ÚassertGreaterr?   )r   Úresr   r   r   Útest_clock_getres~   s    zTimeTestCase.test_clock_getresÚclock_settimezneed time.clock_settime()c                 C   sT   t  t j¡}zt  t j|¡ W n ty0   Y n0 tt dƒrP|  tt jt jd¡ d S )Nr>   r   )	r   r/   r8   rZ   ÚPermissionErrorr6   ÚassertRaisesÚOSErrorr>   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 r   )rM   r   Úctimer   ÚasctimeÚ	localtimer*   Úmktimer   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ó?)r\   Ú
ValueErrorr   Úsleepr   r   r   r   Ú
test_sleep˜   s    zTimeTestCase.test_sleepc              	   C   sx   t  | j¡}dD ]>}d| }zt  ||¡ W q tyL   |  d| ¡ Y q0 q|  tt jd|¡ |  tt jd|¡ d S )N©r@   ÚArA   Ú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   Ústrftimerf   Úfailr\   Ú	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)	r   r   r   r   r   r   r   r   re   )	r   é   r   r   r   r   r   r   re   )	r   re   r   r   r   r   r   r   re   )	r   é   r   r   r   r   r   r   re   )	r   r   r   r   r   r   r   r   re   )	r   r   é   r   r   r   r   r   re   )	r   r   re   r   r   r   r   r   re   )	r   r   rD   r   r   r   r   r   re   )	r   r   r   é   r   r   r   r   re   )	r   r   r   re   r   r   r   r   re   )	r   r   r   é   r   r   r   r   re   )	r   r   r   r   é;   r   r   r   re   )	r   r   r   r   re   r   r   r   re   )	r   r   r   r   é<   r   r   r   re   )	r   r   r   r   r   re   r   r   re   )	r   r   r   r   r   rŒ   r   r   re   )	r   r   r   r   r   é=   r   r   re   )	r   r   r   r   r   é>   r   r   re   )	r   r   r   r   r   r   re   r   re   )	r   r   r   r   r   r   é   r   re   )	r   r   r   r   r   r   rd   r   re   )	r   r   r   r   r   r   r   r   re   )	r   r   r   r   r   r   r   in  re   )	r   r   r   r   r   r   r   re   re   )	r   r   r   r   r   r   r   io  re   )r\   rf   rM   )r   Úfuncr   r   r   Ú_bounds_checking¬   sh    ÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿzTimeTestCase._bounds_checkingc                 C   s   |   dd„ ¡ d S )Nc                 S   s   t  d| ¡S )NÚ ©r   r   )Ú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   sR   dD ]H}t ddƒD ]8}dD ].}zt || | ¡ W q tyF   Y q0 qqqd S )N)r’   rj   z%Az%AAr   é   )r}   zA%zAA%z%A%zA%A%z%#)Úranger   r   rf   )r   rx   rz   Úzr   r   r   Útest_strftime_format_checkè   s    z'TimeTestCase.test_strftime_format_checkc                 C   sH   d}t  ¡  t dd¡}W d   ƒ n1 s.0    Y  |  ||¡ d S )Nz2000 01 01 00 00 00 1 001z%Y %m %d %H %M %S %w %j)	éÐ  r   r   r   r   r   r   r   r   )r   Zcheck_warningsr   r   rM   )r   ÚexpectedÚresultr   r   r   Útest_default_values_for_zeroõ   s    
*z)TimeTestCase.test_default_values_for_zeroc              	   C   sd   t  | j¡}dD ]N}d| }t  ||¡}zt  ||¡ W q ty\   |  d||f ¡ Y q0 qd S )Nri   r}   z/conversion specifier %r failed with '%s' input.)r   r~   r   r   Ústrptimerf   r€   )r   r‚   rƒ   r„   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   2009ú%YZ2009s   %Y)r\   r   r   r    r   r   r   r   Útest_strptime_bytes  s    z TimeTestCase.test_strptime_bytesc                 C   s   |   t¡}t dd¡ W d   ƒ n1 s,0    Y  |  |jjd¡ |   t¡}t dd¡ W d   ƒ n1 sr0    Y  |  |jjd¡ d S )Nr’   z%DTZ19z%Y %)r\   rf   r   r    ÚassertIsÚ	exceptionÚ__suppress_context__)r   Úer   r   r   Útest_strptime_exception_context  s    **z,TimeTestCase.test_strptime_exception_contextc                 C   s¾   t  t  | j¡¡ ttfD ]:}t  |ddfd ¡}|  |tt|ƒƒ d … t|ƒ¡ q|  	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   r`   r~   r   ÚTIME_MAXYEARÚTIME_MINYEARrM   ÚlenÚstrr\   ÚOverflowErrorr   )r   ZbigyearZascr   r   r   Útest_asctime  s    $
ÿ
ÿzTimeTestCase.test_asctimec                 C   s   |   tj¡ d S r   )r‘   r   r`   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¡ dD ]R}zt  |ddfd ¡}W n ttfyn   Y q<0 |  t  |¡d	d … t|ƒ¡ q<d S )
N)	iµ  é	   r˜   r   r   é4   r   r   re   zSun Sep 16 01:03:52 1973)	rœ   r   r   r   r   r   r   r   re   zSat Jan  1 00:00:00 2000)iœÿÿÿéd   r	   rœ   i  é'  r   é
   r©   é   )r   rb   rM   r_   rf   r¯   r®   )r   r   ZyearZtestvalr   r   r   Ú
test_ctime0  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v ttjd
 ƒ¡ |  ttjƒd	¡ |  tjd
¡ |  tj	d¡ |  tjd¡ |  t |¡j
d
¡ W |d urô||d< nd|v r|d= t ¡  n.|d ur"||d< nd|v r2|d= t ¡  0 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   éPF  i@8  ZAESTEST)ZAEDTr»   i`sÿÿiPeÿÿ)Úosrº   Úgetr   r¹   rM   r~   ra   r   r   Útm_isdstrP   r    r­   r   ZassertInr%   r®   )r   rº   Zxmas2002ZeasternZvictoriaZutcZorg_TZr   r   r   Ú
test_tzset?  s^    ÿ 



ü


zTimeTestCase.test_tzsetc                 C   s2   t jt jt jfD ]}dD ]}|  t||¡ qqd S )N)gZb××çtégZb××çti)r   r_   r~   ra   r\   r¯   )r   r   Zunreasonabler   r   r   Útest_insane_timestampsŠ  s    z#TimeTestCase.test_insane_timestampsc                 C   s   t  ¡  t  d ¡ d S r   )r   r_   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š™™™™™É?)Zdelta)r   r~   rb   ÚassertAlmostEqual)r   Zgt0Zgt1Út0rQ   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 rÃ   )r   ra   rb   rÄ   )r   Zlt0Zlt1rÅ   rQ   r   r   r   Útest_localtime_without_arg¡  s
    


z'TimeTestCase.test_localtime_without_argc              
   C   sF   dD ]<}zt  |¡}W n ttfy,   Y q0 |  t  |¡|¡ qd S )N)rd   re   r   r   )r   ra   r¯   r]   rM   rb   )r   r   r‚   r   r   r   Útest_mktime¨  s    zTimeTestCase.test_mktimer   Úglibcz0disabled because of a bug in glibc. Issue #13309c                 C   s^   t  | j¡}t  d|¡}|  |d¡ zt  d¡ W n tyD   Y n0 |  t  d|¡|¡ d S )Nú%ZZLMT)	re   r   r   r   r   r   re   re   re   )r   r~   r   r   rP   rb   r¯   rM   )r   r‚   r    r   r   r   Útest_mktime_error´  s    zTimeTestCase.test_mktime_errorc                 C   s¤   dd„ t dƒD ƒ}|d }|dd … D ]}|  ||d| ¡ |}q&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>Å  r–   z/TimeTestCase.test_monotonic.<locals>.<listcomp>r´   r   r   ztimes=%sg      à?gÍÌÌÌÌÌÜ?r$   )
r™   ÚassertGreaterEqualr   r$   rg   rW   r%   r"   r#   r&   )r   ÚtimesrQ   rR   Zdtr'   r   r   r   Útest_monotonicÃ  s    

zTimeTestCase.test_monotonicc                 C   s   t  ¡  d S r   )r   r2   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 )Nçš™™™™™¹?ç{®Gáz”?r4   )	r   r4   rg   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.   )ÚlinuxÚwinz,time.thread_time() should be available on %rzneed time.thread_timerÓ   rÔ   )r6   r   rJ   rH   rO   r€   ÚskipTestr.   rg   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¡}zt  t j|d ¡ W n. tyX } z|  |¡ W Y d }~n
d }~0 0 t  ¡ }t  t j|¡ |  ||¡ d S )Ni  )r   r$   r/   r8   rZ   r[   rÛ   rÏ   )r   rQ   ZrealtimeÚerrrR   r   r   r   Útest_monotonic_settimeþ  s     z#TimeTestCase.test_monotonic_settimec              	   C   s²   d }dD ]J}zt  |¡ W q ty6   |  d¡ Y q tyP   |}Y  qTY q0 q|d u rf|  d¡ |  tt j|¡ |  tt j|¡ |  tt jtdƒ¡ |  tt jtdƒ¡ d S )N)re   i   @l        l            zneed 64-bit time_tz&unable to find an invalid time_t valueÚnan)	r   ra   r¯   rÛ   r]   r\   r_   rf   r;   )r   Zinvalid_time_tZtime_tr   r   r   Útest_localtime_failure  s    
z#TimeTestCase.test_localtime_failurec              	   C   s¾   g d¢}|D ]œ}| j |d| t |¡}|  |jt¡ |  |jd¡ |  |jt¡ |  |j	t
¡ |  |j	d¡ |  |j	d¡ |  |jt¡ W d   ƒ q1 sž0    Y  q|  ttjd¡ d S )N)r$   r2   r4   r   r.   )Únamer’   rU   rV   Zxxx)ZsubTestr   r"   r)   Úimplementationr®   rP   r$   ÚboolZ
resolutionr;   rW   r?   r&   r\   rf   )r   Zclocksrá   r'   r   r   r   Útest_get_clock_info"  s    
.z TimeTestCase.test_get_clock_infoN).r   r   r   r   r!   r(   r:   ÚunittestÚ
skipUnlessr6   r   r=   rB   rS   rY   r^   rc   rh   r…   r‘   r—   r›   rŸ   r   r¡   r£   r¨   r°   r±   r¸   rÀ   rÁ   rÂ   rÆ   rÇ   rÈ   rH   Zlibc_verrË   rÑ   rÒ   rØ   rÜ   rÞ   rà   rä   r   r   r   r   r   2   s†   ÿ
ÿÿÿÿÿ
ÿ
9


ÿ
I	ÿ
ÿ
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 r   ©ÚlocaleÚ	setlocaleÚLC_ALLÚoldlocr   r   r   r   r   <  s    zTestLocale.setUpc                 C   s   t  t j| j¡ d S r   rè   r   r   r   r   ÚtearDown?  s    zTestLocale.tearDownc                 C   sB   zt  t jd¡}W n t jy0   |  d¡ Y n0 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   r   )r   Útmpr   r   r   Útest_bug_3061B  s
    zTestLocale.test_bug_3061N)r   r   r   r   rí   rñ   r   r   r   r   rç   ;  s   rç   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_TestAsctimeYearú%dc                 C   s   t  |fd ¡ ¡ d S )Nrª   re   )r   r`   Úsplit©r   rz   r   r   r   ÚyearstrN  s    z_TestAsctimeYear.yearstrc                 C   s(   |   |  d¡d¡ |   |  d¡d¡ d S )Né90  Ú12345éÍ[Ú	123456789)rM   rö   r   r   r   r   Útest_large_yearQ  s    z _TestAsctimeYear.test_large_yearN)r   r   r   Ú_formatrö   rû   r   r   r   r   rò   K  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 )Ú_TestStrftimeYearr¢   )	r   r   r   r   r   r   r   r   r   Z0001ú%04dró   c                 C   s   t  d|fd ¡S )Nr¢   rª   r“   rõ   r   r   r   rö   b  s    z_TestStrftimeYear.yearstrc                 C   s0   | j dkr|  d¡ ndd„ }| jd|d d S )Nrþ   c                 S   s   t  d| fd ¡S )Nz%4Yrª   r“   )rz   r   r   r   Úyear4dj  s    z-_TestStrftimeYear.test_4dyear.<locals>.year4d)r   )rü   Ú	test_year)r   rÿ   r   r   r   Útest_4dyeare  s    
z_TestStrftimeYear.test_4dyearc                 C   sB   d}zt  d| fd ¡ W n ty0   d}Y n0 d}t ||¡S )Nz5strftime() is limited to [1; 9999] with Visual Studior¢   rª   FT)r   r   rf   rå   ræ   )rz   ÚmsgÚcondr   r   r   Úskip_if_not_supportedn  s    
z'_TestStrftimeYear.skip_if_not_supportedrµ   c                    s
   t ƒ  ¡ S r   )Úsuperrû   r   ©Ú	__class__r   r   rû   y  s    z!_TestStrftimeYear.test_large_yearr   c                    s
   t ƒ  ¡ S r   )r  Útest_negativer   r  r   r   r  }  s    z_TestStrftimeYear.test_negative)r   r   r   r   r   rü   rö   r  r  rû   r  Ú__classcell__r   r   r  r   rý   V  s   	rý   c                   @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
Ú_Test4dYearró   Nc                 C   s   |p| j }|p| j}|  |dƒ|d ¡ |  |dƒ|d ¡ |  |dƒ|d ¡ |  |dƒ|d ¡ |  |dƒ|d ¡ |  |dƒ|d ¡ d S )Nr   éD   éE   éc   éç  é'  )rü   rö   rM   )r   Ú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 )Nr÷   ú+rø   rù   rú   r   )rM   rö   Úlstripr«   r®   r\   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   ƒ n1 sÂ0    Y  d S )	Nre   i.ûÿÿz-1234iÀþÿz-123456ië2¤øi.ýi¶r   )rM   rö   rü   r®   r¬   r\   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 )ÚTestStrftime4dyearNr  r   r   r   r   r  §  s   r  c                   @   s^   e Zd Ze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 u rF|  tt dƒ ¡ n|  |jt jt jg|j  ¡ |j	d u 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   ra   r%   r6   r  rM   r   r   r¿   r  r    rb   )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UTCrÊ   z+0500z%zr¼   )r   r    rM   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æ   r   Ú_STRUCT_TM_ITEMSr  r  r   r   r   r   r   r  «  s   "
r  zneed the _testcapi modulec                   @   sN   e 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 )ÚCPyTimeTestCaseNc                 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 r   )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}|D ]&}|D ]}|| }| | |f¡ q0q(dD ]<}d| t }| | d | | d |d ||d f¡ qTtjtjfD ]}	| |	t ¡ qž|rÚdD ]}d|  }| | |f¡ qºd	t t }| | |f¡ |S )
Nr   gü©ñÒMbP?)r   r   é   é   é{   iÈ  iÒ  r²   r  r  r  iŸ† i?B ió  iô  iõ  iÛ  iÜ  iÝ  iÄ	  i¬  i”  r   )	r   r*  r¶   é   é   r‰   rŠ   é   é!   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ó  s0    
þ
z CPyTimeTestCase._rounding_valuesc                    s4  ‡ ‡‡fdd„}|   ˆ¡}||ƒ}tD ]\}	}
t ¡ p}|
|_|D ]T}||
dœ}z|||	ƒ}||ƒ}W n  ty†   |  d| ¡ Y n0 |  |||¡ qBW d   ƒ q&1 s¬0    Y  q&| jt	 }| |f}||ƒ}tD ]V\}	}|D ]H}||	dœ}| j
t|d |||	ƒ W d   ƒ qä1 s"0    Y  qäqØ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,   ©Z
unit_to_nsr   r   rÎ   ,  r–   zKCPyTimeTestCase._check_rounding.<locals>.convert_values.<locals>.<listcomp>c                    s   g | ]}|ˆ  ‘qS r   r   r=  r>  r   r   rÎ   /  r–   )r3  r;   ÚfilterÚsortedÚset)r:  r9  ©Úunit_to_secr8  Úvalue_filterr>  r   Úconvert_values)  s    
z7CPyTimeTestCase._check_rounding.<locals>.convert_values)r;  Úroundingz!Error on timestamp conversion: %s)r  )r<  ÚROUNDING_MODESÚdecimalZlocalcontextrF  Ú	Exceptionr€   rM   ÚOVERFLOW_SECONDSr3  r\   r¯   )r   Úpytime_converterÚexpected_funcr8  rC  rD  rE  r:  Zvalid_valuesÚtime_rndZdecimal_rndÚcontextr;  Z
debug_inforž   r   r,   Zoverflow_valuesÚ_r   rB  r   Ú_check_rounding&  s2    



þ&


zCPyTimeTestCase._check_roundingr   c                 C   s   |   ||d||¡ d S )NF©rP  ©r   rK  rL  rC  rD  r   r   r   Úcheck_int_roundingS  s    ÿz"CPyTimeTestCase.check_int_roundingc                 C   s   |   ||d||¡ d S )NTrQ  rR  r   r   r   Úcheck_float_roundingX  s    ÿz$CPyTimeTestCase.check_float_roundingc                 C   s   t  |¡}| d¡}t|ƒS )Nr   )rH  ÚDecimalZquantizer*   )r   rx   rm   r   r   r   Údecimal_round]  s    

zCPyTimeTestCase.decimal_round)N)r   N)r   N)r   r   r   rJ  r   r)  r<  rP  rS  rT  rV  r   r   r   r   r"  ã  s   4 ÿ
. ÿ
 ÿ
r"  c                   @   sl   e 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 )ÚTestCPyTimel           c              	      sx   ddl m‰  dd„ }| j‡ fdd„dd„ |d tD ]>\}}|  t¡ ˆ td	ƒƒ W d   ƒ q41 sh0    Y  q4d S )
Nr   ©ÚPyTime_FromSecondsc                 S   s   t j|   kot jkS   S r   )r$  r6  r7  ©Úsecsr   r   r   Úc_int_filtern  s    z2TestCPyTime.test_FromSeconds.<locals>.c_int_filterc                    s   ˆ | ƒS r   r   )r[  ÚrndrX  r   r   r•   q  r–   z.TestCPyTime.test_FromSeconds.<locals>.<lambda>c                 S   s   | t  S r   ©r3  rZ  r   r   r   r•   r  r–   ©rD  rß   )r$  rY  rS  rG  r\   r   r;   )r   r\  rM  rO  r   rX  r   Útest_FromSecondsj  s    þzTestCPyTime.test_FromSecondsc              	      sz   ddl m} ˆ  |dd„ ¡ ˆ  |‡ fdd„¡ tD ]@\}}ˆ  t¡ |tdƒ|ƒ W d   ƒ q41 sj0    Y  q4d S )Nr   )ÚPyTime_FromSecondsObjectc                 S   s   | t  S r   r^  rZ  r   r   r   r•     r–   z4TestCPyTime.test_FromSecondsObject.<locals>.<lambda>c                    s   ˆ   | t ¡S r   )rV  r3  ©r,   r   r   r   r•   ƒ  r–   rß   )r$  ra  rS  rT  rG  r\   rf   r;   )r   ra  rM  rO  r   r   r   Útest_FromSecondsObjectz  s    þ
þz"TestCPyTime.test_FromSecondsObjectc              	      sr   ddl m‰  dd„ }|  ‡ fdd„|t¡ tD ]>\}}|  t¡ ˆ tdƒƒ W d   ƒ q.1 sb0    Y  q.d S )Nr   ©ÚPyTime_AsSecondsDoublec                 S   s,   t | ƒt dkrt| t ƒS t| ƒt S d S ©Nr   )Úabsr3  r;   rb  r   r   r   Úfloat_converter  s    z9TestCPyTime.test_AsSecondsDouble.<locals>.float_converterc                    s   ˆ | ƒS r   r   ©r,   r]  rd  r   r   r•   “  r–   z2TestCPyTime.test_AsSecondsDouble.<locals>.<lambda>rß   )r$  re  rS  Ú	NS_TO_SECrG  r\   r   r;   )r   rh  rM  rO  r   rd  r   Útest_AsSecondsDoubleŠ  s    þz TestCPyTime.test_AsSecondsDoublec                    s   t  |¡‰ ‡ ‡fdd„}|S )Nc                    s   t  | ¡ˆ  }ˆ |¡S r   )rH  rU  rV  )r;  rm   ©Zdenomr   r   r   Ú	converterŸ  s    z7TestCPyTime.create_decimal_converter.<locals>.converter)rH  rU  )r   Údenominatorrm  r   rl  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 r   )Ú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 r   r   rZ  )rx  rw  r   r   Úseconds_filter²  s    z2TestCPyTime.test_AsTimeval.<locals>.seconds_filterr_  )r$  rp  ro  r1  rJ   rH   rw  rx  r)  rS  rj  )r   rp  ru  ry  r   )rx  rw  rt  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   ©r{  c                 S   s
   t | tƒS r   )rq  r3  rb  r   r   r   Útimespec_converterÁ  s    z7TestCPyTime.test_AsTimespec.<locals>.timespec_converterc                    s   ˆ | ƒS r   r   ri  r|  r   r   r•   Ä  r–   z-TestCPyTime.test_AsTimespec.<locals>.<lambda>r_  )r$  r{  rS  rj  r)  )r   r}  r   r|  r   Útest_AsTimespec¼  s    ýzTestCPyTime.test_AsTimespecc                 C   s$   ddl m} |  ||  t¡t¡ d S )Nr   )ÚPyTime_AsMilliseconds)r$  r  rS  ro  r2  rj  )r   r  r   r   r   Útest_AsMillisecondsÉ  s
    þzTestCPyTime.test_AsMillisecondsc                 C   s$   ddl m} |  ||  t¡t¡ d S )Nr   )ÚPyTime_AsMicroseconds)r$  r  rS  ro  r1  rj  )r   r  r   r   r   Útest_AsMicrosecondsÐ  s
    þzTestCPyTime.test_AsMicrosecondsN)r   r   r   ÚmathÚceilr3  rJ  r`  rc  rk  ro  rz  rå   ræ   r6   r$  r~  r€  r‚  r   r   r   r   rW  c  s   	ÿ
rW  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestOldPyTimel            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 r   r   rZ  r   r   r   r•   ä  r–   z5TestOldPyTime.test_object_to_time_t.<locals>.<lambda>r_  )r$  r†  rS  r)  rT  rV  )r   r†  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   )rƒ  Úmodfr*   rV  )r[  Z	floatpartZintpart©Úsec_to_unitr   r   r   rm  ì  s    

z1TestOldPyTime.create_converter.<locals>.converterr   )r   rŠ  rm  r   r‰  r   Úcreate_converterë  s    zTestOldPyTime.create_converterc              	   C   s„   ddl m} | j|dd„ | jd | j||  t¡| jd tD ]@\}}|  t	¡ |t
dƒ|ƒ W d   ƒ q>1 st0    Y  q>d S )Nr   )Úpytime_object_to_timevalc                 S   s   | dfS rf  r   rZ  r   r   r   r•   þ  r–   z6TestOldPyTime.test_object_to_timeval.<locals>.<lambda>r_  rß   )r$  rŒ  rS  r)  rT  r‹  rr  rG  r\   rf   r;   )r   rŒ  rM  rO  r   r   r   Útest_object_to_timevalú  s    þþz$TestOldPyTime.test_object_to_timevalc              	   C   s„   ddl m} | j|dd„ | jd | j||  t¡| jd tD ]@\}}|  t	¡ |t
dƒ|ƒ W d   ƒ q>1 st0    Y  q>d S )Nr   )Úpytime_object_to_timespecc                 S   s   | dfS rf  r   rZ  r   r   r   r•     r–   z7TestOldPyTime.test_object_to_timespec.<locals>.<lambda>r_  rß   )r$  rŽ  rS  r)  rT  r‹  r3  rG  r\   rf   r;   )r   rŽ  rM  rO  r   r   r   Útest_object_to_timespec
  s    þþz%TestOldPyTime.test_object_to_timespecN)r   r   r   rJ  r‡  r‹  r  r  r   r   r   r   r…  Ø  s
   r…  Údarwinztest weak linking on macOSc                   @   s   e Zd Zdd„ ZdS )ÚTestTimeWeaklinkingc                 C   sº   dd l }dd l}| ¡ }d}||vs,|| s<t |› d¡‚tdd„ | ¡ d  d¡D ƒƒ}g d¢}|dkr’|D ]}|  t	t
|ƒd	|› d¡ qpn$|D ]}|  t	t
|ƒd	|› d
¡ q–d S )Nr   ZHAVE_CLOCK_GETTIMEz is not availablec                 s   s   | ]}t |ƒV  qd S r   )r*   )rÌ   rx   r   r   r   Ú	<genexpr>*  r–   z;TestTimeWeaklinking.test_clock_functions.<locals>.<genexpr>Ú.)r>   r/   r9   rZ   Úclock_settime_nsrT   )r¶   r†   ztime.z is available)Ú	sysconfigrH   Zget_config_varsrå   ZSkipTestÚtupleÚmac_verrô   r%   r6   r   r#   )r   r•  rH   Zconfig_varsZvar_namer—  Zclock_namesrá   r   r   r   Útest_clock_functions!  s     z(TestTimeWeaklinking.test_clock_functionsN)r   r   r   r˜  r   r   r   r   r‘    s   r‘  Ú__main__)1Útestr   rH  Úenumré   rƒ  rH   rJ   r•  r   rE   rå   r$  ÚImportErrorZtest.supportr   Zget_config_varr   r«   r¬   rr  r1  r2  r3  rj  ÚIntEnumr
   r   r   r   r   rG  ZTestCaser   rç   rò   rý   r
  r  r  r  ZskipIfr"  rW  r…  ræ   r‘  r   Úmainr   r   r   r   Ú<module>   sb   




û	    . 8uB
