+
    :'LH  c                   s   R t ^ RIt^ RIHt ^ RIt^RIHtHt ^RIHt ^RIH	t	 ^RIH
t
 ^RIHt RtR	tR
tRtR t]! . ^@N^?N^=N^;N^:N^8N^7N^4N^1N^0N^/N^.N^,N^)N^%N^$N^"N^ N^N^N^N^N^N^N^N^N^N^
N^	N^N^N^N^ N4      t]! . ^@N^>N^9N^7N^6N^5N^4N^/N^.N^-N^(N^'N^&N^%N^#N^!N^ N^N^N^N^N^N^N^N^N^N^N^N^
N^	N^N^N^N^ N4      t ! R R4      t]! ]4      t]! R!4      tR t]! ]4      t]! R"4      tR t]! ]4      t]! R#4      tR t]! ]4      t]! R$4      tR t ]! ]4      t!]! R%4      t"R t#]! ]4      t$R t% ! R R]PL                  4      t' ! R R]PL                  4      t( ! R R]PL                  4      t) ! R R]PL                  4      t* ! R R]PL                  4      t+R t,]-R 8X  d
   ],! 4        R# R# )&z#Unit tests for crcmod functionalityN)array)mkCrcFunCrc)_usingExtension)PredefinedCrc)mkPredefinedCrcFun)_crc_definitionsi  i! im]l   	 c                 s<    ^ pV  F  pV^V,          ,          pK  	  V#      )Zbitspn   &  2/usr/lib64/python3.14/site-packages/crcmod/test.pypolyFromBitsr   ?   s#    	AaL H    c                   s   a  ] tR t^Wt o RtR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tRtV tR# )polyz?Class implementing polynomials over the field of integers mod 2c                sL    \        V4      pV^ 8  d   \        R4      hWn        R# )r   zinvalid polynomialN)intZ
ValueErrorr
   )selfr
      &&r   __init__Zpoly.__init__Y   s"    Fq5
#788r   c                s    V P                   # Nr
   r      &r   __int__Zpoly.__int__^   s    vvr   c                s4    V P                   VP                   8H  # r   r   r   otherr   r   __eq__Zpoly.__eq__a       vv  r   c                s4    V P                   VP                   8g  # r   r   r   r   r   __ne__Zpoly.__ne__d   r   r   c                sB    \        V P                  VP                  4      # r   )Zcmpr
   r   r   r   __cmp__Zpoly.__cmp__i   s    466577##r   c                s     V P                   ^ 8g  # r   r   r   r   r   __bool__Zpoly.__bool__l   s    vv{r   c                s    V # r   r	   r   r   r   __neg__Zpoly.__neg__o   s    r   c                s    \        V P                  4       ^,           ^4      p^V,          ^,
          p\        V P                  V,          4      # i   )Zmaxdegr   r
   )r   r   xr   r   
__invert__Zpoly.__invert__r   s8    
Q"!VqLDFFQJr   c                N    \        V P                  VP                  ,          4      # r   r   r
   r   r   r   __add__Zpoly.__add__w       DFFUWW$%%r   c                r&   r   r'   r   r   r   __sub__Zpoly.__sub__z   r)   r   c                s    V P                   pVP                   pV^ 8X  g   V^ 8X  d   \        ^ 4      # ^ pV'       d,   V^,          '       d	   WB,          pV^,          pV^,	          pK3  \        V4      # r   )r
   r   )r   r   aZbr$   s   &&   r   __mul__Zpoly.__mul__}   s\    FFGG6Q!VDG^ssE1A1AAwr   c                s   V P                   pV P                  4       pVP                   pVP                  4       pV^ 8X  d   \        R4      hV^ 8X  d   V \        ^ 4      3# W58  d   \        ^ 4      V 3# W5,
          p^V,          pWF,          p^ pV^ 8  dF   Wr,          '       d   W$,          pV^,          pV^,          pV^,	          pV^,	          pV^,          pKL  Wr,          '       d   W$,          pV^,          p\        V4      \        V4      3# )r   zpolynomial division by zero)r
   r#   ZZeroDivisionErrorr   )	r   r   ZuZmvr   Zkr+   Zqs	   &&       r   
__divmod__Zpoly.__divmod__   s    FFHHJGGIIK6*+HII64Q.(5$q'$'CFF!euuEEQAQAQAFA55AAAQQ  r   c                s2    V P                  V4      ^ ,          # r   r.   r   r   r   __div__Zpoly.__div__       u%a((r   c                s2    V P                  V4      ^,          # r"   r/   r   r   r   __mod__Zpoly.__mod__   r1   r   c                s(    R V P                   ,          # )zpoly(0x%XL)r   r   r   r   __repr__Zpoly.__repr__   s    tvv%%r   c           	     sB   V P                   pV^ 8X  d   R# ^ . ^R.^R.^RR./V^,          ,          pV^,	          p^pV'       d<   V^,          '       d   VP                  RV,          4       V^,	          pV^,          pKC  VP                  4        RP                  V4      # )r   Z0Z1r$   zx^%dZ+)r
   ZappendZreverseZjoin)r   r
   Zlstr      &   r   __str__Zpoly.__str__   s    FF6#"aq#3s)5ac:qDssCJJvz*1AFAxx}r   c                s    V P                   pV^ 8X  d   R# ^ pVR8  d   V^,          pV^,	          pK  \        V4      pV^8  d   V^,          pV^,	          pK  V# )z#return the degree of the polynomial   )r
   r   )r   r+   r   r   r   r#   Zpoly.deg   s[    FF6"97lGARAF!eFAQAr   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r    r!   r%   r(   r*   r,   r.   r0   r2   r3   r5   r#   __static_attributes____classdictcell__Z__classdict__   @r   r   r   W   sb     I
!!
$ 
&&
!2))& r   r   c                     ^ pV  F  pVR,          V,           pK  	  \        V4      p\        V\        ,          \        ,          4      # r      )r   r   x8pg8pdr
   ir   r   crc8prI      s9    	AcEAI QAquSy>r   c                 rA   rB   )r   r   x16pg16prF   r   r   crc16prL      :    	AcEAI QAqvd{r   c                 rA   rB   )r   r   x24pg24prF   r   r   crc24prP      rM   r   c                 rA   rB   )r   r   x32pg32prF   r   r   crc32prS      rM   r   c                 rA   rB   )r   r   x64pg64aprF   r   r   crc64aprV      :    	AcEAI QAqve|r   c                 rA   rB   )r   r   rT   g64bprF   r   r   crc64bprY      rW   r   c                   s   a  ] tR tRt o RR.t]^ ^ 3R.]R	^3R
.]^ ^3R.]^ ^ 3R.]R	^3R.]^ ^3R.]^ ^ 3R.]R	^3R.]^ ^3R.]^ ^ 3R.]R^3R.]^ ^3R.]^ ^R3R..t	R t
RtV tR# )KnownAnswerTestsi     T   CatMouse987654321    c                s   V P                    F  w  r\        V!  pV P                  V! R ^ 4      ^ RV: R24       \        V P                  4       F  w  rEV P                  V! V4      W$,          RV: RV: R24       V P                  V! VR,          V! VR,          4      4      W$,          RV: RV: R24       V P                  V! VRR V! VRR 4      4      W$,          RV: RV: R24       K  	  K  	  R# )	r   z Wrong answer for CRC parameters z
, input ''	, input ''   NNNra   NNr7   )known_answersr   assertEqual	enumeratetest_messages)r   crcfun_paramsr-   crcfunrH   msg   &     r   test_known_answersZ#KnownAnswerTests.test_known_answers  s     $ 2 2M}-FVC]Aan/pq#D$6$67  adhuvy4z{  BB!A14  ~K  LO  JP  Q  BC&Sb2B!CQT  @M  NQ  LR  S 8 !3r   r	   N)   i   r7   )iO   i   )rl   ib   )iq  iV  )i&  in  )i  i  )iļ i )iY i7
 )i+ i# )iݓki)iA    ho )ill   H )   `z| XK)r8   r9   r:   r;   rf   g8g16g24g32rc   rk   r=   r>   r?   r@   r   rZ   rZ     s     M a( 5Ab) 5Aa( 5Aq) 7Ar!* 7Aq) 7Aq) 9Ar!* 9Aq) 9Aq) ;Az!
 ;Aq) ;Aq:
 ;AM S Sr   rZ   c                   s   a  ] tR tRt o . ROt]^ ^ 3].]^ ^ 3].]	^ ^ 3]
.]^ ^ 3].]^ ^ 3].]^ ^ 3]..t]RR l4       tR tR tRtV tR# )	CompareReferenceCrcTesti!  c                s    VR8  d   \        VR,          4      pVR,          p\        P                  ! W4      p\        V4      R,          # )zyThis function modifies the return value of binascii.crc32
to be an unsigned 32-bit value. I.e. in the range 0 to 2**32-1.ir]   i   )r   binasciicrc32)rG   crcr$   s   && r   reference_crc32Z'CompareReferenceCrcTest.reference_crc322  sA    
 C*$%Ak/CNN1!1v
""r   c                s    \        \        ^ ^R4      pV P                   F*  pV P                  V! V4      V P	                  V4      4       K,  	  R# )zThe binascii module has a 32-bit CRC function that is used in a wide range
of applications including the checksum used in the ZIP file format.
This test compares the CRC-32 implementation of this crcmod module to
that of binascii.crc32.r]   N)r   rs   rf   rd   rx   )r   rv   ri   r   r   test_compare_crc32Z*CompareReferenceCrcTest.test_compare_crc32=  sC     Qq,%%CU3Z)=)=c)BC &r   c                s    V P                    F?  w  r\        V!  pV P                   F!  pV P                  V! V4      V! V4      4       K#  	  KA  	  R# )zUCompare various CRCs of this crcmod module to a pure
polynomial-based implementation.N)test_poly_crcsr   rf   rd   )r   rg   Zcrc_poly_funrh   ri      &    r   test_compare_polyZ)CompareReferenceCrcTest.test_compare_polyI  sL     ,0+>+>'M }-F))  l3.?@ * ,?r   r	   N)r   r[   	   123456789r\   r   )r8   r9   r:   r;   rf   rp   rI   rq   rL   rr   rP   rs   rS   g64arV   g64brY   rz   Zstaticmethodrx   ry   r|   r=   r>   r?   r@   r   rt   rt   !  s     M a("q)"q)"q)"!*"!*"N # #
D	A 	Ar   rt   c                   s4   a  ] tR tRt o RtRtR tR tRtV t	R# )CrcClassTestiU  zVerify the Crc classr\   c                s   \        \        4      pRpV P                  \        V4      V4       V P                  VP	                  4       R4       V P                  VP                  4       R4       VP                  V P                  4       V P                  VP                  R4       V P                  VP	                  4       R4       V P                  VP                  4       R4       VP                  4       pV P                  W1J4       RpV P                  \        V4      V4       V P                  \        V4      V4       R# )	z*Verify the CRC class when not using xorOutzcpoly = 0x104C11DB7
reverse = True
initCrc  = 0xFFFFFFFF
xorOut   = 0x00000000
crcValue = 0xFFFFFFFFs   ZFFFFFFFFrm   s    ZF7B400A7zcpoly = 0x104C11DB7
reverse = True
initCrc  = 0xFFFFFFFF
xorOut   = 0x00000000
crcValue = 0xF7B400A7N)r   rs   rd   strdigest	hexdigestupdateri   crcValuecopy
assertTrue)r   rw   str_repr$   r4   r   test_simple_crc32_classZ$CrcClassTest.test_simple_crc32_classZ  s    #h 	 	S7+':;*5

488z2':;*5 HHJ% 	 	S7+Q)r   c                s(   \        \        ^ R
R7      pRpV P                  \        V4      V4       V P                  VP	                  4       R4       V P                  VP                  4       R4       VP                  V P                  4       V P                  VP                  R4       V P                  VP	                  4       R4       V P                  VP                  4       R4       VP                  4       pV P                  W1J4       RpV P                  \        V4      V4       V P                  \        V4      V4       VP                  4       pV P                  WAJ4       V P                  WCJ4       RpV P                  \        V4      V4       R	# )z&Verify the CRC class when using xorOut)ZinitCrcZxorOutzcpoly = 0x104C11DB7
reverse = True
initCrc  = 0x00000000
xorOut   = 0xFFFFFFFF
crcValue = 0x00000000s       Z00000000ro   s   KXZ084BFF58zcpoly = 0x104C11DB7
reverse = True
initCrc  = 0x00000000
xorOut   = 0xFFFFFFFF
crcValue = 0x084BFF58Nr7   )r   rs   rd   r   r   r   r   ri   r   r   r   new)r   rw   r   r$   Zyr{   r   test_full_crc32_classZ"CrcClassTest.test_full_crc32_classy  sH    #q"- 	 	S7+':;*5

488y1':;*5 HHJ% 	 	S7+Q) GGI%
# 	 	Q)r   r	   N)
r8   r9   r:   r;   r<   ri   r   r   r=   r>   r?   r@   r   r   r   U  s     
C*>** **r   r   c                   sZ   a  ] tR tRt o Rt. ROtRR.RR.RR..tR tR tR t	R	 t
R
tV tR# )PredefinedCrcTesti  zVerify the predefined CRCscrc-aug-ccittx-25crc-32c                s   V P                    F  w  r\        V4      pV P                  V! R ^ 4      ^ RV,          4       \        V P                  4       F  w  rEV P                  V! V4      W$,          RV: RV: R24       V P                  V! VR,          V! VR,          4      4      W$,          RV: RV: R24       V P                  V! VRR V! VRR 4      4      W$,          RV: RV: R24       K  	  K  	  R# )	r   z#Wrong answer for CRC '%s', input ''zWrong answer for CRC r^   r_   r`   rb   Nr7   )rc   r   rd   re   test_messages_for_known_answers)r   crcfun_namer-   rh   rH   ri   rj   r   rk   Z$PredefinedCrcTest.test_known_answers  s    "00NK'4FVC]A/TWb/bc#D$H$HI  ad]hil4mn  BB!A14r}  B  JC  D  BC&Sb2B!CQTt  AD  LE  F J 1r   c                s   V P                    EF@  w  r\        V P                  4       EF   w  r4\        V4      pVP	                  V4       V P                  VP                  W#,          R V: RV: R24       VP                  4       pV P                  VP                  W#,          RV: RV: R24       V P                  VP                  V^ ,          RV: RV: R24       VP	                  V4       V P                  VP                  W#,          RV: RV: R24       V P                  VP                  W#,          RV: RV: R24       EK#  	  EKC  	  R# )zWrong answer for crc1 r^   r_   zWrong state for crc1 zWrong state for crc2 N)rc   re   r   r   r   rd   r   r   )r   r   r-   rH   ri   crc1Zcrc2   &      r   test_class_with_known_answersZ/PredefinedCrcTest.test_class_with_known_answers  s    "00NK#D$H$HI$[1C   `klo6pqxxz  _jkn6op   !_jkn6opC   _jkn6op  _jkn6op# J 1r   c                s    \          FD  p\        VR ,          4      pV! R4      pV P                  W1R,          RVR ,          ,          4       KF  	  R# Znamer}   ZcheckzWrong answer for CRC '%s'N)_predefined_crc_definitionsr   rd   )r   table_entryZcrc_funcZ
calc_valuer4   r   test_function_predefined_tableZ0PredefinedCrcTest.test_function_predefined_table  sG    6K)+f*=>H!,/JZW)=?Z]hio]p?pq	 7r   c                s    \          FX  p\        VR ,          4      pVP                  R4       V P                  VP                  VR,          RVR ,          ,          4       KZ  	  R# r   )r   r   r   rd   r   )r   r   r   r   r   test_class_predefined_tableZ-PredefinedCrcTest.test_class_predefined_table  sO    6K V!45DKK%T]]K,@B]`klr`sBst	 7r   r	   N)r   r[   r\   )i  i  i7V  )r   i  i
  )r   rn   ro   )r8   r9   r:   r;   r<   r   rc   rk   r   r   r   r=   r>   r?   r@   r   r   r     sR     $'# BL
BL
FLMFq*ru ur   r   c                   sJ   a  ] tR tRt o RtRt. R	Ot. R
OtR tR t	R t
RtV tR# )InputTypesTesti  z<Check the various input types that CRC functions can accept.r\   c                s   V P                    Fs  p\        V4      p\        \        V P                  4      ^,           4       F<  pV P                  RV pV! V4      pV! \        V4      4      pV P                  WV4       K>  	  Ku  	  R# )zeTest that bytearray inputs are accepted, as an example
of a type that implements the buffer protocol.N)check_crc_namesr   rangelenri   Z	bytearrayrd   )r   crc_namerh   rH   test_msgbytes_answerZbytearray_answerr   r   test_bytearray_inputZ#InputTypesTest.test_bytearray_input  sq     ,,H'1F3txx=1,-88BQ<%h/#))H*=#>   @	 . -r   c                s|   V P                    F  p\        V4      p\        \        V P                  4      ^,           4       Ft  pV P                  RV pV! V4      pV P
                   FJ  pV\        V4      P                  ,          ^ 8X  g   K&  \        Wd4      pV! V4      pV P                  WX4       KL  	  Kv  	  K  	  R# )zaTest that array inputs are accepted, as an example
of a type that implements the buffer protocol.N)	r   r   r   r   ri   array_check_typesr    Zitemsizerd   )	r   r   rh   rH   r   r   Z
array_typeZ
test_arrayZarray_answers	   &        r   test_array_inputZInputTypesTest.test_array_input  s     ,,H'1F3txx=1,-88BQ<%h/"&"8"8J5,555:%*:%@
'-j'9((D	 #9 . -r   c                s    V P                    F<  p\        V4      pV P                  \        4      ;_uu_ 4        V! R4       RRR4       K>  	  R#   + '       g   i     KS  ; i)z(Test that Unicode input raises TypeErrorZ	123456789N)r   r   ZassertRaisesZ	TypeError)r   r   rh   r   r   test_unicode_inputZ!InputTypesTest.test_unicode_input  sG    ,,H'1F""9--{# .- ----s   	AA r	   N)r   r   r   )ZBZHZIZL)r8   r9   r:   r;   r<   ri   r   r   r   r   r   r=   r>   r?   r@   r   r   r     s2     F
CO	AE$ $r   r   c                  sd    \        R \        4       \        4        \        P                  ! 4        R# )zUsing extension:N)Zprintr   unittestZmainr	   r   r   runtestsr     s    	
o.	GMMOr   Z__main__rC   r6   i   l        l            ).r<   r   r    ru   Zcrcmodr   r   r   Z
predefinedr   r   r   r   rp   rq   rr   rs   r   r~   r   r   rE   rD   rI   rK   rJ   rL   rO   rN   rP   rR   rQ   rS   rU   rT   rV   rX   rY   ZTestCaserZ   rt   r   r   r   r   r8   r	   r   r   <module>r      s}  . *    ! # % * G 
  
   R  R  R  R  R  R  R   "$&(*,.02468:<>@BDEGHJK   R  R  R  R  R  R  R   "$&(*,.02468:<>@BDFHIKL m mh 2h
4j CyE{ CyE{ CyE{ 	T
E{ 	T
Sx(( S@1Ah// 1AhN*8$$ N*b9u)) 9ux0$X&& 0$f zJ r   