a ze@sddlmZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ej dkZ dZdZefdd Zd d Zd d ZGdddejZGdddejZedkredS))abcN)support)assert_python_okbig) bBhHiIlLqQnN)@=<>!ccs4tD]*}|D] }|dvr"|dvr"q ||fVq qdS)Nrr)rr) integer_codes) byteorderscode byteorderrD/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_struct.pyiter_integer_formatss rcCs|dddS)Nr)srrrstring_reversesr"cCstr|St|SdSN) ISBIGENDIANr")valuerrrbigendian_to_nativesr&c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zejd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7S)8 StructTestcCs |tddddktdS)Nz=ir) assertEqualstructpackr$selfrrrtest_isbigendian"szStructTest.test_isbigendiancCs|tjtjdtd}||dtdd}d}t|}t|}||d||tjtjdd|tjtjdddd|ttjftjdd|ttjftjdd|tjtjd d td d d }|tjtjd||tjtjd|dS)NZr Ziiizcbxxxxxxhhhhiillffd?z3c3b18x12h6i6l6f3d3?ZfooPdsflapiir() assertRaisesr*errorcalcsizer)r+ TypeErrorunpack)r-ZszfmtZfmt3Zsz3r!rrrtest_consistence%s    zStructTest.test_consistencec Csd}d}d}d}d}d}d}d}dD]} d D]} | | } t| |||||||| } t| | \} } }}}}}}|| ||| |||||||||||td |td ||td |td ||||q,q$dS) Nar(iigo! @T)rrrrrr)z xcbhilfd?z xcBHILfd?d)r*r+r9r)int)r-crrr r fr2tprefixformatr!ZcpZbpZhpZipZlpfpZdptprrrtest_transitiveness:s*     zStructTest.test_transitivenessc &Csddddddddd d d d d ddddddddddddddddddd d!d"gd#d#d$fd%g#}|D]\}}}}}d&||fd'||fd(||fd)|tr|p|ffD]X\}}t||} || ||t|t| t|| d*} | |kr||qqXdS)+N)r@r<r<r<r)Zxcr<arHr)Zcxr<arIr)r!r<r<r<r)0s helloworldrLr()Z1srKhrMr()Z9srK helloworlrNr()Z10srKrKrKr)Z11srK helloworldrOr()Z20srKhelloworldrPr()rrRr)rirSr)rrQrRrRr)rrSrSr)rr)riDDDr)r rUrVrWr)r iDrXrYr)r ,,,r)r r)r rZr[r\r)r bwr^r_r)r rZr[r\r)r r]r^r_r)r rZr[r\r)r r`r^r_r)rA@s@s@r)r2ras@s@r)rAssr)r2rbssr)?rrdr)rcr0rer()rcTrererrcrdr()rc)r(rerer(rrrrr)r$r*r+r)r7lenr9 assertTrue) r-Ztestsr:argrZlilZasyZxfmtexpresZrevrrrtest_new_featuresRs\ (   zStructTest.test_new_featuresc CsZddddddddddd }tdD]*\}}||}t|}||||q"d}|D]>}dD]4}t||d }t||d} ||| q^qV|td d|dtd |dtd |td td |td td |dtd|td td|tdtd |tdtddS)Nr(r4) rrrr r r r r rrrrrr)ZbBZhHZiIZlLnNZqQrrrrr r rrr1)rr*r7r)ZassertLessEqualassertGreaterEqual) r-Z expected_sizerrrDsizeZ native_pairsZ format_pairZ signed_sizeZ unsigned_sizerrr test_calcsizes2  zStructTest.test_calcsizecsNddlGfdddtjtD] \}}||}|q(dS)Nrcs@eZdZfddZejejjfddZfddZ Z S)z+StructTest.test_integers..IntTestercst|jdd||_|d|_|dd|_|jtvrHtd|jt||_ |j d|_ |jt dvrd|_ d|j d  |_ d|j d d |_n:|jt d vrd |_ d |_ d|j d |_ntd |jdS)Ntest_one)Z methodNamer z"unrecognized packing byteorder: %srmZbhilqnTr4r(ZBHILQNFrzunrecognized format code: %s)super__init__rDrrr ValueErrorr*r7bytesizebitsizetuplesigned min_value max_value)r-rD) IntTester __class__rrrus*    z4StructTest.test_integers..IntTester.__init__c Ss.|j}|j|kr |jkrnn|}|jrD|dkrD|d|j>7}||dd|}t|d@rld|}|d}||}d|jt||}|j dks|j dvrt st |}| t||j|||}| |||||d}| ||| tjtf||d |n| tttjf|||dS) Nrr(z%x0asciirdr)rrrre)rDr{r|rzrxrprfencoderwrr$r"r)r5r*r6r8 OverflowErrorrv) r-xr+r9 unhexlifyrDexpectedgotZ retrievedrrrrss>       z4StructTest.test_integers..IntTester.test_onecsddlm}g}t|jdD]}|d|>qt|jD]2}d}t|jD]}|d>|dB}qN||q<|ddtjd g|D]0}| |fD] }d D]}||} | | qqqGd d d } Gd ddt } Gdddt } | t t jft j|jd| t t jft j|j|| t t jft j|jd| t t jft j|j| | t t jft j|j| | d| d| d| d| d| dfD].} zt | Wn|dYn0q| d| d| d| ddi| gdfD] } | t t jft j|j| qdS)Nr) randranger0r(rmi,i` rl)r rr(c@seZdZddZdS)zAStructTest.test_integers..IntTester.run..NotAnIntcSsdSN*rr,rrr__int__szIStructTest.test_integers..IntTester.run..NotAnInt.__int__N)__name__ __module__ __qualname__rrrrrNotAnIntsrc@seZdZddZddZdS)zBStructTest.test_integers..IntTester.run..IndexablecSs ||_dSr#_value)r-r%rrrruszKStructTest.test_integers..IntTester.run..Indexable.__init__cSs|jSr#rr,rrr __index__szLStructTest.test_integers..IntTester.run..Indexable.__index__N)rrrrurrrrr Indexablesrc@seZdZddZddZdS)zAStructTest.test_integers..IntTester.run..BadIndexcSstdSr#)r8r,rrrrszKStructTest.test_integers..IntTester.run..BadIndex.__index__cSsdSrrr,rrrrszIStructTest.test_integers..IntTester.run..BadIndex.__int__N)rrrrrrrrrBadIndexsrza stringy@E@ rr>z:integer code pack failed on object with '__index__' methodr<ra)r(r4r0)randomrrangerxappendrwextendsysmaxsizersobjectr5r8r*r6r+rDfail)r-rvaluesrir valjbaseZincrrrrrobj)rDrrrunsh         z/StructTest.test_integers..IntTester.run) rrrrur*r+r9rrsr __classcell__rr}binasciirD)r~rr}s  &r})runittestTestCaserr)r-rrrBrrr test_integersszStructTest.test_integerscsTfdd}dD]>}dD]4}||}|tj||tj|d|tj|dqqdS)NcsPtj}||i|Wdn1s00Ydt|jdS)Nzbad char in struct format)r5r*r6assertInstr exception)funcargskwargscmr,rrassertStructErrorEs,z2StructTest.test_nN_code..assertStructErrorrornrrL)r*r7r+r9)r-rrrrDrr,r test_nN_codeCs  zStructTest.test_nN_codecCsHdD]>\}}}}t||}|||t||\}|||qdS)N))pabcrdrL)Z1prrdrL)Z2prsar<)Z3prsabsab)Z4prsabcr)Z5prsabcr)Z6prsabcr)Z1000psxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r*r+r)r9)r-rinputrZ expectedbackrrrr test_p_codePs   zStructTest.test_p_codecCstddD]}d}||d|kr,|d}q||}td|}td|d}|||td|}||t|td|d}|||q d}t|d }td|}td|d}|||d }t|d }|t tjd|dS) Nr(!g?razfihig) rr*r+r9r)r"mathldexpr5r)r-rZdeltaZsmallerpackedZunpackedZ bigpackedrrrr test_705836`s(        zStructTest.test_705836cCsltD]8\}}||}|tjtj|d|tjtj|dq|tjtjdd|tjtjdddS)N?g?r1)rr5r*r6r+)r-rrrDrrr test_1530559s zStructTest.test_1530559c Csd}d}t|}ttfD]}||}|||d|||dd|||ddtdD]&}|||||||dfqhtdt|d D]}|tj |j||qqttfD]}||}|t||d|t||dd|t||ddtdD]*}|t||||||dfqtdt|d D]}|tj tj|||qXq||j|dd ddS) Ns abcd01234Z4s)sabcdr4)scd01rl)s0123r()bufferoffset) r*Structbytes bytearrayr) unpack_fromrrfr5r6)r- test_stringr:r!clsdatar rrrtest_unpack_froms0   $  (zStructTest.test_unpack_fromcCsd}tdd}d}t|}||d||dt|}|||||d||dt|d}|||dd|tdd}|ttj f|j|d||ttj f|j|d||}|t tj ftjd |ddS) NReykjavik rocks, eow!rd 21srr r4rL) arrayr*r pack_intotobytesrfr)r5rvr6r8)r-r writable_bufr:r!from_buf small_bufZsbrrrtest_pack_intos*    zStructTest.test_pack_intocsd}tdd}dfdd}||d||dt|}|||||d||dt|d}|||dd|tdd }|ttjf||d||ttjf||d |dS) Nrrrrcstjg|RSr#)r*r)rr:rrrLz.StructTest.test_pack_into_fn..rrrr4)rrrfr)r5rvr*r6)r-rrrrrrrrtest_pack_into_fns"      zStructTest.test_pack_into_fncCs@tdd}td}||fD]}td|\}||dqdS)Nrs4Vxz>IixV4)r memoryviewr*r9r))r-Zdata1Zdata2rr%rrrtest_unpack_with_buffers   z"StructTest.test_unpack_with_bufferc CsGdddt}tddD]X}dggddf}dgd d d d d f}|dt|}tj|g|R}t||}|dt|}tj|g|R} t|| } |t|t| |t|t||D]} || q| D]} || qt|dd} |t| t |dt| dkr8|j|d| dzt|d|Wnt ybYq0| d|dqdD]} |td| dq|dS)Nc@seZdZddZdS)z+StructTest.test_bool..ExplodingBoolcSstdSr#)OSErrorr,rrr__bool__sz4StructTest.test_bool..ExplodingBool.__bool__N)rrrrrrrr ExplodingBoolsrz<>!=)rrrrr(testr lgArcz encoded bool is not one byte: %r)msgz2Expected OSError: struct.pack(%r, ExplodingBool()))rez>?) rryrfr*r+r9r)Z assertFalsergr7rr)r-rrCZfalsetrueZ falseFormatZ packedFalseZ unpackedFalseZ trueFormatZ packedTrueZ unpackedTruerBrr@rrr test_bools>    zStructTest.test_boolcCsPdtjd}|tjtj|dtjdtjd}|tjtj|dS)Nz{}br(z{}b{}Hr4)rDrrr5r*r6r7)r-Z hugecountZ hugecount2rrrtest_count_overflow szStructTest.test_count_overflowcCstdd}|tjtjd|tjtjdd|tjtjd|d|tjtjd|d|tjtjdd|tjtjdd|tjtjd|dd|tjtjd|d|tjtjd d |tjtjd d |tjtjd |dd |tjtjd |ddS) NrrZ12345rLrZc12345rxZ14s42z spam and eggss spam and eggs)rr5r*r6r+r9rr)r-storerrrtest_trailing_counters* z StructTest.test_trailing_countercCstd}|ddS)Nr r3)r*rrur-r!rrrtest_Struct_reinitialization*s z'StructTest.test_Struct_reinitializationcCs8td}|td|d7}t|t||dS)NZ2n3PZP3n0Pr()rZ calcobjsizer*r7 check_sizeofr)r-Z format_strZnumber_of_codesZ totalsizerrrr1s zStructTest.check_sizeofcCstD]}||dq|dd|dd|dd|dd |d d|d d|d d|d d|dd dS)Nr(Z BHILfdspP ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBifdr4ZxxxxxxxxxxxxxxrZ100HZ187sZ20prJZ0c)rr)r-rrrrtest__sizeof__8s        zStructTest.test__sizeof__cCsd}|tj|$tdtdddWdn1s<0Yd}|tj|"tdtddWdn1s0YdS)Nzkpack_into requires a buffer of at least 6 bytes for packing 1 bytes at offset 5 \(actual buffer size is 1\)rr(rzounpack_from requires a buffer of at least 6 bytes for unpacking 1 bytes at offset 5 \(actual buffer size is 1\))assertRaisesRegexr*r6rrrr-Zregex1Zregex2rrrtest_boundary_error_messageFs2z&StructTest.test_boundary_error_messagecCstd}|tjd td|ddWdn1s<0Y|tjd td|ddWdn1sz0Y|tjd td|dWdn1s0Y|tjdtd|dWdn1s0YdS) Nrz%no space to pack 4 bytes at offset -2._check_iterator>ibcprLs1234567s123456s12345678rs12)r*r iter_unpackr5r6)r-r r!r rr,rtest_constructs    (( (z!UnpackIteratorTest.test_constructcCs$ttdd}|t|dS)Nr rL)typer*rr r5r8)r-Ziter_unpack_typerrrtest_uninstantiablesz&UnpackIteratorTest.test_uninstantiablecCsrtd}ttdd}||}|t|d|t|d|t|d|tt||tt|dS)N>IBr(iri r)i ) r*rrrr r)nextr5 StopIterationr-r!rr rrr test_iterates  zUnpackIteratorTest.test_iteratecCsftd}ttdd}|t|}|t|d|t|d|t t||t t|dSNrr( rr) r*rrrr rr)rr5rrrrrtest_arbitrary_buffers z(UnpackIteratorTest.test_arbitrary_buffercCstj}td}ttdd}||}|||dt||||dt||||dt||||d| t t||||ddS)Nrr(rr0r4r) operator length_hintr*rrrr r)rr5r)r-Zlhr!rr rrrtest_length_hints  z#UnpackIteratorTest.test_length_hintcCsVtdttdd}|t|d|t|d|tt||tt|dSr)r*r rrr)rr5r)r-r rrrtest_module_funcs z#UnpackIteratorTest.test_module_funcc Cs(ddddddddtd fd td fd g }|D]\}}|ddd }||td|d||td|||td|d||td|tjdkr||td|d||td|q,||td|d||td|q,gd}|D]L\}}|t td|d|t td|ddd dq tdtj }||dd@dtdtj }||dd@dgd} | D] \}}}||t||qgd} | D]\}}| t tj||qdg} | D] \}}}||t||qdS)N)s)g)sgs|z+infsz-inf)sU5gT?r elittlee))r#s)r#s)r#s)r#s|)r#s~)r#sr(~))r$sg`>)r$r"g`>)r$r"gP>)r$g?)r$r(g?)r$g?)r$r)r!)r$s<g?)r$<g?)r$r*g?)r${i)r$r+i)r$sg`)r$g`)r$r,gP)r$sg)r$g)r$r-g)r$si) )r$@)r$@)r$u<7~)r$)r$)r$u<7)r#r.)r#r/)r#r0)r#r1)r#r2)r#r3)r$sgg@) floatr)r*r9r+rrrgrisnannanr5r) r-Z&format_bits_float__cleanRoundtrip_listZle_bitsrAZbe_bitsZformat_bits__nan_listZ formatcodebitsrZ format_bits_float__rounding_listZ%format_bits_float__roundingError_listZ+format_bits_float__doubleRoundingError_listrrrtest_half_floatsP     * z"UnpackIteratorTest.test_half_floatN) rrr__doc__rrrrrr r8rrrrrs  r__main__) collectionsrrrrrr*rrrZtest.support.script_helperrrr$rrrr"r&rr'rrmainrrrrs0     2