
    g                     j    d Z ddlZddlZddlZddlmZ ddlZddlm	Z	 dZ
dZi ZddZ G d	 d
e      Zy)z;
Simple perf tests for aiosqlite and the asyncio run loop.
    N)IsolatedAsyncioTestCase   )setup_loggerz:memory:g       @c                 6     xs  j                    fd}|S )ab  
    Decorator for perf testing a block of async code.

    Expects the wrapped function to return an async generator.
    The generator should do setup, then yield when ready to start perf testing.
    The decorator will then pump the generator repeatedly until the target
    time has been reached, then close the generator and print perf results.
    c                    K    | i |}|j                  d        d {    d}t        j                         }	 |dz  }t        j                         |z
  t        k  }	 |r|j                  |       d {    n|j                          d {    n	 [t        j                         |z
  }||ft        	<   y 7 7 E7 .# t        $ r Y 4t
        $ r}t        d|        Y d }~y d }~ww xY ww)Nr   r   zexception occurred: )asendtimeTARGETacloseStopAsyncIteration	ExceptionprintRESULTS)
argskwargsgencountbeforevalueedurationfnnames
           I/var/www/openai/venv/lib/python3.12/site-packages/aiosqlite/tests/perf.pywrapperztimed.<locals>.wrapper!   s     $!&!iioQJEIIK&(61E))E*****,&& + " 99;')/ 	 +& &  ,QC01si   C.B:>C. C  6B<7C  B>C  'C.<C  >C   	C+	C.C+C&!C.&C++C.)__name__)r   r   r   s   `` r   timedr      s     2;;D*8 N    c                       e Zd Zed        Zed        Zed        Zed        Zed        Z	ed        Z
ed        Zed        Zed	        Zed
        Zd Zy)PerfTestc                 @    t        dt        dd       t                y )Nz Running perf tests for at least z.1fz	s each...)r   r
   r   )clss    r   
setUpClasszPerfTest.setUpClassA   s    0IFGr   c                     t        dddddd       t        t              D ]@  }t        |   \  }}||z  }|j                  dd      }t        |dd	|d
d|dd|dd       B y )N
z	Perf Testz<25z Iterations  Duration  Ratez>11test_  z>10z  z>7.1fzs  z>9.1fz/s)r   sortedr   replace)r"   r   r   r   rates        r   tearDownClasszPerfTest.tearDownClassF   s|    ;s##:6#,GH7OD%dmOE88#D<<,DT#Jac{"Xe,<CU|2NO	 $r   c                   K   	 d  t        j                  t              4 d {    	 d d d       d {    97 7 # 1 d {  7  sw Y   xY wwN)	aiosqliteconnectTEST_DB)selfs    r   test_connection_memoryzPerfTest.test_connection_memoryO   s>      ((11 21 11111s>   $A=AAA?AAAA
AAc                T  K   t        j                  d      5 }|j                  }|j                          t	        j
                  |      4 d {   }|j                  d       d {    |j                  d       d {    |j                          d {    d d d       d {    	 d  t	        j
                  |      4 d {    	 d d d       d {    57 7 }7 f7 P7 B# 1 d {  7  sw Y   RxY w7 57 &# 1 d {  7  sw Y   6xY w# 1 sw Y   y xY ww)NF)delete8create table perf (i integer primary key asc, k integer)$insert into perf (k) values (2), (3))tempfileNamedTemporaryFiler   closer0   r1   executecommit)r3   tfpathdbs       r   test_connection_filezPerfTest.test_connection_fileV   s     ((6"77DHHJ ((.."jjN   jj!GHHHiik!! /. $,,T22 32  / I! /... 32222 76s   D(6DC$DC.(C&)C.C(C.C*C.D)C,*#DDDDDDD&C.(C.*C.,D.D 	4C75D 	<DDD	DD	DD%!D(c                  K   t        j                  t              4 d {   }|j                  d       d {    |j                  d       d {    |j	                          d {    	 d  |j                  d      4 d {   }|j                          d {    d d d       d {    H7 7 7 i7 S7 57 7 # 1 d {  7  sw Y   !xY w# 1 d {  7  sw Y   y xY ww)Nr7   r8   select last_insert_rowid()r0   r1   r2   r<   r=   fetchoner3   r@   cursors      r   test_atomicszPerfTest.test_atomicsh   s     $$W--**WXXX**CDDD))+::&BCCv //+++ DC  .XD D+ DCCC .--s   C0B8C0CB:CB<C*B>+C
C CC"C#C'C2C3C8C0:C<C>C CCCC	CC	CC-!C$"C-)C0c                ^  K   t        j                  t              4 d {   }|j                  d       d {    |j	                          d {    	 d  |j                  d       d {    |j	                          d {    77 m7 V7 @7 #7 # 1 d {  7  sw Y   y xY ww)Nr7   z)insert into perf (k) values (1), (2), (3))r0   r1   r2   r<   r=   r3   r@   s     r   test_insertszPerfTest.test_insertst   s     $$W--**WXXX))+jj!LMMMiik!! 	 .X N! .--x   B-BB-BBBBB0B1BB	BB-BBBBB*B!B*&B-c                  K   t        j                  t              4 d {   }|j                  d       d {    |j	                          d {    	 d  |j                  d       d {   }|j                  d       d {    |j                          d {    |j	                          d {    h7 7 7 q7 T7 =7 '7 # 1 d {  7  sw Y   y xY ww)Nr7   insert into perf (k) values (1)rC   rD   rF   s      r   test_insert_idszPerfTest.test_insert_ids   s     $$W--**WXXX))+!zz*KLLnn%ABBBoo'''iik!! 	 .X MB'! .--s   C"B?C"CCCCC0C1C	C
C!C	"C9C:C?C"CCCC	CCCCCC"c                ^  K   t        j                  t              4 d {   }|j                  d       d {    |j	                          d {    	 d  |j                  d       d {    |j	                          d {    77 m7 V7 @7 #7 # 1 d {  7  sw Y   y xY ww)Nr7   rN   )r0   r1   r2   r<   r=   execute_insertrJ   s     r   test_insert_macro_idszPerfTest.test_insert_macro_ids   s     $$W--**WXXX))+''(IJJJiik!! 	 .X K! .--rL   c                  K   t        j                  t              4 d {   }|j                  d       d {    t	        d      D ]  }|j                  d|fz         d {    ! |j                          d {    	 d  |j                  d       d {   }t        |j                          d {         dk(  sJ E7 7 7 h7 P7 37 # 1 d {  7  sw Y   y xY wwNr7   d   z insert into perf (k) values (%d)zselect i, k from perf)r0   r1   r2   r<   ranger=   lenfetchall)r3   r@   irG   s       r   test_selectzPerfTest.test_select   s     $$W--**WXXX3Zjj!Cqd!JKKK  ))+!zz*ABB!223s:::  .XK C2 .--s   C*C	C*CC*C$C%C>C?CCC:C
;C	C*CCCCCC'CC'#C*c                  K   t        j                  t              4 d {   }|j                  d       d {    t	        d      D ]  }|j                  d|fz         d {    ! |j                          d {    	 d  t        |j                  d       d {         dk(  sJ -7 7 y7 P7 87 # 1 d {  7  sw Y   y xY wwrT   )r0   r1   r2   r<   rV   r=   rW   execute_fetchall)r3   r@   rY   s      r   test_select_macrozPerfTest.test_select_macro   s     $$W--**WXXX3Zjj!Cqd!JKKK  ))+!4!45L!MMNRUUUU  .XK N .--sx   CB1CB;B3*B;$B5%B;>B7?#B;"B9
#B;1C3B;5B;7B;9B;;CCC	Cc                 x  K   t        j                  t              4 d {   j                  d       d {    t	        d      D ]f  }|dz  }j                  dg t	        ||dz         D cg c]  }|t        j                  f c}       d {    j                          d {    h dt        ffd}t	        dd      D cg c]  }d	|z  	 c}D ]  } t        |d
|       |       d {    ! d d d       d {    y 7 7 c c}w 7 7 mc c}w 7 )7 # 1 d {  7  sw Y   y xY ww)Nz]create table ic_perf (i integer primary key asc, k integer, a integer, b integer, c char(16))   i   z3insert into ic_perf (k, a, b, c) values(?, 1, 2, ?)
chunk_sizec                   K   	 j                  d      4 d {   }| |_        |2 3 d {   }d  7 7 6 d d d       d {  7   n# 1 d {  7  sw Y   nxY w_w)NzSELECT * FROM ic_perf)r<   iter_chunk_size)r`   rG   _r@   s      r   	test_perfz5PerfTest.test_iterable_cursor_perf.<locals>.test_perf   sX     !zz*ABBf1;.'- "!!  C"v  CBBBB s[   A$7A$
A;9;AA$;AA$A
A$A AA A$         ziterable_cursor @ )r0   r1   r2   r<   rV   executemanystringascii_lowercaser=   intr   )r3   batchr_startrY   rd   r`   r@   s         @r   test_iterable_cursor_perfz"PerfTest.test_iterable_cursor_perf   s?    $$W--**Z   s$,nnI &+7GdN%C%C  6 67%C   iik!! $"C " .31b\:\q!t\:
IeI);J<'HI*UUU ;3 .-- " ;U5 .---s   D:DD:D%D5D%0D	D%DD%,D- D%DD%7D!8D%>D:	D#
D:D%D%D%D%#D:%D7+D.,D73D:N)r   
__module____qualname__classmethodr#   r-   r   r4   rA   rH   rK   rO   rR   rZ   r]   rn    r   r   r    r    @   s      P P    " 	, 	, " " 
" 
" " " 
; 
; 	V 	VVr   r    r/   )__doc__ri   r9   r	   unittestr   TestCaser0   smoker   r2   r
   r   r   r    rr   r   r   <module>rw      sC       8  
	
(VKVx KVr   