
    i                     l    S r SSKrSSKrSSKrSSKJr  SSKrSSKJ	r	  Sr
Sr0 rSS jr " S	 S
\5      rg)z;
Simple perf tests for aiosqlite and the asyncio run loop.
    N)IsolatedAsyncioTestCase   )setup_loggerz:memory:g       @c                 B   ^ ^ T=(       d    T R                   mU U4S jnU$ )aJ  
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                    >#    T" U 0 UD6nUR                  S 5      I S h  vN   Sn[        R                  " 5       n US-  n[        R                  " 5       U-
  [        :  n U(       a  UR                  U5      I S h  vN   OUR                  5       I S h  vN   OMa  [        R                  " 5       U-
  nX74[        T	'   g  N NE N.! [         a     M6  [
         a  n[        SU 35         S nAg S nAff = f7f)Nr   r   zexception occurred: )asendtimeTARGETacloseStopAsyncIteration	ExceptionprintRESULTS)
argskwargsgencountbeforevalueedurationfnnames
           N/home/james-whalen/.local/lib/python3.13/site-packages/aiosqlite/tests/perf.pywrappertimed.<locals>.wrapper!   s     $!&!iioQJEIIK&(61E))E*****,&& " 99;')/ 	 +& &  ,QC01sv   C8CA C8"C =C>C C8C CC 'C8C C 
C5C8	C5C0+C80C55C8)__name__)r   r   r   s   `` r   timedr      s     2;;D*8 N    c                       \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S 5       r\S	 5       r\S
 5       r\S 5       rS rSrg)PerfTest@   c                 @    [        S[        S S35        [        5         g )Nz Running perf tests for at least z.1fz	s each...)r   r
   r   )clss    r   
setUpClassPerfTest.setUpClassA   s    0IFGr   c                     [        SSS SSS 35        [        [        5       H?  n[        U   u  p#X#-  nUR                  SS5      n[        US S	US
 SUS SUS S35        MA     g )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   tearDownClassPerfTest.tearDownClassF   sx    ;s##:6#,GH7OD%dmOE#D<<,DT#Jac{"Xe,<CU|2NO	 $r   c                   #     S 7v   [         R                  " [        5       IS h  vN    S S S 5      IS h  vN   M;   N N! , IS h  vN  (       d  f       N= f7fN)	aiosqliteconnectTEST_DB)selfs    r   test_connection_memoryPerfTest.test_connection_memoryO   s8      ((11 21 1111s@   %A?AAAAAAA	A
AAc                t  #    [         R                  " SS9 nUR                  nUR                  5         [        R
                  " U5       IS h  vN nUR                  S5      I S h  vN   UR                  S5      I S h  vN   UR                  5       I S h  vN   S S S 5      IS h  vN    S 7v   [        R
                  " U5       IS h  vN    S S S 5      IS h  vN   M7   N N Nh NR ND! , IS h  vN  (       d  f       NY= f N; N,! , IS h  vN  (       d  f       NA= f! , (       d  f       g = f7f)NF)delete8create table perf (i integer primary key asc, k integer)$insert into perf (k) values (2), (3))tempfileNamedTemporaryFiler   closer4   r5   executecommit)r7   tfpathdbs       r   test_connection_file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 76s   D87D'C%D'C/'C'(C/ C)C/C+C/D'(C-)$D'D	D'DD'DD''C/)C/+C/-D'/D	5C86D	D'D'D$	DD$	 D''
D51D8c                  #    [         R                  " [        5       IS h  vN nUR                  S5      I S h  vN   UR                  S5      I S h  vN   UR	                  5       I S h  vN    S 7v   UR                  S5       IS h  vN nUR                  5       I S h  vN   S S S 5      IS h  vN   MI   N N Nj NT N6 N  N! , IS h  vN  (       d  f       N'= f! , IS h  vN  (       d  f       g = f7f)Nr<   r=   select last_insert_rowid()r4   r5   r6   rA   rB   fetchoner7   rE   cursors      r   test_atomics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   C<B:C<C"B<C"B>C"+C ,C"CC"C#C$C(C"3C4C":C<<C">C" C"C"CC"C	CC	C""C9(C+)C95C<c                l  #    [         R                  " [        5       IS h  vN nUR                  S5      I S h  vN   UR	                  5       I S h  vN    S 7v   UR                  S5      I S h  vN   UR	                  5       I S h  vN   M8   Nn NW NA N$ N! , IS h  vN  (       d  f       g = f7f)Nr<   z)insert into perf (k) values (1), (2), (3))r4   r5   r6   rA   rB   r7   rE   s     r   test_insertsPerfTest.test_insertst   s     $$W--**WXXX))+jj!LMMMiik!! 	 .X N! .--x   B4BB4BBBBB1B2B	B
BB4BBBBB1 B#!B1-B4c                  #    [         R                  " [        5       IS h  vN nUR                  S5      I S h  vN   UR	                  5       I S h  vN    S 7v   UR                  S5      I S h  vN nUR                  S5      I S h  vN   UR                  5       I S h  vN   UR	                  5       I S h  vN   Mi   N N Nr NU N> N( N! , IS h  vN  (       d  f       g = f7f)Nr<   insert into perf (k) values (1)rI   rJ   rL   s      r   test_insert_ids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)CC)CCCCC1C2C
C	C"C#C:C;CC)CCC	CCCC&CC&"C)c                l  #    [         R                  " [        5       IS h  vN nUR                  S5      I S h  vN   UR	                  5       I S h  vN    S 7v   UR                  S5      I S h  vN   UR	                  5       I S h  vN   M8   Nn NW NA N$ N! , IS h  vN  (       d  f       g = f7f)Nr<   rV   )r4   r5   r6   rA   rB   execute_insertrQ   s     r   test_insert_macro_idsPerfTest.test_insert_macro_ids   s     $$W--**WXXX))+''(IJJJiik!! 	 .X K! .--rT   c                  #    [         R                  " [        5       IS h  vN nUR                  S5      I S h  vN   [	        S5       H   nUR                  SU4-  5      I S h  vN   M"     UR                  5       I S h  vN    S 7v   UR                  S5      I S h  vN n[        UR                  5       I S h  vN 5      S:X  d   eMG   N N Nl NR N5 N! , IS h  vN  (       d  f       g = f7fNr<   d   z insert into perf (k) values (%d)zselect i, k from perf)r4   r5   r6   rA   rangerB   lenfetchall)r7   rE   irM   s       r   test_select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   C4CC4CC*C%C&CCC C!C=C
>CC4CCCCCC1 C#!C1-C4c                  #    [         R                  " [        5       IS h  vN nUR                  S5      I S h  vN   [	        S5       H   nUR                  SU4-  5      I S h  vN   M"     UR                  5       I S h  vN    S 7v   [        UR                  S5      I S h  vN 5      S:X  d   eM/   N N} NT N: N! , IS h  vN  (       d  f       g = f7fr^   )r4   r5   r6   rA   r`   rB   ra   execute_fetchall)r7   rE   rc   s      r   test_select_macro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B6CC B8*C %B:&C B<#C %B>
&C 6C8C :C <C >C  CC	CCc                   ^#    [         R                  " [        5       IS h  vN mTR                  S5      I S h  vN   [	        S5       Hi  nUS-  nTR                  S/ [	        X"S-   5       Vs/ s H  nU[        R                  4PM     snQ5      I S h  vN   TR                  5       I S h  vN   Mk     S[        4U4S jjn[	        SS5       Vs/ s H  nS	U-  PM
     sn H   n[        US
U 35      " U5      I S h  vN   M"     S S S 5      IS h  vN   g  N Ns  snf  N Nvs  snf  N+ N! , IS h  vN  (       d  f       g = f7f)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                   >#     TR                  S5       IS h  vN nXl        U  S h  vN nS 7v   M   N N
 S S S 5      IS h  vN    O! , IS h  vN  (       d  f       O= fMe  7f)NzSELECT * FROM ic_perf)rA   iter_chunk_size)rl   rM   _rE   s      r   	test_perf5PerfTest.test_iterable_cursor_perf.<locals>.test_perf   sV     !zz*ABBf1;.'- "!!  C"v  CBBBBB s[   A*7A*	A;9;AA*;AA*A
A*A%AA%!	A*         ziterable_cursor @ )r4   r5   r6   rA   r`   executemanystringascii_lowercaserB   intr   )r7   batchr_startrc   rp   rl   rE   s         @r   test_iterable_cursor_perf"PerfTest.test_iterable_cursor_perf   s6    $$W--**Z   s$,nnI &+7dN%C%C  6 67%C   iik!! $"C " .31b\:\q!t\:
I);J<'HI*UUU ;3 .-- " ;U5 .---s   EDED1D4D10DD1D$D1/D&0$D1D(#D1D-D1
ED/ED1D1&D1(D1/E1E7D:8EE N)r   
__module____qualname____firstlineno__classmethodr%   r0   r   r8   rF   rN   rR   rW   r[   rd   rh   r{   __static_attributes__r}   r   r   r!   r!   @   s      P P    " 	, 	, " " 
" 
" " " 
; 
; 	V 	VVr   r!   r3   )__doc__rv   r>   r	   unittestr   TestCaser4   smoker   r6   r
   r   r   r!   r}   r   r   <module>r      sC       8  
	
(VKVx KVr   