o VEV45@sddlZddlZddlZddlZddlmZddlZddlmZddlmZdZ dde ddDZ d Z d d Z dd d ZddZGdddejZdS)N)futures)test)_utilsg?cCsg|]}d|dqS)g{Gz?gY@).0xrr;/usr/lib/python3/dist-packages/fasteners/tests/test_lock.py $r i,cCs.d}|D]\}}||kr||kr|d7}q|SNrr)timesstartendoverlapsserrr_find_overlaps+s  rc sttfdd}fdd}|dur$td|td|}|dkrdtj|d.}d}td|D] }||||d7}q6td|D] }||||d7}qHWdn1s_wYg}g} t D]\} } } | j kr~| | | fql| | | fql|| fS)Ncp*t}tt|ttt}j||ftt WddS1s1wYdSN) read_lockrnowtimesleep WORK_TIMESlenappendREADER NAPPY_TIMEident enter_time exit_timelock start_stopsrr read_func7s  "z#_spawn_variation..read_funccrr) write_lockrrrrrrrWRITERrr r$rr write_funcBs  "z$_spawn_variation..write_funcr max_workersr ) collectionsdeque fastenersReaderWriterLockmaxrThreadPoolExecutorrangesubmitlistr)r) readerswritersr,r'r*rcount_i writer_times reader_times lock_typerstoprr$r_spawn_variation3s0       r>cCstj|d}d|_|S)N)targetT) threadingThreaddaemon)r?trrr_daemon_thread`s rDc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$S)%ReadWriteLockTestcttjddttfddfdd}g}td|jD]}t |}| ||q-|rI| }| |s?| gt| gtdS)Nr durationc s5tdkr||zttdW|n|wWddS1s.acquire_checkcs(t}s|rdSdSr)r@current_threadexpiredrOrTwatchrrrun{sz5ReadWriteLockTest.test_no_double_writers..runrr/r0r StopWatchrr-r.r3 THREAD_COUNTrDrpopjoin assertEqualr5selfrYthreadsirCrrTrRrSr%rXrtest_no_double_writersis$    z(ReadWriteLockTest.test_no_double_writerscrG)Nr rHc s|rj}nj}|7|stdkr||zttdW|n|wWddS1sFwYdSrJ) rr(rrrLrrrMrN)rPreader lock_funcrQrrrTs    "zKReadWriteLockTest.test_no_concurrent_readers_writers..acquire_checkcs4t}s|tddgrdSdS)NTF)r@rUrVrMchoicerOrWrrrYszAReadWriteLockTest.test_no_concurrent_readers_writers..runrrZr`rrdr"test_no_concurrent_readers_writerss$   z4ReadWriteLockTest.test_no_concurrent_readers_writersc>tjfdd}t|jdS)Nc6 jjtd1swYdSNBroken)r(r_r)owner RuntimeErrorrr%rarrblow_up z4ReadWriteLockTest.test_writer_abort..blow_upr/r0 assertFalsern assertRaisesrorarqrrprtest_writer_abort   z#ReadWriteLockTest.test_writer_abortcrj)Ncrkrl)rr_rrnrorrprrrqrrz4ReadWriteLockTest.test_reader_abort..blow_uprsrvrrprtest_reader_abortrxz#ReadWriteLockTest.test_reader_abortcsttfdd}fdd}tjdd!}tddD]}|ddkr/||q!||q!Wdn1s?wY|d t d d DdS) Nc sPtd1swYWddS1s!wYdSrl)rrorr%rrdouble_bad_readers  "zEReadWriteLockTest.test_double_reader_abort..double_bad_readerc:jWddS1swYdSrr(rrnr activatedr%rr happy_writer "z@ReadWriteLockTest.test_double_reader_abort..happy_writerrFr+r cSg|]}|dkr|qSwrrarrrr r z>ReadWriteLockTest.test_double_reader_abort..) r/r0r-r.rr2r3r4r_r)rar{rrrcrr~rtest_double_reader_aborts    z*ReadWriteLockTest.test_double_reader_abortcstttfdd}fdd}t|}|t |  t|}|| | | dt| ddgtdS)Nc s:jstdjr jWdn1s)wYWddSWddS1sAwYdS)NgMbP?)rsethas_pending_writersrrrrnrrrRr%rr double_readers   "zBReadWriteLockTest.test_double_reader_writer..double_readercr|rr}rr~rrrrzAReadWriteLockTest.test_double_reader_writer..happy_writerrrr)r/r0r-r.r@EventrDrwait WAIT_TIMEOUT assertTrueis_setr^r_rr5)rarrrfwriterrrrtest_double_reader_writers z+ReadWriteLockTest.test_double_reader_writercttfdd}fdd}tjdd)}tddD]}|ddkr8|j|t|d dkd q"||q"Wdn1sHwYd d D}d d D}| dt || dt |dS)NcF|r tdjWddS1swYdSrl)rrorrnrqr~rrchaotic_reader "z=ReadWriteLockTest.test_reader_chaotic..chaotic_readercr|rr}rr~rrrrz;ReadWriteLockTest.test_reader_chaotic..happy_writerrFr+rrrcSrrrrrrrr r z9ReadWriteLockTest.test_reader_chaotic..cSrrrrrrrr r rr r/r0r-r.rr2r3r4boolr_r)rarrrrcr7r6rr~rtest_reader_chaotic  z%ReadWriteLockTest.test_reader_chaoticcr)Ncrrl)r(rorrnrr~rrchaotic_writer"rz=ReadWriteLockTest.test_writer_chaotic..chaotic_writercr|r)rrrnrr~rr happy_reader)rz;ReadWriteLockTest.test_writer_chaotic..happy_readerrFr+rrrrcSrrrrrrrr 4r z9ReadWriteLockTest.test_writer_chaotic..cSrrrrrrrr 5r r rr)rarrrrcr7r6rr~rtest_writer_chaoticrz%ReadWriteLockTest.test_writer_chaoticc Cst}|N|||*|||||Wdn1s2wYWdn1sAwYWddSWddS1sYwYdSr)r/r0r(r is_writerr is_readerrar%rrrtest_writer_reader_writer9s   "z+ReadWriteLockTest.test_writer_reader_writercCsg}t}||||dt|Wdn1s$wY||d|| Wdn1sDwY||||dt|Wdn1sgwY| || | dSr ) r/r0rrrr_rr(rrrt)raresultsr%rrrtest_single_reader_writerBs     z+ReadWriteLockTest.test_single_reader_writercsvtfdd}|t||Wdn1s&wY||dS)Ncs. WddS1swYdSr)r(rrzrr writer_funcTs "z.writer_func)r/r0rrurortrr)rarrrzrtest_reader_to_writerQs   z'ReadWriteLockTest.test_reader_to_writercsxtfdd}|Wdn1s'wYdS)NcsJWddS1swYdSr)rrrrrrprr reader_funcbs "z.reader_func)r/r0r( assertIsNonertrr)rarrrprtest_writer_to_reader_s  z'ReadWriteLockTest.test_writer_to_readerc Cst}|8|||||||Wdn1s-wY||Wdn1sCwY||||dSr)r/r0r(rtrrrrrrrtest_double_writern  z$ReadWriteLockTest.test_double_writerc Cst}|8|||||||Wdn1s-wY||Wdn1sCwY||||dSr)r/r0rrrrtrrrrrtest_double_readerzrz$ReadWriteLockTest.test_double_readercCstdd\}}|dt||dt||D]\}}|dt||||dt|||q|D]\}}|dt|||q4dS)Nrrr r>r_rrrar:r;rr=rrrtest_multi_reader_multi_writers  z0ReadWriteLockTest.test_multi_reader_multi_writercCsRtdd\}}|dt||dt||d\}}|dt|||dS)N r rrrrrrtest_multi_reader_single_writers  z1ReadWriteLockTest.test_multi_reader_single_writercCsTtdd\}}|dt||dt||D]\}}|dt|||qdS)Nrrr rrrrrtest_multi_writers  z#ReadWriteLockTest.test_multi_writerN)__name__ __module__ __qualname__r\rerirwryrrrrrrrrrrrrrrrrrrEfs&#+      rEr)r-rMr@r concurrentrr/rrrr3rrrr>rDTestCaserErrrrs    -