
    h                     r    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dS )z;
Simple perf tests for aiosqlite and the asyncio run loop.
    N)IsolatedAsyncioTestCase   )setup_loggerz:memory:g       @c                 (     p 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 |}|                     d            d {V  d}t          j                    }	 |dz  }t          j                    |z
  t          k     }	 |r|                     |           d {V  n|                                 d {V  n7n5# t          $ r Y n*t
          $ r}t          d|            Y d }~d S d }~ww xY wt          j                    |z
  }||ft          	<   d S )Nr   Tr   zexception occurred: )asendtimeTARGETacloseStopAsyncIteration	ExceptionprintRESULTS)
argskwargsgencountbeforevalueedurationfnnames
           T/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/aiosqlite/tests/perf.pywrapperztimed.<locals>.wrapper!   sQ     b$!&!!iioo	QJEIKK&(61E ))E************,,&&&&&&& +
 &      0Q00111	" 9;;')s   "8B 
C(	C1C		C)__name__)r   r   r   s   `` r   timedr      s7     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dS )PerfTestc                 T    t          dt          dd           t                       d S )Nz Running perf tests for at least z.1fz	s each...)r   r
   r   )clss    r   
setUpClasszPerfTest.setUpClassA   s,    FFFFFGGGr   c                     t          dddddd           t          t                    D ]L}t          |         \  }}||z  }|                    dd          }t          |dd	|d
d|dd|dd           Md S )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    G;GGG6GGGHHH7OO 	P 	PD%dmOE88#D<<,,DTNNNNNNXNNNNNNNOOOO		P 	Pr   c                   K   	 d W V  t          j        t                    4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y   JN)	aiosqliteconnectTEST_DB)selfs    r   test_connection_memoryzPerfTest.test_connection_memoryO   s      	EEEE (11                                  	s   <
A	Ac                *  K   t          j        d          5 }|j        }|                                 t	          j        |          4 d {V }|                    d           d {V  |                    d           d {V  |                                 d {V  d d d           d {V  n# 1 d {V swxY w Y   	 d W V  t	          j        |          4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y   E# 1 swxY w Y   d S )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   sz     (666 	"7DHHJJJ (.. " " " " " " ""jjN         jj!GHHHHHHHHHiikk!!!!!!!" " " " " " " " " " " " " " " " " " " " " " " " " " "$,T22                                  	 	 	 	 	 	 	 	 	 	sZ   6DAB1D1
B;	;D>B;	?#D"C6$D6
D 	 DD 	DDDc                  K   t          j        t                    4 d {V }|                    d           d {V  |                    d           d {V  |                                 d {V  	 d W V  |                    d          4 d {V }|                                 d {V  d d d           d {V  n# 1 d {V swxY w Y   _# 1 d {V swxY w Y   d S )Nr7   r8   T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XXXXXX**CDDDDDDDDD))++,::&BCC , , , , , , ,v //+++++++++, , , , , , , , , , , , , , , , , , , , , , , , , , ,,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s6   A2CC/C
C	CC	C
C Cc                N  K   t          j        t                    4 d {V }|                    d           d {V  |                                 d {V  	 d W V  |                    d           d {V  |                                 d {V  ;# 1 d {V swxY w Y   d S )Nr7   Tz)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XXXXXX))++"jj!LMMMMMMMMMiikk!!!!!!!"		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"   A2B
B!Bc                  K   t          j        t                    4 d {V }|                    d           d {V  |                                 d {V  	 d W V  |                    d           d {V }|                    d           d {V  |                                 d {V  |                                 d {V  p# 1 d {V swxY w Y   d S )Nr7   Tinsert into perf (k) values (1)rC   rD   rF   s      r   test_insert_idszPerfTest.test_insert_ids   sq     $W-- 		" 		" 		" 		" 		" 		" 		"**WXXXXXXXXX))++"!zz*KLLLLLLLLnn%ABBBBBBBBBoo'''''''''iikk!!!!!!!"			" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		"s   B'C		
CCc                N  K   t          j        t                    4 d {V }|                    d           d {V  |                                 d {V  	 d W V  |                    d           d {V  |                                 d {V  ;# 1 d {V swxY w Y   d S )Nr7   TrN   )r0   r1   r2   r<   r=   execute_insertrJ   s     r   test_insert_macro_idszPerfTest.test_insert_macro_ids   s-     $W-- 	" 	" 	" 	" 	" 	" 	"**WXXXXXXXXX))++"''(IJJJJJJJJJiikk!!!!!!!"		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"rL   c                  K   t          j        t                    4 d {V }|                    d           d {V  t	          d          D ]!}|                    d|fz             d {V  "|                                 d {V  	 d W V  |                    d           d {V }t          |                                 d {V           dk    sJ N# 1 d {V swxY w Y   d S Nr7   d   z insert into perf (k) values (%d)Tz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XXXXXX3ZZ L Ljj!Cqd!JKKKKKKKKKK))++;!zz*ABBBBBBBB!2!222222233s::::;		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		;s   B6C
C"%C"c                  K   t          j        t                    4 d {V }|                    d           d {V  t	          d          D ]!}|                    d|fz             d {V  "|                                 d {V  	 d W V  t          |                    d           d {V           dk    sJ 4# 1 d {V swxY w Y   d S rT   )r0   r1   r2   r<   rV   r=   rW   execute_fetchall)r3   r@   rY   s      r   test_select_macrozPerfTest.test_select_macro   s     $W-- 	V 	V 	V 	V 	V 	V 	V**WXXXXXXXXX3ZZ L Ljj!Cqd!JKKKKKKKKKK))++V!4!45L!M!MMMMMMMNNRUUUUUV	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	Vs   BB>>
CCc                 8  K   t          j        t                    4 d {V                     d           d {V  t	          d          D ]Z}|dz  }                    dg d t	          ||dz             D                        d {V                                   d {V  [dt          ffd}d t	          d	d
          D             D ]$} t          |d|           |           d {V  %	 d d d           d {V  d S # 1 d {V swxY w Y   d S )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, ?)c                 *    g | ]}|t           j        fS  )stringascii_lowercase.0rY   s     r   
<listcomp>z6PerfTest.test_iterable_cursor_perf.<locals>.<listcomp>   s0        !  67  r   
chunk_sizec                   K   	                      d          4 d {V }| |_        |2 3 d {V }d W V  6 	 d d d           d {V  n# 1 d {V swxY w Y   X)NTzSELECT * FROM ic_perf)r<   iter_chunk_size)rg   rG   _r@   s      r   	test_perfz5PerfTest.test_iterable_cursor_perf.<locals>.test_perf   s     "!zz*ABB " " " " " " "f1;.'- " " " " " " "!!EEEEE (.v" " " " " " " " " " " " " " " " " " " " " " " " " " ""s   
A7A
AAc                     g | ]}d |z  S )   ra   rd   s     r   rf   z6PerfTest.test_iterable_cursor_perf.<locals>.<listcomp>   s    :::q!t:::r         ziterable_cursor @ )	r0   r1   r2   r<   rV   executemanyr=   intr   )r3   batchr_startrk   rg   r@   s        @r   test_iterable_cursor_perfz"PerfTest.test_iterable_cursor_perf   sn     $W-- 	V 	V 	V 	V 	V 	V 	V**Z         s " "$,nnI %*7GdN%C%C           iikk!!!!!!!!"C " " " " " " ;:U1b\\::: V V
IeI'HJ'H'HII*UUUUUUUUUUV3	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	Vs   CD		
DDN)r   
__module____qualname__classmethodr#   r-   r   r4   rA   rH   rK   rO   rR   rZ   r]   rt   ra   r   r   r    r    @   s:         [ P P [P   U   U" 	, 	, U	, " " U" 
" 
" U
" " " U" 
; 
; U
; 	V 	V U	VV V V V Vr   r    r/   )__doc__rb   r9   r	   unittestr   TestCaser0   smoker   r2   r
   r   r   r    ra   r   r   <module>r|      s        8 8 8 8 8 8          
	
( ( ( (VKV KV KV KV KVx KV KV KV KV KVr   