;crdZddlZddlZddlZddlZddlmZdZdZiZ d dZ Gdd ejZ y) z; Simple perf tests for aiosqlite and the asyncio run loop. N) setup_loggerz:memory:g@c6xs jfd}|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. cK|i|}|jdd{d}tj} |dz }tj|z tk} |r|j|d{n|jd{n [tj|z }||ft <y77E7.#t$rY4t $r}t d|Yd}~yd}~wwxYww)Nrrzexception occurred: )asendtimeTARGETacloseStopAsyncIteration ExceptionprintRESULTS) argskwargsgencountbeforevalueedurationfnnames 6/usr/lib/python3/dist-packages/aiosqlite/tests/perf.pywrapperztimed..wrapper s$!&!iio QJEIIK&(61E ))E*****,&&+ "99;') / +&&  ,QC01 siC.B:>C. C6B<7CB>C'C.<C>C C+ C. C+C&!C.&C++C.)__name__)rrrs`` rtimedrs  2;;D*8 NceZdZedZedZedZedZedZ edZ edZ edZ d Z y ) PerfTestc@tdtddty)Nz Running perf tests for at least z.1fz s each...)r r r)clss r setUpClasszPerfTest.setUpClass@s 0 IFGrc tddddddttD]@}t|\}}||z }|jdd}t|dd |d d |d d |ddBy)N z Perf Testz<25z Iterations Duration Ratez>11test_ z>10z z>7.1fzs z>9.1fz/s)r sortedrreplace)r!rrrrates r tearDownClasszPerfTest.tearDownClassEs ;s##:6#,GH7O PD%dmOE88#D<<,D T#Jac{"Xe,+C C CC"C#C' C2C3C8C0:C<C>CCCCC C C CC-!C$ "C-)C0c^Ktjt4d{}|jdd{|j d{ d|jdd{|j d{77m7V7@7#7 #1d{7swYyxYww)Nr.z)insert into perf (k) values (1), (2), (3))r1r2r3r4r5r7r8s r test_insertszPerfTest.test_insertsZs$$W- " "**WX X X))+  jj!LMMMiik!!  " X N! " " "xB-BB-BBBBB0B1BB BB-BBBBB*B! B*&B-cKtjt4d{}|jdd{|j d{ d|jdd{}|jdd{|j d{|j d{h777q7T7=7'7#1d{7swYyxYww)Nr.insert into perf (k) values (1)r/r0)r7r8r9s rtest_insert_idszPerfTest.test_insert_idses$$W- " "**WX X X))+  !zz*KLLnn%ABBBoo'''iik!!  " X MB'! " " "sC"B?C"C CC CC 0C1C  C C !C "C 9C :C ?C"C C C C  C  C  CC CC"c^Ktjt4d{}|jdd{|j d{ d|j dd{|j d{77m7V7@7#7 #1d{7swYyxYww)Nr.rA)r1r2r3r4r5execute_insertr=s rtest_insert_macro_idszPerfTest.test_insert_macro_idsrs$$W- " "**WX X X))+  ''(IJJJiik!!  " X K! " " "r?cKtjt4d{}|jdd{t dD]}|jd|fzd{!|j d{ d|jdd{}t |jd{dk(sJE777h7P737#1d{7swYyxYwwNr.dz insert into perf (k) values (%d)zselect i, k from perf)r1r2r3r4ranger5lenfetchall)r7r8ir9s r test_selectzPerfTest.test_select}s$$W- ; ;**WX X X3Z Ljj!Cqd!JKKK L))+  !zz*ABB!223s::: ; XK C2 ; ; ;sC*C C*CC *C$C %C>C?CCC:C ;C C* C CCCCC'C C'#C*cKtjt4d{}|jdd{t dD]}|jd|fzd{!|j d{ dt |jdd{dk(sJ-77y7P787#1d{7swYyxYwwrG)r1r2r3r4rIr5rJexecute_fetchall)r7r8rLs rtest_select_macrozPerfTest.test_select_macros$$W- V V**WX X X3Z Ljj!Cqd!JKKK L))+  !4!45L!MMNRUUUU  V XK N V V VsxCB1CB;B3*B;$B5%B;>B7?#B;"B9 #B;1C3B;5B;7B;9B;;C C C  Cc xKtjt4d{jdd{t dD]f}|dz}j dgt ||dzDcgc]}|t jfc}d{jd{hdtffd }t ddDcgc]}d |z c}D]}t|d ||d{!dddd{y77cc}w77mcc}w7)7#1d{7swYyxYww) Nz]create table ic_perf (i integer primary key asc, k integer, a integer, b integer, c char(16))iz3insert into ic_perf (k, a, b, c) values(?, 1, 2, ?) chunk_sizecK jd4d{}||_|23d{}d77 6dddd{7n#1d{7swYnxYw_w)NzSELECT * FROM ic_perf)r4iter_chunk_size)rSr9_r8s r test_perfz5PerfTest.test_iterable_cursor_perf..test_perfsj!zz*AB""f1;.'-""!!""v"""""s[A$7A$ A;9;AA$;A A$A A$A A A A$ ziterable_cursor @ ) r1r2r3r4rI executemanystringascii_lowercaser5intr)r7batchr_startrLrWrSr8s @rtest_iterable_cursor_perfz"PerfTest.test_iterable_cursor_perfs\$$W- V V**Z  s "$,nnI&+7GdN%C ! 6 67iik!! " "C "05Q| D: D# D:D%D%D%D%#D:%D7+D. ,D73D:N)r __module__ __qualname__ classmethodr"r,rr;r>rBrErMrPrarrrr?sPP  6  6 " "  "  " " "  ;  ;  V  VVrr)N) __doc__r\r aiounittestr1smokerr3r rr AsyncTestCaserrerrrjsF    (VrV{((rVr