
    6iQ                     r    d Z ddl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
           _/root/.openclaw/workspace/visionaryfx/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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.setUpClassB   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.tearDownClassG   s    ;s##:6#,GH7O 	PD%dmOE88#D<<,DT#Jac{"Xe,<CU|2NO		P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_memoryP   sQ      ((1        s>   $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_fileW   s    ((6 	"77DHHJ ((. " ""jjN   jj!GHHHiik!!" " $,,T2    " I!" " " "    	 	s   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_atomicsi   s     $$W- 	, 	,**WXXX**CDDD))+::&BC , ,v //+++, , 	,XD,+, , , ,	, 	, 	,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   )insert into perf (k) values (1), (2), (3))r0   r1   r2   r<   r=   r3   r@   s     r   test_insertszPerfTest.test_insertsu   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   d }t        j                  t              4 d {   }|j                  d       d {    |j	                  |       d {    |j                          d {    	 d  |j                  d       d {    |j                          d {    77 7 o7 X7 B7 %7 # 1 d {  7  sw Y   y xY ww)Nc                 h    | t         j                  k(  rt         j                  S t         j                  S r/   )sqlite3SQLITE_DROP_TABLESQLITE_DENY	SQLITE_OK)action_codearg1arg2db_nametrigger_names        r   
deny_dropsz4PerfTest.test_inserts_authorized.<locals>.deny_drops   s(    g777***$$$r   r7   rJ   )r0   r1   r2   r<   set_authorizerr=   )r3   rY   r@   s      r   test_inserts_authorizedz PerfTest.test_inserts_authorized   s     	%
 $$W- 	" 	"**WXXX##J///))+jj!LMMMiik!! 	"X/ N!	" 	" 	"s   !CB*CB6B,B6B.B6-B0.B6B2B6$B4%B6*C,B6.B60B62B64B66C<B?=CC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   r]   )r0   r1   r2   r<   r=   execute_insertrK   s     r   test_insert_macro_idszPerfTest.test_insert_macro_ids   s     $$W- 	" 	"**WXXX))+''(IJJJiik!! 		"X K!	" 	" 	"rM   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 Ljj!Cqd!JKKKL))+!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rc   )r0   r1   r2   r<   re   r=   rf   execute_fetchall)r3   r@   rh   s      r   test_select_macrozPerfTest.test_select_macro   s     $$W- 	V 	V**WXXX3Z Ljj!Cqd!JKKKL))+!4!45L!MMNRUUUU 	VXK N	V 	V 	V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)ro   rG   _r@   s      r   	test_perfz5PerfTest.test_iterable_cursor_perf.<locals>.test_perf   sj     !zz*AB " "f1;.'- " "!!""v" " " " " s[   A$7A$
A;9;AA$;AA$A
A$A AA A$         ziterable_cursor @ )r0   r1   r2   r<   re   executemanystringascii_lowercaser=   intr   )r3   batchr_startrh   rs   ro   r@   s         @r   test_iterable_cursor_perfz"PerfTest.test_iterable_cursor_perf   s\    $$W- 	V 	V**Z   s "$,nnI &+7GdN%C !  6 67   iik!!""C " .31b\:q!t: V
IeI);J<'HI*UUUV3	V 	V 	V " ;U5	V 	V 	V 	V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   rL   r[   r^   ra   ri   rl   r}    r   r   r    r    A   s      P P    " 	, 	, " " " "  
" 
" " " 
; 
; 	V 	VVr   r    r/   )__doc__rP   rx   r9   r	   unittestr   TestCaser0   smoker   r2   r
   r   r   r    r   r   r   <module>r      sF        8  
	
(V\Vx \Vr   