o
    HXîhºŸ  ã                   @   s*  d dl mZ 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yE   dZY nw d dlmZ e
 d¡pRd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/e0d*kre 1¡  dS dS )+é    )Úsupport)Úwarnings_helperN)Ú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   ú8/opt/python-3.10.19/usr/lib/python3.10/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   ÚsetUp5   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_attributes8   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ƒr8|t  	¡ t  
¡ ƒ tt dƒrL|t  t j¡t  t j¡ƒ d S 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_nsE   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_nsr0   ÚCLOCK_REALTIMEÚclock_gettime_ns)r   r.   r   r   r   Útest_time_ns_typeD   s,   ÿÿÿÿ
ÿ

ÿÿzTimeTestCase.test_time_ns_typer0   zneed time.clock_gettime()c                 C   s   t  t j¡}|  |t¡ d S r   )r   r0   r9   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   r0   r?   ÚassertLessEqual)r   ÚaÚbr   r   r   Útest_clock_monotonicc   s   z!TimeTestCase.test_clock_monotonicÚpthread_getcpuclockidz!need time.pthread_getcpuclockid()c                 C   s˜   t  t ¡ ¡}|  t|ƒtu ¡ t ¡ dkr%t	j
 ¡ dkr%|  |t j¡ nt	j d¡r3|  |t j¡ n|  |t j¡ t  |¡}t  |¡}|  ||¡ d S )NZAIXé    Zsunos)r   rD   Ú	threadingÚ	get_identr&   Útyper+   ÚplatformÚsystemÚsysÚmaxsizeÚ
bit_lengthÚassertEqualÚCLOCK_THREAD_CPUTIME_IDÚ
startswithÚassertNotEqualr0   r@   )r   Zclk_idÚt1Út2r   r   r   Útest_pthread_getcpuclockidl   s   

z'TimeTestCase.test_pthread_getcpuclockidÚclock_getreszneed time.clock_getres()c                 C   s(   t  t j¡}|  |d¡ |  |d¡ d S )Nç        ç      ð?)r   rU   r9   ÚassertGreaterr@   )r   Úresr   r   r   Útest_clock_getres   s   zTimeTestCase.test_clock_getresÚclock_settimezneed time.clock_settime()c                 C   sX   t  t j¡}z	t  t j|¡ W n	 ty   Y nw tt dƒr*|  tt jt jd¡ d S d S )Nr?   r   )	r   r0   r9   r[   ÚPermissionErrorr7   Ú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   )rN   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   sv   t  | j¡}dD ]}d| }zt  ||¡ W q ty&   |  d| ¡ Y qw |  tt jd|¡ |  tt jd|¡ d S )N©rA   ÚArB   Ú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   Ústrftimerg   Ú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   rf   )	r	   é   r   r   r   r   r   r   rf   )	r	   rf   r   r   r   r   r   r   rf   )	r	   é   r   r   r   r   r   r   rf   )	r	   r   r   r   r   r   r   r   rf   )	r	   r   é   r   r   r   r   r   rf   )	r	   r   rf   r   r   r   r   r   rf   )	r	   r   rE   r   r   r   r   r   rf   )	r	   r   r   é   r   r   r   r   rf   )	r	   r   r   rf   r   r   r   r   rf   )	r	   r   r   é   r   r   r   r   rf   )	r	   r   r   r   é;   r   r   r   rf   )	r	   r   r   r   rf   r   r   r   rf   )	r	   r   r   r   é<   r   r   r   rf   )	r	   r   r   r   r   rf   r   r   rf   )	r	   r   r   r   r   r   r   r   rf   )	r	   r   r   r   r   é=   r   r   rf   )	r	   r   r   r   r   é>   r   r   rf   )	r	   r   r   r   r   r   rf   r   rf   )	r	   r   r   r   r   r   é   r   rf   )	r	   r   r   r   r   r   re   r   rf   )	r	   r   r   r   r   r   r   r   rf   )	r	   r   r   r   r   r   r   in  rf   )	r	   r   r   r   r   r   r   rf   rf   )	r	   r   r   r   r   r   r   io  rf   )r]   rg   rN   )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>ç   s    z;TimeTestCase.test_strftime_bounding_check.<locals>.<lambda>)r’   r   r   r   r   Útest_strftime_bounding_checkæ   ó   z)TimeTestCase.test_strftime_bounding_checkc                 C   sP   dD ]#}t ddƒD ]}dD ]}zt || | ¡ W q ty#   Y qw q	qd S )N)r“   rk   z%Az%AAr   é   )r~   zA%zAA%z%A%zA%A%z%#)Úranger   r€   rg   )r   ry   r{   Ú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w   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€   rN   )r   ÚexpectedÚresultr   r   r   Útest_default_values_for_zeroö   s
   
ÿz)TimeTestCase.test_default_values_for_zeroc              	   C   sb   t  | j¡}dD ]&}d| }t  ||¡}zt  ||¡ W q ty.   |  d||f ¡ Y qw d S )Nrj   r~   z/conversion specifier %r failed with '%s' input.)r   r   r   r€   Ústrptimerg   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  ó   z TimeTestCase.test_strptime_bytesc                 C   s   |   t¡}t dd¡ W d   ƒ n1 sw   Y  |  |jjd¡ |   t¡}t dd¡ W d   ƒ n1 s9w   Y  |  |jjd¡ d S )Nr“   z%DTZ19z%Y %)r]   rg   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   ra   r   r   ÚTIME_MAXYEARÚTIME_MINYEARrN   Ú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   ra   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 ])}zt  |ddfd ¡}W n ttfy7   Y qw |  t  |¡d	d … t|ƒ¡ qd S )
N)	iµ  é	   r™   r   r   é4   r   r   rf   zSun Sep 16 01:03:52 1973)	r   r   r   r   r   r   r   r   rf   zSat Jan  1 00:00:00 2000)iœÿÿÿéd   r
   r   i  é'  r   é
   r«   é   )r   rc   rN   r`   rg   r±   r°   )r   r   ZyearZtestvalr   r   r   Ú
test_ctime1  s   

ý øzTimeTestCase.test_ctimeÚtzsetz"time module has no attribute tzsetc              	   C   s8  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 ¡  d S |d ur||d< nd|v r|d= t ¡  w )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»   rN   r   rb   r   r    Útm_isdstrQ   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   rb   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   ó:   t  ¡ }t  d ¡}t  |¡}t  |¡}| j||dd d S ©Ngš™™™™™É?)Zdelta)r   r   rc   ÚassertAlmostEqual)r   Zgt0Zgt1Út0rR   r   r   r   Útest_gmtime_without_arg›  ó
   


z$TimeTestCase.test_gmtime_without_argc                 C   rÅ   rÆ   )r   rb   rc   rÇ   )r   Zlt0Zlt1rÈ   rR   r   r   r   Útest_localtime_without_arg¢  rÊ   z'TimeTestCase.test_localtime_without_argc              
   C   sF   dD ]}zt  |¡}W n ttfy   Y qw |  t  |¡|¡ qd S )N)re   rf   r   r   )r   rb   r±   r^   rN   rc   )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y"   Y nw |  t  d|¡|¡ d S )Nú%ZZLMT)	rf   r   r   r   r   r   rf   rf   rf   )r   r   r   r€   rQ   rc   r±   rN   )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>Æ  ó    z/TimeTestCase.test_monotonic.<locals>.<listcomp>r¶   r   r   ztimes=%sg      à?gÍÌÌÌÌÌÜ?r%   )
rš   ÚassertGreaterEqualr   r%   rh   rX   r&   r#   r$   r'   )r   ÚtimesrR   rS   Zdtr(   r   r   r   Útest_monotonicÄ  s   

zTimeTestCase.test_monotonicc                 C   s   t  ¡  d S r   )r   r3   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”?r5   )	r   r5   rh   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ƒst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Ù   )r7   r   rK   rI   rP   r   ÚskipTestr/   rh   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y, } z|  |¡ W Y d }~nd }~ww t  ¡ }t  t j|¡ |  ||¡ d S )Ni  )r   r%   r0   r9   r[   r\   rà   rÔ   )r   rR   ZrealtimeÚerrrS   r   r   r   Útest_monotonic_settimeÿ  s   €ÿz#TimeTestCase.test_monotonic_settimec              	   C   s¬   d }dD ]"}zt  |¡ W q ty   |  d¡ Y q ty&   |}Y  nw |d u r0|  d¡ |  tt j|¡ |  tt j|¡ |  tt jtdƒ¡ |  tt jtdƒ¡ d S )N)rf   i   @l        l            zneed 64-bit time_tz&unable to find an invalid time_t valueÚnan)	r   rb   r±   rà   r^   r]   r`   rg   r<   )r   Zinvalid_time_tZtime_tr   r   r   Útest_localtime_failure  s    þ
z#TimeTestCase.test_localtime_failurec              	   C   s¾   g d¢}|D ]N}| j |d> t |¡}|  |jt¡ |  |jd¡ |  |jt¡ |  |j	t
¡ |  |j	d¡ |  |j	d¡ |  |jt¡ W d   ƒ n1 sOw   Y  q|  ttjd¡ d S )N)r%   r3   r5   r   r/   )Únamer“   rV   rW   Zxxx)ZsubTestr   r#   r*   Úimplementationr°   rQ   r%   ÚboolZ
resolutionr<   rX   r@   r'   r]   rg   )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Ú
skipUnlessr7   r   r>   rC   rT   rZ   r_   rd   ri   r†   r’   r—   rœ   r    r   r¢   r¤   rª   r²   r³   rº   rÂ   rÃ   rÄ   rÉ   rË   rÌ   rI   Zlibc_verrÏ   rÖ   r×   rÝ   rá   rã   rå   ré   r   r   r   r   r   3   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_ALLZoldlocr   r   r   r   r   =  r˜   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y   |  d¡ Y nw 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_3061C  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¬   rf   )r   ra   Úsplit©r   r{   r   r   r   ÚyearstrO  ó   z_TestAsctimeYear.yearstrc                 C   s(   |   |  d¡d¡ |   |  d¡d¡ d S )Né90  Ú12345éÍ[Ú	123456789)rN   rú   r   r   r   r   Útest_large_yearR  r¥   z _TestAsctimeYear.test_large_yearN)r   r   r   Ú_formatrú   r   r   r   r   r   rö   L  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ú   c  r˜   z_TestStrftimeYear.yearstrc                 C   s2   | j dkr|  d¡ d S dd„ }| jd|d d S )Nr  c                 S   s   t  d| fd ¡S )Nz%4Yr¬   r”   )r{   r   r   r   Úyear4dk  r˜   z-_TestStrftimeYear.test_4dyear.<locals>.year4d)r‘   )r  Ú	test_year)r   r  r   r   r   Útest_4dyearf  s   
z_TestStrftimeYear.test_4dyearc                 C   sB   d}zt  d| fd ¡ W n ty   d}Y nw d}t ||¡S )Nz5strftime() is limited to [1; 9999] with Visual Studior£   r¬   FT)r   r€   rg   rê   rë   )r{   ÚmsgÚcondr   r   r   Úskip_if_not_supportedo  s   ÿz'_TestStrftimeYear.skip_if_not_supportedr·   c                    ó
   t ƒ  ¡ S r   )Úsuperr   r   ©Ú	__class__r   r   r   z  ó   
z!_TestStrftimeYear.test_large_yearr   c                    r
  r   )r  Útest_negativer   r  r   r   r  ~  r  z_TestStrftimeYear.test_negative)r   r   r   r   r€   r  rú   r  r	  r   r  Ú__classcell__r   r   r  r   r  W  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ú   rN   )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   )rN   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   ƒ d S 1 sbw   Y  d S )	Nrf   i.ûÿÿz-1234iÀþÿz-123456ië2¤øi.ýi¶r   )rN   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                   @   ó   e Zd ZdS )ÚTestAsctime4dyearN©r   r   r   r   r   r   r   r  ¥  ó    r  c                   @   r  )ÚTestStrftime4dyearNr  r   r   r   r   r  ¨  r  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 r#|  tt dƒ ¡ n|  |jt jt jg|j  ¡ |j	d u rA|  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   rb   r&   r7   r!  rN   r    r   rÁ   r"  r!   rc   )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¡   rN   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                   @   sX   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 r   )r.  r/  )r   Úsecondsr   r   r   Útime_t_filterñ  ó   zCPyTimeTestCase.time_t_filterc           
   
   C   sú   dt ttg}|r| d¡ d}dg}|D ]}|D ]}|| }| | |f¡ qqdD ]}d| t }| | d | | d |d ||d f¡ q*tjtjfD ]	}	| |	t ¡ qO|rmdD ]}d|  }| | |f¡ q]d	t t }| | |f¡ |S )
z'Build timestamps used to test rounding.r   gü©ñÒMbP?)r   r   é   é   é{   iÈ  iÒ  r´   r  r  r  iŸ† i?B ió  iô  iõ  iÛ  iÜ  iÝ  iÄ	  i¬  i”  r   )	r   r4  r¸   é   é   rŠ   r‹   é   é!   r   )r   r5  r¸   r7  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pow2r1  r   r   r   Ú_rounding_valuesô  s2   
þþ
z CPyTimeTestCase._rounding_valuesc                    s2  ‡ ‡‡fdd„}|   ˆ¡}||ƒ}tD ]H\}	}
t ¡ 8}|
|_|D ]*}||
dœ}z|||	ƒ}||ƒ}W n tyC   |  d| ¡ Y nw |  |||¡ q!W d   ƒ n1 sVw   Y  q| jt	 }| |f}||ƒ}tD ]*\}	}|D ]#}||	dœ}| j
t|d |||	ƒ W d   ƒ n1 sw   Y  qrqld S )Nc                    sX   ˆrt tˆƒ ‰ ‡ fdd„| D ƒ}nt ˆ ‰ ‡ fdd„| D ƒ}ˆr&tˆ|ƒ}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   rG  rH  r   r   rÒ   0  rÓ   )r=  r<   ÚfilterÚsortedÚset)rD  rC  ©Úunit_to_secrB  Úvalue_filterrH  r   Úconvert_values*  s   
z7CPyTimeTestCase._check_rounding.<locals>.convert_values)rE  Úroundingz!Error on timestamp conversion: %s)r  )rF  ÚROUNDING_MODESÚdecimalZlocalcontextrP  Ú	Exceptionr   rN   ÚOVERFLOW_SECONDSr=  r]   r±   )r   Úpytime_converterÚexpected_funcrB  rM  rN  rO  rD  Zvalid_valuesÚtime_rndZdecimal_rndÚcontextrE  Z
debug_inforŸ   rž   r-   Zoverflow_valuesÚ_r   rL  r   Ú_check_rounding'  sB   



ÿþùý€


ÿ€þÿzCPyTimeTestCase._check_roundingr   c                 C   ó   |   ||d||¡ d S )NF©rZ  ©r   rU  rV  rM  rN  r   r   r   Úcheck_int_roundingT  ó   ÿz"CPyTimeTestCase.check_int_roundingc                 C   r[  )NTr\  r]  r   r   r   Úcheck_float_roundingY  r_  z$CPyTimeTestCase.check_float_roundingc                 C   s   t  |¡}| d¡}t|ƒS )Nr   )rR  ÚDecimalZquantizer+   )r   ry   rn   r   r   r   Údecimal_round^  s   

zCPyTimeTestCase.decimal_roundr   )r   N)r   r   r   Ú__doc__rT  r   r2  rF  rZ  r^  r`  rb  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              	      sx   ddl m‰  dd„ }| j‡ fdd„dd„ |d tD ]\}}|  t¡ ˆ td	ƒƒ W d   ƒ n1 s4w   Y  qd S )
Nr   ©ÚPyTime_FromSecondsc                 S   s   t j|   kot jkS   S r   )r-  r@  rA  ©Úsecsr   r   r   Úc_int_filtero  r3  z2TestCPyTime.test_FromSeconds.<locals>.c_int_filterc                    ó   ˆ | ƒS r   r   )rh  Úrndre  r   r   r–   r  ó    z.TestCPyTime.test_FromSeconds.<locals>.<lambda>c                 S   ó   | t  S r   ©r=  rg  r   r   r   r–   s  rl  ©rN  rä   )r-  rf  r^  rQ  r]   r‚   r<   )r   ri  rW  rY  r   re  r   Útest_FromSecondsk  s   þÿ€ÿzTestCPyTime.test_FromSecondsc              	      sz   ddl m} ˆ  |dd„ ¡ ˆ  |‡ fdd„¡ tD ] \}}ˆ  t¡ |tdƒ|ƒ W d   ƒ n1 s5w   Y  qd S )Nr   )ÚPyTime_FromSecondsObjectc                 S   rm  r   rn  rg  r   r   r   r–   €  rl  z4TestCPyTime.test_FromSecondsObject.<locals>.<lambda>c                    s   ˆ   | t ¡S r   )rb  r=  ©r-   r   r   r   r–   „  s    rä   )r-  rq  r^  r`  rQ  r]   rg   r<   )r   rq  rW  rY  r   r   r   Útest_FromSecondsObject{  s   þ
þÿ€ÿz"TestCPyTime.test_FromSecondsObjectc              	      sr   ddl m‰  dd„ }|  ‡ fdd„|t¡ tD ]\}}|  t¡ ˆ tdƒƒ W d   ƒ n1 s1w   Y  qd S )Nr   ©ÚPyTime_AsSecondsDoublec                 S   s(   t | ƒt dkrt| t ƒS t| ƒt S ©Nr   )Úabsr=  r<   rr  r   r   r   Úfloat_converterŽ  s   z9TestCPyTime.test_AsSecondsDouble.<locals>.float_converterc                    rj  r   r   ©r-   rk  rt  r   r   r–   ”  rl  z2TestCPyTime.test_AsSecondsDouble.<locals>.<lambda>rä   )r-  ru  r^  Ú	NS_TO_SECrQ  r]   r‚   r<   )r   rx  rW  rY  r   rt  r   Útest_AsSecondsDouble‹  s   þÿ€ÿz TestCPyTime.test_AsSecondsDoublec                    s   t  |¡‰ ‡ ‡fdd„}|S )Nc                    s   t  | ¡ˆ  }ˆ |¡S r   )rR  ra  rb  )rE  rn   ©Zdenomr   r   r   Ú	converter   s   
z7TestCPyTime.create_decimal_converter.<locals>.converter)rR  ra  )r   Údenominatorr}  r   r|  r   Úcreate_decimal_converter  s   
z$TestCPyTime.create_decimal_converterc                    sh   ddl m} |  t¡‰‡fdd„}tjdkr&d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   rg  )rˆ  r‡  r   r   Úseconds_filter³  rû   z2TestCPyTime.test_AsTimeval.<locals>.seconds_filterro  )r-  r€  r  r;  rK   rI   r‡  rˆ  r2  r^  rz  )r   r€  r…  r‰  r   )rˆ  r‡  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   ©r‹  c                 S   s
   t | tƒS r   )r  r=  rr  r   r   r   Útimespec_converterÂ  s   
z7TestCPyTime.test_AsTimespec.<locals>.timespec_converterc                    rj  r   r   ry  rŒ  r   r   r–   Å  rl  z-TestCPyTime.test_AsTimespec.<locals>.<lambda>ro  )r-  r‹  r^  rz  r2  )r   r  r   rŒ  r   Útest_AsTimespec½  s   
ýzTestCPyTime.test_AsTimespecc                 C   ó$   ddl m} |  ||  t¡t¡ d S )Nr   )ÚPyTime_AsMilliseconds)r-  r  r^  r  r<  rz  )r   r  r   r   r   Útest_AsMillisecondsÊ  ó
   þzTestCPyTime.test_AsMillisecondsc                 C   r  )Nr   )ÚPyTime_AsMicroseconds)r-  r“  r^  r  r;  rz  )r   r“  r   r   r   Útest_AsMicrosecondsÑ  r’  zTestCPyTime.test_AsMicrosecondsN)r   r   r   rc  ÚmathÚceilr=  rT  rp  rs  r{  r  rŠ  rê   rë   r7   r-  rŽ  r‘  r”  r   r   r   r   rd  d  s    	ÿ
rd  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 r   r   rg  r   r   r   r–   å  s    z5TestOldPyTime.test_object_to_time_t.<locals>.<lambda>ro  )r-  r˜  r^  r2  r`  rb  )r   r˜  r   r   r   Útest_object_to_time_tá  s   þ
þz#TestOldPyTime.test_object_to_time_tc                    s   ‡ ‡fdd„}|S )Nc                    sh   t  | ¡\}}t|ƒ}|ˆ 9 }ˆ |¡}|dk r$|ˆ 7 }|d8 }||fS |ˆ kr0|ˆ 8 }|d7 }||fS )Nr   r   )r•  Úmodfr+   rb  )rh  Z	floatpartZintpart©Úsec_to_unitr   r   r   r}  í  s   
ýz1TestOldPyTime.create_converter.<locals>.converterr   )r   rœ  r}  r   r›  r   Úcreate_converterì  s   zTestOldPyTime.create_converterc              	   C   ó„   ddl m} | j|dd„ | jd | j||  t¡| jd tD ] \}}|  t	¡ |t
dƒ|ƒ W d   ƒ n1 s:w   Y  qd S )Nr   )Úpytime_object_to_timevalc                 S   ó   | dfS rv  r   rg  r   r   r   r–   ÿ  rl  z6TestOldPyTime.test_object_to_timeval.<locals>.<lambda>ro  rä   )r-  rŸ  r^  r2  r`  r  r‚  rQ  r]   rg   r<   )r   rŸ  rW  rY  r   r   r   Útest_object_to_timevalû  ó   þþÿ€ÿz$TestOldPyTime.test_object_to_timevalc              	   C   rž  )Nr   )Úpytime_object_to_timespecc                 S   r   rv  r   rg  r   r   r   r–     rl  z7TestOldPyTime.test_object_to_timespec.<locals>.<lambda>ro  rä   )r-  r£  r^  r2  r`  r  r=  rQ  r]   rg   r<   )r   r£  rW  rY  r   r   r   Útest_object_to_timespec  r¢  z%TestOldPyTime.test_object_to_timespecN)	r   r   r   rc  rT  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rJ|D ]}|  t	t
|ƒd	|› d¡ q8d S |D ]}|  t	t
|ƒd	|› d
¡ qLd S )Nr   ZHAVE_CLOCK_GETTIMEz is not availablec                 s   s    | ]}t |ƒV  qd S r   )r+   )rÐ   ry   r   r   r   Ú	<genexpr>+  s   € z;TestTimeWeaklinking.test_clock_functions.<locals>.<genexpr>Ú.)r?   r0   r:   r[   Úclock_settime_nsrU   )r¸   r‡   ztime.z is available)Ú	sysconfigrI   Zget_config_varsrê   ZSkipTestÚtupleÚmac_verrø   r&   r7   r   r$   )r   rª  rI   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__)2Útestr   Ztest.supportr   rR  Úenumrî   r•  rI   rK   rª  r   rF   rê   r-  ÚImportErrorr   Zget_config_varr   r­   r®   r‚  r;  r<  r=  rz  ÚIntEnumr   r   r   r   r   rQ  ZTestCaser   rì   rö   r  r  r  r  r  ZskipIfr+  rd  r—  rë   r¦  r   Úmainr   r   r   r   Ú<module>   sj    ÿ



û	    . 8uB
ÿ