
    H                     ~   S r SSKrSSKJr  SSKrSSKJrJr  SSKJr  SSKJ	r	  SSKJ
r
  SS	KJr  S
rSrSrSrS r\" / SQ5      r\" / SQ5      r " S S5      r\" \5      r\" S5      rS r\" \5      r\" S5      rS r\" \5      r\" S5      rS r\" \5      r\" S5      rS r \" \5      r!\" S5      r"S r#\" \5      r$S r% " S S\RL                  5      r' " S  S!\RL                  5      r( " S" S#\RL                  5      r) " S$ S%\RL                  5      r* " S& S'\RL                  5      r+S( r,\-S):X  a  \," 5         gg)*z#Unit tests for crcmod functionality    N)array   )mkCrcFunCrc)_usingExtension)PredefinedCrc)mkPredefinedCrcFun)_crc_definitionsi  i! im]l   	 c                 ,    SnU  H  nUSU-  -  nM     U$ Nr   r    )bitspns      Fplatform/bundledpythonunix/lib/python3.13/site-packages/crcmod/test.pypolyFromBitsr   ?   s#    	AaL H    )!@   ?   =   ;   :   8   7   4   1   0   /   .   ,   )   %   $   "                                  
   	            r   )"r   >   9   r   6   5   r   r   r   -   (   '   &   r"   #   !   r%   r&            r)   r*      r+      r-   r.   r/   r0      r2   r   r   c                   ~    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rSrg)polyW   z?Class implementing polynomials over the field of integers mod 2c                 H    [        U5      nUS:  a  [        S5      eXl        g )Nr   zinvalid polynomial)int
ValueErrorr   )selfr   s     r   __init__poly.__init__Y   s"    Fq5
#788r   c                     U R                   $ Nr   rJ   s    r   __int__poly.__int__^   s    vvr   c                 4    U R                   UR                   :H  $ rN   rO   rJ   others     r   __eq__poly.__eq__a       vv  r   c                 4    U R                   UR                   :g  $ rN   rO   rT   s     r   __ne__poly.__ne__d   rX   r   c                 B    [        U R                  UR                  5      $ rN   )cmpr   rT   s     r   __cmp__poly.__cmp__i   s    466577##r   c                      U R                   S:g  $ Nr   rO   rP   s    r   __bool__poly.__bool__l   s    vv{r   c                     U $ rN   r   rP   s    r   __neg__poly.__neg__o   s    r   c                 |    [        U R                  5       S-   S5      nSU-  S-
  n[        U R                  U-  5      $ Nr   )maxdegrE   r   )rJ   r   xs      r   
__invert__poly.__invert__r   s8    
Q"!VqLDFFQJr   c                 F    [        U R                  UR                  -  5      $ rN   rE   r   rT   s     r   __add__poly.__add__w       DFFUWW$%%r   c                 F    [        U R                  UR                  -  5      $ rN   ro   rT   s     r   __sub__poly.__sub__z   rr   r   c                     U R                   nUR                   nUS:X  d  US:X  a  [        S5      $ SnU(       a!  US-  (       a  XB-  nUS-  nUS-	  nU(       a  M!  [        U5      $ r   )r   rE   )rJ   rU   abrk   s        r   __mul__poly.__mul__}   sc    FFGG6Q!VDG^sE1A1A	 a
 Awr   c                    U R                   nU R                  5       nUR                   nUR                  5       nUS:X  a  [        S5      eUS:X  a  U [        S5      4$ X5:  a  [        S5      U 4$ X5-
  nSU-  nXF-  nSnUS:  a.  Xr-  (       a	  X$-  nUS-  nUS-  nUS-	  nUS-	  nUS-  nUS:  a  M.  Xr-  (       a	  X$-  nUS-  n[        U5      [        U5      4$ )Nr   zpolynomial division by zeror   )r   rj   ZeroDivisionErrorrE   )	rJ   rU   umvr   krw   qs	            r   
__divmod__poly.__divmod__   s    FFHHJGGIIK6*+HII64Q.(5$q'$'CFF!euEEQAQAQAFA !e 5AAAQQ  r   c                 *    U R                  U5      S   $ ra   r   rT   s     r   __div__poly.__div__       u%a((r   c                 *    U R                  U5      S   $ rh   r   rT   s     r   __mod__poly.__mod__   r   r   c                      SU R                   -  $ )Nzpoly(0x%XL)rO   rP   s    r   __repr__poly.__repr__   s    tvv%%r   c                 
   U R                   nUS:X  a  g/ S/S/SS/S.US-     nUS-	  nSnU(       a1  US-  (       a  UR                  S	U-  5        US-	  nUS-  nU(       a  M1  UR                  5         S
R                  U5      $ )Nr   01rk   )r   r      r3   r3   r   r   zx^%d+)r   appendreversejoin)rJ   r   lstr   s       r   __str__poly.__str__   s    FF6##3s)5ac:qDsCJJvz*1AFA a 	xx}r   c                     U R                   nUS:X  a  gSnUS:  a  US-  nUS-	  nUS:  a  M  [        U5      nUS:  a  US-  nUS-	  nUS:  a  M  U$ )z#return the degree of the polynomialr      r,   r   )r   rH   )rJ   rw   r   s      r   rj   poly.deg   so    FF6"7lGARA 7l F!eFAQA !e r   rO   N)__name__
__module____qualname____firstlineno____doc__rK   rQ   rV   rZ   r^   rb   re   rl   rp   rt   ry   r   r   r   r   r   rj   __static_attributes__r   r   r   rE   rE   W   sZ    I
!!
$ 
&&
!2))&r   rE      c                 p    SnU  H  nUS-  U-   nM     [        U5      n[        U[        -  [        -  5      $ Nr   r   )rE   rH   x8pg8pdr   is      r   crc8pr      s9    	AcEAI QAquSy>r   r   c                 p    SnU  H  nUS-  U-   nM     [        U5      n[        U[        -  [        -  5      $ r   )rE   rH   x16pg16pr   s      r   crc16pr      :    	AcEAI QAqvd{r   i   c                 p    SnU  H  nUS-  U-   nM     [        U5      n[        U[        -  [        -  5      $ r   )rE   rH   x24pg24pr   s      r   crc24pr      r   r   l        c                 p    SnU  H  nUS-  U-   nM     [        U5      n[        U[        -  [        -  5      $ r   )rE   rH   x32pg32pr   s      r   crc32pr      r   r   l            c                 p    SnU  H  nUS-  U-   nM     [        U5      n[        U[        -  [        -  5      $ r   )rE   rH   x64pg64apr   s      r   crc64apr      :    	AcEAI QAqve|r   c                 p    SnU  H  nUS-  U-   nM     [        U5      n[        U[        -  [        -  5      $ r   )rE   rH   r   g64bpr   s      r   crc64bpr      r   r   c                       \ rS rSrSS/r\SS4S/\SS4S/\SS4S	/\SS4S
/\SS4S/\SS4S/\SS4S/\SS4S/\SS4S/\SS4S/\SS4S/\SS4S/\SSS4S//r	S r
Srg)KnownAnswerTestsi     T   CatMouse987654321r   )      r   r   )O      )r   b   )iq  iV  )i&  in  )i  i  )iļ i )iY i7
 )i+ i# )iݓki    )iA    ho )ill   H )   `z| XKc                    U R                    H  u  p[        U6 nU R                  U" SS5      SSU< S35        [        U R                  5       H  u  pEU R                  U" U5      X$   SU< SU< S35        U R                  U" USS  U" US S 5      5      X$   SU< SU< S35        U R                  U" USS  U" US S 5      5      X$   SU< SU< S35        M     M     g )	Nr   r   z Wrong answer for CRC parameters z
, input ''	, input ''r2   r   )known_answersr   assertEqual	enumeratetest_messages)rJ   crcfun_paramsr   crcfunr   msgs         r   test_known_answers#KnownAnswerTests.test_known_answers  s     $ 2 2M}-FVC]Aan/pq#D$6$67  adhuvy4z{  ABBQ!A14  ~K  LO  JP  Q  BC&Sb2B!CQT  @M  NQ  LR  S 8 !3r   r   N)r   r   r   r   r   g8g16g24g32r   r   r   r   r   r   r   r     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r   r   c                       \ rS rSr/ SQr\SS4\/\SS4\/\	SS4\
/\SS4\/\SS4\/\SS4\//r\S	S j5       rS rS rSrg)
CompareReferenceCrcTesti!  )r   r   	   123456789r   r   c                 |    US:  a  [        US-  5      nUS-  n[        R                  " X5      n[        U5      S-  $ )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i   r   )rH   binasciicrc32)r   crcrk   s      r   reference_crc32'CompareReferenceCrcTest.reference_crc322  sA    
 C*$%Ak/CNN1!1v
""r   c                     [        [        SSS5      nU R                   H*  nU R                  U" U5      U R	                  U5      5        M,     g)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   r   r   N)r   r   r   r   r   )rJ   r   r   s      r   test_compare_crc32*CompareReferenceCrcTest.test_compare_crc32=  sC     Qq,%%CU3Z)=)=c)BC &r   c                     U R                    H>  u  p[        U6 nU R                   H!  nU R                  U" U5      U" U5      5        M#     M@     g)zUCompare various CRCs of this crcmod module to a pure
polynomial-based implementation.N)test_poly_crcsr   r   r   )rJ   r   crc_poly_funr   r   s        r   test_compare_poly)CompareReferenceCrcTest.test_compare_polyI  sL     ,0+>+>'M }-F))  l3.?@ * ,?r   r   N)r   )r   r   r   r   r   r   r   r   r   r   r   r   r   g64ar   g64br   r   staticmethodr   r   r   r   r   r   r   r   r   !  s    M a("q)"q)"q)"!*"!*"N # #
D	Ar   r   c                   (    \ rS rSrSrSrS rS rSrg)CrcClassTestiU  zVerify the Crc classr   c                 ~   [        [        5      nSnU R                  [        U5      U5        U R                  UR	                  5       S5        U R                  UR                  5       S5        UR                  U R                  5        U R                  UR                  S5        U R                  UR	                  5       S5        U R                  UR                  5       S5        UR                  5       nU R                  X1L5        SnU R                  [        U5      U5        U R                  [        U5      U5        g)	z*Verify the CRC class when not using xorOutzcpoly = 0x104C11DB7
reverse = True
initCrc  = 0xFFFFFFFF
xorOut   = 0x00000000
crcValue = 0xFFFFFFFFs   FFFFFFFFr   s    F7B400A7zcpoly = 0x104C11DB7
reverse = True
initCrc  = 0xFFFFFFFF
xorOut   = 0x00000000
crcValue = 0xF7B400A7N)r   r   r   strdigest	hexdigestupdater   crcValuecopy
assertTrue)rJ   r   str_reprk   s       r   test_simple_crc32_class$CrcClassTest.test_simple_crc32_classZ  s    #h 	 	S7+':;*5

488z2':;*5 HHJ% 	 	S7+Q)r   c                     [        [        SSS9nSnU R                  [        U5      U5        U R                  UR	                  5       S5        U R                  UR                  5       S5        UR                  U R                  5        U R                  UR                  S5        U R                  UR	                  5       S5        U R                  UR                  5       S	5        UR                  5       nU R                  X1L5        S
nU R                  [        U5      U5        U R                  [        U5      U5        UR                  5       nU R                  XAL5        U R                  XCL5        SnU R                  [        U5      U5        g)z&Verify the CRC class when using xorOutr   r   )initCrcxorOutzcpoly = 0x104C11DB7
reverse = True
initCrc  = 0x00000000
xorOut   = 0xFFFFFFFF
crcValue = 0x00000000s       00000000r   s   KX084BFF58zcpoly = 0x104C11DB7
reverse = True
initCrc  = 0x00000000
xorOut   = 0xFFFFFFFF
crcValue = 0x084BFF58N)r   r   r   r   r   r   r   r   r   r   r   new)rJ   r   r   rk   ys        r   test_full_crc32_class"CrcClassTest.test_full_crc32_classy  sH    #q"- 	 	S7+':;*5

488y1':;*5 HHJ% 	 	S7+Q) GGI%
# 	 	Q)r   r   N)	r   r   r   r   r   r   r   r	  r   r   r   r   r   r   U  s    
C*>**r   r   c                   N    \ rS rSrSr/ SQrSS/SS/SS	//rS
 rS rS r	S r
Srg)PredefinedCrcTesti  zVerify the predefined CRCs)r   r   r   crc-aug-ccitt)i  i  i7V  x-25)r   i  i
  crc-32)r   r   r   c                    U R                    H  u  p[        U5      nU R                  U" SS5      SSU-  5        [        U R                  5       H  u  pEU R                  U" U5      X$   SU< SU< S35        U R                  U" USS  U" US S 5      5      X$   SU< SU< S35        U R                  U" USS  U" US S 5      5      X$   SU< SU< S35        M     M     g )	Nr   r   z#Wrong answer for CRC '%s', input ''zWrong answer for CRC r   r   r2   r   )r   r	   r   r   test_messages_for_known_answers)rJ   crcfun_namer   r   r   r   s         r   r   $PredefinedCrcTest.test_known_answers  s    "00NK'4FVC]A/TWb/bc#D$H$HI  ad]hil4mn  ABBQ!A14r}  B  JC  D  BC&Sb2B!CQTt  AD  LE  F J 1r   c                 ~   U R                    GH,  u  p[        U R                  5       GH  u  p4[        U5      nUR	                  U5        U R                  UR                  X#   SU< SU< S35        UR                  5       nU R                  UR                  X#   SU< SU< S35        U R                  UR                  US   SU< SU< S35        UR	                  U5        U R                  UR                  X#   SU< SU< S35        U R                  UR                  X#   SU< SU< S35        GM     GM/     g )NzWrong answer for crc1 r   r   zWrong state for crc1 r   zWrong state for crc2 )r   r   r  r   r   r   r   r  )rJ   r  r   r   r   crc1crc2s          r   test_class_with_known_answers/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                     [          H4  n[        US   5      nU" S5      nU R                  X1S   SUS   -  5        M6     g Nnamer   checkzWrong answer for CRC '%s')_predefined_crc_definitionsr	   r   )rJ   table_entrycrc_func
calc_values       r   test_function_predefined_table0PredefinedCrcTest.test_function_predefined_table  sG    6K)+f*=>H!,/JZW)=?Z]hio]p?pq	 7r   c                     [          HH  n[        US   5      nUR                  S5        U R                  UR                  US   SUS   -  5        MJ     g r  )r  r   r   r   r   )rJ   r  r  s      r   test_class_predefined_table-PredefinedCrcTest.test_class_predefined_table  sO    6K V!45DKK%T]]K,@B]`klr`sBst	 7r   r   N)r   r   r   r   r   r  r   r   r  r!  r$  r   r   r   r   r  r    sI    $'# BL
BL
FLMFq*rur   r  c                   >    \ rS rSrSrSr/ SQr/ SQrS rS r	S r
S	rg
)InputTypesTesti  z<Check the various input types that CRC functions can accept.r   )r  r  r  )BHILc                    U R                    Ho  n[        U5      n[        [        U R                  5      S-   5       H<  nU R                  SU nU" U5      nU" [        U5      5      nU R                  XV5        M>     Mq     g)zeTest that bytearray inputs are accepted, as an example
of a type that implements the buffer protocol.r   N)check_crc_namesr	   rangelenr   	bytearrayr   )rJ   crc_namer   r   test_msgbytes_answerbytearray_answers          r   test_bytearray_input#InputTypesTest.test_bytearray_input  sq     ,,H'1F3txx=1,-88BQ<%h/#))H*=#>   @	 . -r   c                 h   U R                    H  n[        U5      n[        [        U R                  5      S-   5       Ho  nU R                  SU nU" U5      nU R
                   HE  nU[        U5      R                  -  S:X  d  M!  [        Xd5      nU" U5      nU R                  XX5        MG     Mq     M     g)zaTest that array inputs are accepted, as an example
of a type that implements the buffer protocol.r   Nr   )	r-  r	   r.  r/  r   array_check_typesr   itemsizer   )	rJ   r1  r   r   r2  r3  
array_type
test_arrayarray_answers	            r   test_array_inputInputTypesTest.test_array_input  s     ,,H'1F3txx=1,-88BQ<%h/"&"8"8J5,555:%*:%@
'-j'9((D	 #9 . -r   c                     U R                    H4  n[        U5      nU R                  [        5         U" S5        SSS5        M6     g! , (       d  f       MH  = f)z(Test that Unicode input raises TypeError	123456789N)r-  r	   assertRaises	TypeError)rJ   r1  r   s      r   test_unicode_input!InputTypesTest.test_unicode_input  sA    ,,H'1F""9-{# .- ---s   	A
A	r   N)r   r   r   r   r   r   r-  r8  r5  r=  rC  r   r   r   r   r'  r'    s*    F
CO	AE$r   r'  c                  b    [        S[        5        [        5         [        R                  " 5         g )NzUsing extension:)printr   unittestmainr   r   r   runtestsrI    s    	
o.	GMMOr   __main__).r   rG  r   r   crcmodr   r   r   
predefinedr   r	   r
   r  r   r   r   r   r   r   r   rE   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   TestCaser   r   r   r  r'  rI  r   r   r   r   <module>rN     s  . *    ! # % * G 
  
       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   