ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ Oc@sddlZddlZddlZy eZWnek rAnXdejfdYZdefdYZdejfdYZ de fd YZ d ejfd YZ d Z dS( iNt LRUCacheTestscBs}eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d ZRS( cCsddlm}|S(Ni(tLRUCache(t repoze.lruR(tselfR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyt_getTargetClass scCs|j|jt|jk|j|jdk|j|j|jd|jt|j|j|jt|jt|j|jt|jt|jkx|jj D]\}}|\}}|jt |t dkp t |t dk|j|dk|j||jk|j|}|j||k|j|}qWx0|jD]%}|j|t kp|t kquWdS(s9Return if cache is consistent, else raise fail test case.iii*iiNl ( t assertTruethandtlent clock_keyst assertEqualtmaxpostsizet clock_refstdatatitemsttypetTruetFalse(Rtcachetkeytvaluetpostvalt clock_keyt clock_ref((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pytcheck_cache_is_consistents$"%  cCs|j|S(N(R(RR ((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyt_makeOne0scCs|jt|jddS(Ni(t assertRaisest ValueErrorR(R((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_size_lessthan_13scCs|jd}|j|jdd|j|jdd|j|jdd|j|jdd|j|jdd|j|jtd|j|jddd|j|jdddd|j|dS(Nitfooi*ttbartdefault(Ri*(RR tgettNonetobjectR(RR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_get6scCs|jd}|j||jdd|jdd|jdd|jdd|jdd |jd d t}|j|d |j||j|jdd|j|jdd|j|jddd|j|jdd|j|jdd |j|jd d |j|j|d |jdd |j|jdd |j|dS(NiRtFOOi*tfortytwot tuple_as_keyt None_as_keyRtempty_string_as_keygT㥛 @t float_as_keyt object_as_keysfortytwo again(Ri*(Ri*(RRtputR#R$R R"(RRt my_object((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_putEs*   cCs:|jd}|jdd|jdd|jd|j|jdd|j|jdd|j||jd|j|jdd|j|jdd|j|ji|j||jdd|jd|j|jdd|j|jdd|j|dS(NiRR R&tBARtnonexistingkey(RR-t invalidateR R"R#RR (RR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_invalidatebs"     cCs|jd}|jdd|j|jdd|j||jdd|j|jdd|j|jdd|j||jdd|j|jdd|j|jdd|j||jd|j||j|jdd|j|jdd|jdd|j|jdd|j|j||j|jdd|j|jdddS(sCache of size 1 must workiRR R&R0N(RR-R R"RR#R2tclear(RR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_small_cachexs,       cCs|jd}d}d}|j|d|j|j|d|j|j|d|j||jd}|j|d|j||j|j|d|j|j|ddS(s5equal but not identical keys must be treated the sameii*N(ii(ii(RR-R R"RR2R#(RRt tuple_onet tuple_two((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_equal_but_not_identicals  cCsd}|j|}x(t|D]}|j|d|q"WxmtdD]_}tjd|d}tjdr|j|j|d|qM|j|d|qMW|j|jd|j|j d|j |dS(s<If cache size equals number of items, expect 100% cache hitsisitem%si'iiN( RtrangeR-trandomt randranget getrandbitsR R"tmissest evictionsR(RR Rtcounttcache_optitem((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_perfect_hitrates c Csd}|j|d}x(t|D]}|j|d|q&Wd}d}d}xtdD]}tjd|d}tjdr|j|} |d7}|j| d|kp| d k| d kr|d7}q|d7}qc|j|d|qcW|t |d} |j| dk|j| d kd|j |j } |j| dk|j| d kd|j |j } |j| dk|j| d k|j |d S( s:If cache size == half the number of items -> hit rate ~50%iisitem%sii'iidi-i7N(RR9R-R:R;R<R"RR#tfloatthitstlookupsR=R( RR RR?RDR=t total_getsR@RAtentryt hit_ratiotinternal_hit_ratiotinternal_miss_ratio((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_imperfect_hitrates:     cCs|jd}|jdd|jdd|j|jd|jdd|jdd|j|jd|jdd|jdd|j|jd|j|j|jddS(Niiiii(RR-R R>R4(RR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_eviction_counters cCsO|jd}|j|jdd|jdd|jjd\}}|j|j|t|j|j|d|j|d|j|jdd|j|j |d|jjd\}}|j|j|t|j|j |d|jt |jd|jdd|jjd\}}|j|j|t|j|j|d|jt |jd|jdd |jjd\}}|j|j|t|j|j|d|jt |jd|jjd\}}|j|j|t|jd|jd d |jt |jd|j|jjdd|jd d |jt |jd|j|jjdd|j|jd d |j|jd d |j|jdd|j|jdd|j|jdd |j |dS(Nitat1itbt2itct3tdt4tet5( RR R"R#R-R R RRRRR(RRRR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_itsL (t__name__t __module__RRRRR%R/R3R5R8RBRKRLRW(((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyR s        !   + tExpiringLRUCacheTestscBsJeZdZddZdZdZdZdZdZ RS(cCsddlm}|S(Ni(tExpiringLRUCache(RR[(RR[((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyR3scCs6|dkr|j|S|j|d|SdS(Ntdefault_timeout(R#R(RR R\((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyR7s c Cs|j|jt|jk|j|jdk|j|j|jd|jt|j|j|jt|jt|j|jt|jt|jkx|jj D]\}}|\}}}|jt |t dkpt |t dk|j|dk|j||jk|j|}|j||k|j|}|jt |t dkqWx0|jD]%}|j|t kp|t kqWdS( sReturn if cache is consistent, else raise fail test case. This is slightly different for ExpiringLRUCache since self.data contains 3-tuples instead of 2-tuples. iii*iigT㥛 @Nl ( RRRRR R R R R RRRR( RRRRRRttimeoutRR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyR=s$"%1  #cCs^|jd}|j|jdd|jdd|jjd\}}}|j|j|t|j|j|d|j|d|j|jdd|j|j |d|jjd\}}}|j|j|t|j|j |d|jt |jd|jdd|jjd\}}}|j|j|t|j|j|d|jt |jd|jdd |jjd\}}}|j|j|t|j|j|d|jt |jd|jjd\}}}|j|j|t|jd|jd d |jt |jd|j|jjdd|jd d |jt |jd|j|jjdd|j|jd d |j|jd d |j|jdd|j|jdd|j|jdd |j |dS(spTest a sequence of operations Looks at internal data, which is different for ExpiringLRUCache. iRMRNiRORPiRQRRRSRTRURVN( RR R"R#R-R R RRRRR(RRRRtexpires((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyRWasL cCs|jd}|jddtjd|jdd|j|jdd|j|jdd|j||jddd}|jddtjd|jdd|j|jdd|j|jdd|j|dS( s5Default timeout provided at init time must be appliediRR g?R&R0R\N(RR-ttimetsleepR R"RR#(RR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_default_timeouts   cCs|jddd}|jdd|jdddd |jd ddd |j|jdd|j|jdd|j|jd dtjd|j|jdd |j|jdd|j|jd dtjd|j|jdd |j|jdd |j|jd dtjd|j|jdd |j|jdd |j|jd d |j|d S( s>Timeouts must be per entry, default applied when none providediR\g?toneittwoiR]g?tthreeg333333?N(RR-R R"R_R`R#R(RR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_different_timeoutss(   cCsU|jddd}|jdd|jdddd |jd d dd tjd |j|jdd|j|jdd|j|jd d |j||jdd|jdddd |jd d tjd |j|jdd|j|jdd |j|jd d |j|d S(s'Re-putting an entry must update timeoutiR\g?RR tfoo2tbar2R]i tfoo3tbar3g?N(RR-R_R`R R"RR#(RR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_renew_timeouts"   N( RXRYRR#RRRWRaReRj(((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyRZ1s   $ 9  !tDecoratorTestscBsAeZdZddZdZdZdZdZRS(cCsddlm}|S(Ni(t lru_cache(RRl(RRl((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyRscCs|j|d|d|S(NR]R(R(RtmaxsizeRR]((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyRscCs,|jdd}|j|jjddS(Ni (RR#R RR (Rt decorator((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_ctor_nocachescCst}|jd|}d}||}|d}|j|dd|j|d|jt|d|d}|j|dd|j|d|jt|d|d}|j|dd|j|d|jt|ddS(NicSs|S(N((R((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pytwrappedsii(i(i(i(t DummyLRUCacheRR R(RRRnRpt decoratedtresult((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_singleargs       cCst}|jd|}d}||}|ddd}|j|dd|j|d |jt|ddS( NicWs|S(N((targs((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pytmoreargssiiii(iii(iii(iii(RqRR R(RRRnRvRrRs((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_multiargs s   cCs|jddddd}tj}|d}tj}|j|d|j||dktj}|d}tj}|j|d |j||dktjdtj}|d}tj}|j|d |j||dkdS( s?When timeout is given, decorator must eventually forget entriesiR]g?cSstjdd|S(Ng?i(R_R`(tparam((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyt sleep_a_bits thelloiNt hellohelloR{R{(RR#R_R RR`(RRytstarttresult1tstoptresult2tresult3((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyt test_expirys"!          N( RXRYRR#RRoRtRwR(((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyRks      RqcBseZdZRS(cCs|j||S(N(t __setitem__(Rtktv((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyR-8s(RXRYR-(((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyRq6st CacherMakercBsPeZdZdZdZdZdZdZdZdZ RS(cCsddlm}|S(Ni(t CacheMaker(RR(RR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyR>scOs|j||S(N(R(RRutkw((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyRBscCs|j}d}d}|jd|d|t}|jt|jj|g|j|j|j||d|d|jt|j|j ddS(Ni tnameRmi i( Rtlrucachet_adderR tlistt_cachetkeysR RR (RtmakerR RRr((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_named_cacheEs "  cCsl|j}d}d}|jd|d|t}|jt|jd|d||jt|jdS(Ni RRm(RRRRtKeyErrorR(RRR RRr((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_exceptionPs  cCsd}|jd|}x0tdD]"}|jt}|dq%W|jt|jdxC|jjD]2}|j|j||jt|j dqtW|j xC|jjD]2}|j|j||jt|j dqWdS(Ni Rmidii( RR9RRR RRtvaluesR R R4(RR RtiRrR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_defaultvalue_and_clearXs cCs|jdd}|jddt}|jddt}x,tdD]}||}||}qOW|jt|jdjd|jt|jdjd|jd|jt|jdjd|jt|jdjddS(NRmi RRbRcidi( RRRR9R RRR R4(RRRbRcRt_((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_clear_with_single_nameis     cCsi|jdd}|jddt}|jddt}|jddt}x8tdD]*}||}||}||}qgW|jt|jdjd|jt|jdjd|jt|jdjd|jdd|jt|jdjd|jt|jdjd|jt|jdjddS( NRmi RRbRcRdidi( RRRR9R RRR R4(RRRbRcRdRR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyttest_clear_with_multiple_namesvs       cCs^d}d}d}|jd|d|}xktdD]]}|sx|jd|t}|j|j|j|n|jt}|dq7W|jt|jdxV|jjD]E}|j|j||j|j ||jt|j dqW|j xC|jjD]2}|j|j||jt|j dq$WdS(Ni RRmR]idii( RR9texpiring_lrucacheRR RR RRR\R R4(RR R]RRRRrR((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyt test_expirings& ( RXRYRRRRRRRR(((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyR<s     cCs|dS(Ni ((tx((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyRs(R:R_tunittesttxrangeR9t NameErrortTestCaseRRZRktdictRqRR(((sA/opt/alt/python27/lib/python2.7/site-packages/repoze/lru/tests.pyts     'Ic