a ze-@sddlZddlZddlZddlZddlmZddlmZejdkZ d8ddZ dd Z d d Z Gd d d ej ZejZGdddeZdZGdddeZGdddeZGdddeZGdddeeZGdddeeZGdddeZGdddej ZGdd d eZGd!d"d"ej ZGd#d$d$ZGd%d&d&eZGd'd(d(eej ZGd)d*d*eej Z Gd+d,d,eej Z!Gd-d.d.eZ"Gd/d0d0e"ej Z#Gd1d2d2e"ej Z$Gd3d4d4e"ej Z%Gd5d6d6ej Z&e'd7kre(dS)9N)assert_python_ok)HashablecCsN|dkrt|St|}t|D]$}d|dd@}|d?d@||<q t|S)zLinear congruential generatorriCiÞ&r)bytes bytearrayrange)xlengthoutirB/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_hash.pylcgs rcCs^d|krdksnJ|dkr,|d}n|}||d?Ad@}|dkrR|d}n|}||fS)z*Convert SipHash24 output to Py_hash_t rll lrrr)Zuint64Zint64Zuint32Zint32rrr pysiphashs  rcCs&tjjdv}d}|r|St||S)z8Skip decorator for tests that depend on SipHash24 or FNV> siphash24fnvzRequires SipHash24 or FNV)sys hash_info algorithmunittestskip)testokmsgrrrskip_unless_internalhash+s rc@s4eZdZddZddZddZddZd d Zd S) HashEqualityTestCasecGs@ttt|}|ddD] }||dkr|d|fqdS)Nrzhashed values differ: %r)listmaphashZfail)selfZobjlistZhashedhrrr same_hash4s zHashEqualityTestCase.same_hashcCs>|dddd|ddd|ddd |d d d dS) Nr g?y?rygygy)r&r$rrrtest_numeric_literals<sz*HashEqualityTestCase.test_numeric_literalsc Cs|tdtdtdtdtdtd|tdtd|tdtd|tdtd|tdtd|tdtd|td td dS) Nr 1z1.0iirlllr&intfloatcomplexr*rrrtest_coerced_integersBs z*HashEqualityTestCase.test_coerced_integerscCs.|tdtd|tdtdddS)Ng쏈b=~g?r'r-r*rrrtest_coerced_floatsMsz(HashEqualityTestCase.test_coerced_floatscCs`dd}tdD]J}tdD]<}||d|}t||d|}|t|t|qqdS)Ns#123456789abcdefghijklmnopqrstuvwxyzr)r memoryview assertEqualr#)r$brjZalignedZ unalignedrrrtest_unaligned_buffersQs   z+HashEqualityTestCase.test_unaligned_buffersN)__name__ __module__ __qualname__r&r+r1r2r8rrrrr2s  rc@s eZdZdS) DefaultHashNr9r:r;rrrrr<]r<*c@seZdZddZdS) FixedHashcCstSN)_FIXED_HASH_VALUEr*rrr__hash__aszFixedHash.__hash__Nr9r:r;rCrrrrr@`sr@c@seZdZddZdS) OnlyEqualitycCs||uSrArr$otherrrr__eq__eszOnlyEquality.__eq__N)r9r:r;rHrrrrrEdsrEc@seZdZddZdS)OnlyInequalitycCs||uSrArrFrrr__ne__iszOnlyInequality.__ne__N)r9r:r;rJrrrrrIhsrIc@s eZdZdS)InheritedHashWithEqualityNr=rrrrrKlr>rKc@s eZdZdS)InheritedHashWithInequalityNr=rrrrrLmr>rLc@seZdZdZdS)NoHashNrDrrrrrMosrMc@s`eZdZeeegZeee gZ e e gZ ddZddZddZddZd d Zd S) HashInheritanceTestCasecCs$|jD]}|t|t|qdSrA)default_expectedr5r# _default_hashr$objrrrtest_default_hashs z)HashInheritanceTestCase.test_default_hashcCs |jD]}|t|tqdSrA)fixed_expectedr5r#rBrQrrrtest_fixed_hashs z'HashInheritanceTestCase.test_fixed_hashcCs|jD]}|tt|qdSrA)error_expectedZ assertRaises TypeErrorr#rQrrrtest_error_hashs z'HashInheritanceTestCase.test_error_hashcCs&|j|j}|D]}||tqdSrA)rOrTZassertIsInstancer)r$ZobjectsrRrrr test_hashables z%HashInheritanceTestCase.test_hashablecCs|jD]}||tqdSrA)rVZassertNotIsInstancerrQrrrtest_not_hashables z)HashInheritanceTestCase.test_not_hashableN)r9r:r;objectr<rIrOr@rKrLrTrMrErVrSrUrXrYrZrrrrrNrs rNc@s$eZdZedZddZddZdS)DefaultIterSeq cCs t|jSrA)lenseqr*rrr__len__szDefaultIterSeq.__len__cCs |j|SrA)r_)r$indexrrr __getitem__szDefaultIterSeq.__getitem__N)r9r:r;r r_r`rbrrrrr\sr\c@s6eZdZeedeeedddgZddZdS)HashBuiltinsTestCaser]cCsdS)Nrrrrrrr>zHashBuiltinsTestCase.rcCs*tj}|jD]}|t|||q dSrA)r[rChashes_to_checkr5r#)r$rPrRrrr test_hashess z HashBuiltinsTestCase.test_hashesN) r9r:r; enumerater iterr\rerfrrrrrcs   rcc@s&eZdZddZdddZddZdS) HashRandomizationTestscCsd|S)Nzprint(hash(eval(%a)))rr$repr_rrrget_hash_commandsz'HashRandomizationTests.get_hash_commandNcCs`tj}d|d<|dur(t||d<n |ddtd||fi|}|d}t|S)NTZ __cleanenvZPYTHONHASHSEEDz-cr ) osenvironcopystrpoprrlstripr.)r$rkseedenvr stdoutrrrget_hashs    zHashRandomizationTests.get_hashcCs0|j|jdd}|j|jdd}|||dS)Nrandomrs)rvrkassertNotEqual)r$Zrun1Zrun2rrrtest_randomized_hashsz+HashRandomizationTests.test_randomized_hash)N)r9r:r;rlrvrzrrrrris ric@seZdZdZdZgdgdggdgdgdgdgdggd gd gd gd gd gdZddZddZeddZ eddZ dS) StringlikeHashRandomizationTestsN)\ r|r|r|)iL̇lLL//+?iTSlqU:~@[)pGnYD~r}r~)SjxY_oWsrr)  /lrr)iJklJ:8`~il)wJ)iQ l .GUJGiO{l]D])ГP'ABS!rr)ilm]]RiilTe] )iX0l'W=>0i el;u)ilg,gi5$fl`bTNV)i l9\R>|iQlkTrrr*rrrr,sz-BytesHashRandomizationTests.test_empty_stringN)r9r:r;rrkrrrrrrrr'src@s eZdZdZdZeddZdS) MemoryviewHashRandomizationTestszmemoryview(b'abc')zmemoryview(b'abcdefghijk')cCs|ttdddSr)r5r#r4r*rrrr5sz2MemoryviewHashRandomizationTests.test_empty_stringN)r9r:r;rkrrrrrrrr0src@seZdZddZdS) DatetimeTestscCsd|S)Nz import datetime; print(hash(%s))rrjrrrrl:szDatetimeTests.get_hash_commandN)r9r:r;rlrrrrr9src@seZdZeedddZdS)DatetimeDateTestsi*r]N)r9r:r;rdatetimedaterkrrrrr=src @s&eZdZeedddddddZdS) DatetimeDatetimeTestsr rrrrN)r9r:r;rrrkrrrrr@src@seZdZeedZdS)DatetimeTimeTestsrN)r9r:r;rrtimerkrrrrrCsrc@seZdZddZdS)HashDistributionTestCasec Csd}tdt|D]}|d|}|j|dzt}t}tdD]0}t|t|}||d@||d@qD|t|d||t|d|Wdq1s0YqdS) NZabcdefghabcdefgr )prefixrr3)r r^ZsubTestsetr#chraddZ assertGreater)r$baserrZs15Zs255cr%rrrtest_hash_distributionIs  z/HashDistributionTestCase.test_hash_distributionN)r9r:r;rrrrrrGsr__main__)r))rrmrrZtest.support.script_helperrcollections.abcrmaxsizerrrrZTestCaserr[rCrPr<rBr@rErIrKrLrMrNr\rcrir{rrrrrrrrr9mainrrrrsP    *% Q