o
    HXh                     @   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    eAl   @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 )Ng333333?)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)id   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`siPe)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tgZb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皙?{Gz?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 )N90  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-123456i2i.ir   )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                   @   sV   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     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  qP|rndD ]}d|  }|| |f q^d	t t }|| |f |S )
Nr   gMbP?)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  s4   

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   rT  r   r2  rF  rZ  r^  r`  rb  r   r   r   r   r+    s    4
.

r+  c                   @   sn   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    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   )rg  rndrd  r   r   r   r      z.TestCPyTime.test_FromSeconds.<locals>.<lambda>c                 S      | t  S r   r=  rf  r   r   r   r   s  rk  rN  r   )r-  re  r^  rQ  r]   r   r<   )r   rh  rW  rY  r   rd  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   rl  r   rm  rf  r   r   r   r     rk  z4TestCPyTime.test_FromSecondsObject.<locals>.<lambda>c                    s     | t S r   )rb  r=  r-   r   r   r   r     s    r   )r-  rp  r^  r`  rQ  r]   rg   r<   )r   rp  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<   rq  r   r   r   float_converter  s   z9TestCPyTime.test_AsSecondsDouble.<locals>.float_converterc                    ri  r   r   r-   rj  rs  r   r   r     rk  z2TestCPyTime.test_AsSecondsDouble.<locals>.<lambda>r   )r-  rt  r^  	NS_TO_SECrQ  r]   r   r<   )r   rw  rW  rY  r   rs  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   rf  )r  r  r   r   seconds_filter  r   z2TestCPyTime.test_AsTimeval.<locals>.seconds_filterrn  )r-  r  r~  r;  rK   rI   r  r  r2  r^  ry  )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=  rq  r   r   r   timespec_converter  s   
z7TestCPyTime.test_AsTimespec.<locals>.timespec_converterc                    ri  r   r   rx  r  r   r   r     rk  z-TestCPyTime.test_AsTimespec.<locals>.<lambda>rn  )r-  r  r^  ry  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<  ry  )r   r  r   r   r   test_AsMilliseconds  
   zTestCPyTime.test_AsMillisecondsc                 C   r  )Nr   )PyTime_AsMicroseconds)r-  r  r^  r~  r;  ry  )r   r  r   r   r   test_AsMicroseconds  r  zTestCPyTime.test_AsMicrosecondsN)r   r   r   mathceilr=  rT  ro  rr  rz  r~  r  r   r   r7   r-  r  r  r  r   r   r   r   rc  d  s    	
rc  c                   @   s2   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   rf  r   r   r   r     s    z5TestOldPyTime.test_object_to_time_t.<locals>.<lambda>rn  )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  )rg  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 ru  r   rf  r   r   r   r     rk  z6TestOldPyTime.test_object_to_timeval.<locals>.<lambda>rn  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  ru  r   rf  r   r   r   r     rk  z7TestOldPyTime.test_object_to_timespec.<locals>.<lambda>rn  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   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=  ry  IntEnumr   r   r   r   r   rQ  ZTestCaser   r   r   r  r  r  r  r  ZskipIfr+  rc  r  r   r  r   mainr   r   r   r   <module>   sj    



	    . 8uB
