
    $)di                       d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZ ddlmZmZmZm Z m!Z! dd	l"m#Z#m$Z$m%Z%m&Z&m'Z' dd
l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL ddl(mMZMmNZN  G d dejO                  ZP G d dejO                  ZQ G d dejO                  ZRejS        dd         dk    ZT e$eT           G d dejO                              ZU e$eT            G d dejO                              ZV G d dejO                  ZW G d dejO                  ZX G d dejO        e#          ZY G d dejO        e#          ZZ G d  d!ejO        e#          Z[ G d" d#ejO        e#          Z\ G d$ d%ejO        e#          Z] G d& d'ejO                  Z^ e$e%           G d( d)ejO                              Z_ G d* d+ejO                  Z` G d, d-ejO                  Za G d. d/ea          Zb G d0 d1ea          Zc G d2 d3ejO        e#          Zdd4 Ze G d5 d6ejO        e#          Zf G d7 d8ejO        e#          Zg G d9 d:ejO        e#          Zh G d; d<ejO        e#          Zi G d= d>ejO        e#          Zj G d? d@ejO        e#          Zk G dA dBejO        e#          Zl G dC dDejO        e#          Zm G dE dFejO                  Zn G dG dHejO                  Zo G dI dJejO        e#          ZpeqdKk    r ejr                     dS dS )Lz 
Tests for bitarray.util module
    N)StringIO)reduce)choicechoicesgetrandbits	randrangerandintrandomsampleseed)	hexdigits
whitespace)Counter)bitarrayfrozenbitarray
decodetree
bits2bytesget_default_endian)UtilskipIfis_pypy	urandom_2PTRSIZE)$zerosonesurandomrandom_krandom_ppprintstripcount_nparity
gen_primessum_indicesxor_indices	count_andcount_or	count_xorany_andsubsetcorrespond_allbyteswap	intervals	serializedeserializeba2hexhex2baba2basebase2baba2intint2ba	sc_encode	sc_decode	vl_encode	vl_decode_huffman_treehuffman_codecanonical_huffmancanonical_decode)_Random_ssqic                       e Zd Zd Zd ZdS )ZerosOnesTestsc                 *   t          d          D ]}t          t          d          t          dd           t          dd           t          d          t          dd           t          dd           g          }|                     |t                                 |                     |j        t                                 |                     t          |          t
                     t          g d          }t          d          }t          t          ||          t          ||          g          }|                     |
                                |dz             |                     |j        |pt                                 t          t          ||          t          ||          g          }|                     |
                                |dz             |                     |j        |pt                                 d S )N2   r   endianlittlebigNd   01)ranger   r   r   assertEqualr   rE   r   typer   to01)self_arE   nbs         Y/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/bitarray/test_util.py
test_basiczZerosOnesTests.test_basic/   s   r 	G 	GAa%4..%$2G2G2GQaQt0D0D0DF G GAQ

+++QX'9';';<<<T!WWh///33344F#Aa((%&*A*A*ABCCAQVVXXq3w///QXv'E1C1E1EFFFQa)?)?)?@AAAQVVXXq3w///QXv'E1C1E1EFFFF!	G 	G    c                    t           t          fD ]}|                     t          |           |                     t          |d           |                     t          |t	                                 |                     t          |g            |                     t          |d           |                     t
          |d           ddi g ddfD ]}|                     t          |d|            |                     t
          |dd           d S )	N       ?r      FTfoo)r   r   assertRaises	TypeErrorr   
ValueError)rP   fxs      rU   test_errorszZerosOnesTests.test_errorsB   s	    	7 	7Ai+++iB///iHJJ777iB///iC000j!R000 2r5$. 6 6!!)Q15555j!Q6666	7 	7rW   N)__name__
__module____qualname__rV   rc    rW   rU   rA   rA   -   s5        G G G&7 7 7 7 7rW   rA   c                        e Zd Zd Zd Zd ZdS )URandomTestsc                    t          d          D ];}t          t          d          t          dd           g          }|                     |t	                                 |                     |j        t                                 t          g d          }t          d          }t          t          ||          t          ||          g          }|                     t          |          |           |                     |j        |pt                                 |                     t          |          t                     =d S )N   r   rD   rF   rI   )
rL   r   r   rM   r   rE   r   r   lenrN   )rP   rQ   rR   rE   rS   s        rU   rV   zURandomTests.test_basicU   s&   r 	0 	0A

GAd$;$;$;<==AQ

+++QX'9';';<<<33344F#A6**GAf,E,E,EFGGASVVQ'''QXv'E1C1E1EFFFT!WWh////	0 	0rW   c                    t           }|                     t          |           |                     t          |d           |                     t          |t                                 |                     t          |g            |                     t          |d           |                     t          |d           |                     t          |dd           |                     t          |dd           d S )NrY   rZ   r[   r   r\   r]   )r   r^   r_   r   r`   )rP   Us     rU   rc   zURandomTests.test_errorsc   s    )Q''')Q+++)Q

333)Q+++)Q,,,*a,,,)Q1---*aE22222rW   c                     t          d          }|                     t          |                                dz
            dk               d S Ni i@KL i=  )r   
assertTrueabscountrP   rR   s     rU   
test_countzURandomTests.test_countn   sA    JAGGII	122f<=====rW   N)rd   re   rf   rV   rc   ru   rg   rW   rU   ri   ri   S   sA        0 0 0	3 	3 	3> > > > >rW   ri   c                       e Zd Zd Zd Zd Zd Z eej	        dd         dk               d             Z
d	 Zd
 Zd Zd ZdS )Random_K_Testsc                    t          d          D ]}t          g d          }t          d          }t          d|          }t	          |||          }|                     t          |          t                     |                     t          |          |           |                     |
                                |           |                     |j        |pt                                 d S )N   rF   x   r   )rL   r   r   r	   r   rq   rN   r   rM   rl   rs   rE   r   )rP   rQ   rE   rS   krR   s         rU   rV   zRandom_K_Tests.test_basicw   s    s 	G 	GA33344F#A1AAv&&AOODGGX...SVVQ'''QWWYY***QXv'E1C1E1EFFFF	G 	GrW   c                    t           }|                     t          |           |                     t          |d           |                     t          |dd           |                     t          |dd           |                     t          |dd           |                     t          |dd           d	D ]}|                     t          |d
|            |                     t          |d
dd           |                     t          |d
dd           t	          d          D ]^}|                      ||d          t          |                     |                      |||          t          |                     _d S )N   r\   0.5p   g      @r[   r   )r[   r   
      r]   rD   rk   r{   )r   r^   r_   r`   rL   rM   r   r   )rP   Rr{   rS   s       rU   test_inputs_and_edge_casesz)Random_K_Tests.test_inputs_and_edge_cases   sy   )Q''')Q***)Q5111)QQ///)QC000*aQ/// 	4 	4Aj!R3333*aQ666*aQu===r 	1 	1AQQqAYYYa111QQqAYYYQ0000	1 	1rW   c                 "   t          d          D ]r}t          |dz             D ]]}t          ||          }|                     t          |          |           |                     |                                |           ^st          d          D ]|}t          d          }t          d|          }t          ||          }|                     t          |          |           |                     |                                |           }d S )Nr   r\   rI   '  r   )rL   r   rM   rl   rs   r   r	   )rP   rS   r{   rR   rQ   s        rU   ru   zRandom_K_Tests.test_count   s   r 	/ 	/A1q5\\ / /QNN  Q+++  A..../
 s 	+ 	+A&!!A1AAASVVQ'''QWWYY****	+ 	+rW   c                 <   d}t          |          }t          d          D ]f}t          dd          }t          ||          }|                     |                                |           ||z  }|                                r d S g|                                  d S )N        (   )r   rL   r	   r   rM   rs   allfail)rP   rS   cumrQ   r{   rR   s         rU   test_active_bitszRandom_K_Tests.test_active_bits   s    Ahht 	 	ABAAAQWWYY***1HCwwyy  IIKKKKKrW   N   )      c           
         d}d}t          |dz             D ]}t          j        ||          }t                      }t          d          D ]L}|                    t          t          ||                               t          |          |k    r||z  } nM|                                  | 	                    |d|z             d S )Nr   r   r\   r   r   )
rL   mathcombsetaddr   r   rl   r   rM   )rP   rS   totalr{   expectedcombsrQ   s          rU   test_combinationsz Random_K_Tests.test_combinations   s     q1u 		 		AyAHEEE6]]  		.!Q88999u::))X%EE * 		Q'''''rW   c                     g }|                     t          dd                     dD ]%}|                     t          d|                     &|S )N,  r   )rI     i	  i    )appendr   )rP   resr{   s      rU   collect_code_branchesz$Random_K_Tests.collect_code_branches   sV    

8C$$%%%' 	+ 	+AJJxq))****
rW   c                    g }dD ]8}t          |           |                    |                                            9|                     |d         |d                    |                     |d         |d                    t	          |d         |d                   D ]\  }}|                     ||           t                       d S )N)	 	 r   r   r   r   r\   r   r   r   r   rM   zipassertNotEqualrP   rR   valitem0item1s        rU   	test_seedzRandom_K_Tests.test_seed        1 	3 	3CIIIHHT//1122221qt$$$1qt$$$!adOO 	. 	.LE5u----rW   c                 r   t                      }|j        }|j        }|j        }|                     t
          |d           |                      |d          t          |dz
                       |                      ||dz            t                                 |                      ||dz
            t          |dz
                       |                     t
          ||           dD ]H\  }} |t          ||z                      }|                     |                                |           It          d|          D ]p} ||          }|                     dt          |          cxk    o|k     nc            d}	|D ]}
|
r|	dd|	z
  z  z  }	|	dz  }	|                     |	||z             qd S )Nr   r\   r   ))g      ?0100)      ?rJ   )      ?10)      ?rY   )g      ?01)g      ?101)g      ?rK   r   rZ   )r>   op_seqKMr^   r`   rM   r   r   r   intrO   rL   rq   rl   )rP   rGr   r   r   sseqiqr{   s              rU   test_op_seqzRandom_K_Tests.test_op_seq   s   IIHCC 	*a+++1uQU||,,,16HJJ///1q54A;;///*a+++
 
	, 
	,DAq !CAJJ--CSXXZZ++++q! 
	' 
	'A!A$$COOAQOOOO!OOOO,,,A   a(AAHAAQA&&&&
	' 
	'rW   c                     t          d          }g dfdgdfdgdfddgdffD ]U\  }}|                    |          }|                     t          |                                |z
            dk                Vd S )	Ni@B i  r    r\   iq iظ r   )r>   combine_halfrq   rr   rs   )rP   r   r   meanrR   s        rU   test_combine_halfz Random_K_Tests.test_combine_half  s    I!!!Q!	
 	; 	;IC s##AOOC		D 011E9::::	; 	;rW   )rd   re   rf   rV   r   ru   r   r   sysversion_infor   r   r   r   r   rg   rW   rU   rw   rw   u   s        	G 	G 	G1 1 1 + + +   VCRaR 6)**( ( +*("    "$' $' $'L	; 	; 	; 	; 	;rW   rw   r   )r      c                       e Zd Zd ZdS )Random_P_Not_Implementedc                 J    |                      t          t          dd           d S )NrI   r   )r^   NotImplementedErrorr   rP   s    rU   test_not_implementedz-Random_P_Not_Implemented.test_not_implemented  s#    -xdCCCCCrW   N)rd   re   rf   r   rg   rW   rU   r   r     s(        D D D D DrW   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Random_P_Testsc                    t          d          D ]}t          g d          }t          d          }t          g d          }t          |||          }|                     t          |          t                     |                     t          |          |           |                     |j	        |pt                                 d S )Nry   rF   rz   )        -C6?皙?r   ?rZ   )rL   r   r   r   rq   rN   r   rM   rl   rE   r   )rP   rQ   rE   rS   r   rR   s         rU   rV   zRandom_P_Tests.test_basic  s    s 	G 	GA33344F#A88899AAv&&AOODGGX...SVVQ'''QXv'E1C1E1EFFFF	G 	GrW   c           	      n   t           }|                     t          |           |                     t          |d           |                     t          |dd           |                     t          |d           |                     t          |dd           |                     t          |dd           |                     t          |ddd	           |                     t          |d
dd	           |                      |d          t                                 t          d          D ]}|                      ||d          t          |                     |                     t           ||d                    |           |                      ||d          t          |                     d S )Nr   r\   r~   r[   g      g      ?r   g333333?r]   r   r   rD   r   rk   )
r   r^   r_   r`   rM   r   rL   r   rl   r   )rP   r   rS   s      rU   r   z)Random_P_Tests.test_inputs_and_edge_cases%  s   )Q''')Q---)Q5111*a,,,*aD111*ac222*aD%888*aS???1xzz***r 	1 	1AQQq!WWeAhh///S1c^^Q///QQqAYYYQ0000	1 	1rW   c                     t          d          }|                     t          |                                dz
            dk               d S rp   )r   rq   rr   rs   rt   s     rU   test_defaultzRandom_P_Tests.test_default5  sA    Z  AGGII	122f<=====rW   c           	         t          d          D ]}t          t          dd          t          dd          g          }t          g d          }t          j        ||z  d|z
  z            }t          ||          }|                     t          |          |           |                     t          |
                                ||z  z
            t          dd|z            k                d S )	Nr   r}   rz   rI   r   )r   gMbP?g{Gz?皙?r   r   r   rZ   r   )rL   r   r   r   sqrtr   rM   rl   rq   rr   rs   max)rP   rQ   rS   r   sigmarR   s         rU   ru   zRandom_P_Tests.test_count:  s    s 	I 	IA	!S))9S$+?+?@AAAAAABBAIa!esQw/00EAASVVQ'''OOC		AE 122SBJ5G5GGHHHH	I 	IrW   c                 *   g }|                     t          d                     |                     t          dd                     |                     t          dd                     dD ]%}|                     t          d|                     &|S )N    r   gMb`?   g?)r   r   r   g<Nё\?gffffff?   )r   r   )rP   r   r   s      rU   r   z$Random_P_Tests.collect_code_branchesC  s    

8B<<   

8E5))***

8B$$%%%- 	) 	)AJJxQ''((((
rW   c                    g }dD ]8}t          |           |                    |                                            9|                     |d         |d                    |                     |d         |d                    t	          |d         |d                   D ]\  }}|                     ||           t                       d S )N)@ A r   r   r   r   r\   r   r   r   s        rU   r   zRandom_P_Tests.test_seedQ  r   rW   c                 x    t                      }d|j        dz   z  }|                     |j        |k               d S )NrZ   r\   )r>   r   rq   SMALL_P)rP   r   limits      rU   test_small_p_limitz!Random_P_Tests.test_small_p_limit`  s;     IIqsQw	E)*****rW   N)
rd   re   rf   rV   r   r   ru   r   r   r   rg   rW   rU   r   r     s        G G G1 1 1 > > >
I I I    + + + + +rW   r   c                   .    e Zd Zg dZd Zd Zd Zd ZdS )
PrimeTests)Yr   r      r   r                     %   )   +   /   5   ;   =   C   G   I   O   S   Y   a   e   g   k   m   q                                                                           i  i  i  i  i  i  i  i%  i3  i7  i9  i=  iK  iQ  i[  i]  ia  ig  io  iu  i{  i  i  i  i  i  i  i  i  i  i  i  i  i  i  c                    t           }|                     t          |dd           |                     t          |d           |                     t          |d           |                     t          |dd           |                     t          |dd           |                     t          |dd	           |                     t          |dd	
           d S )Nr   r\   z1.0r[   r   r}   rH   )r]   r]   rD   )r#   r^   r_   r`   )rP   Ps     rU   rc   zPrimeTests.test_errorst  s    )Q1---*a///*a,,,)Q1---)Qu555*aE222*a599999rW   c           	         t          d          D ]}t          g d          }t          d          }t          |||          }|                     t          |          |           |                     |j        |pt                                 |r$dgd |                    d          D             z   }nd |                    d          D             }|                     || j	        d t          |                              d S )N   rF   r\   r   c                     g | ]
}d |z  dz   S )r   r\   rg   .0r   s     rU   
<listcomp>z-PrimeTests.test_explitcit.<locals>.<listcomp>  s     <<<1QUQY<<<rW   c                     g | ]}|S rg   rg   r%  s     rU   r'  z-PrimeTests.test_explitcit.<locals>.<listcomp>  s    ...Qq...rW   )
rL   r   r   r#   rM   rl   rE   r   searchprimes)rP   rS   rE   oddrR   lsts         rU   test_explitcitzPrimeTests.test_explitcit~  s   s 
	: 
	:A33344Fa..C1fc**ASVVQ'''QXv'E1C1E1EFFF /c<<<<<<..!((1++...S$+is3xxi"89999
	: 
	:rW   c           	         d}t          |          }d|d d<   t          t          t          j        |          dz                       D ]}||         rd|||z  d |<   |                     t          |                    ddd                    | j                   t          d          D ]}t          |          }t          dd	g          }t          ||
          }|                     ||d |                    |                     |j        |           t          |dz  |d          }|                     ||dd d                    |                     ||d|d                    t          d          D ]}t          dd          }t          dd          }	||z  |	z   }|                     t          |          |d |                    |                     t          |dz  d          |d|d                    |                     t          |          |           |                     t          |dz  d          |dd d                    d S )Nr   r   r   rZ   r\   i  rk   rG   rH   rD   Tr+  r   rI   r[   )r   rL   r   r   r   rM   listr)  r*  r   r   r#   rE   r	   )
rP   Ncr   rQ   rS   rE   rR   rT   rb   s
             rU   test_cmpzPrimeTests.test_cmp  s[   GG"1"s49Q<<#-..// 	" 	"At " !!a%*1*ahhq!S1122DK@@@r 		* 		*A!AXu-..F1V,,,AQ"1"&&&QXv...166t444AQ!$Q$(((Q!Aa%))))r 	B 	BA"c""AAAA	AZ]]AbqbE222ZQA666!Aa%AAAAA***AF222AaddG<<<<<rW   c                 h   dD ]-\  }}}}t          |          }|                     t          |          |           |                     |                                |           |                     t	          |          |           |                     t	          |d          |           t          |dz  d          }|                     t          |          |dz             |                     |                                dz   |           |                     ||dd d                    /d S )N))r   r}   r   W   )rI      $   )r      i_) ic)r     i̇W l   i{" r   r\   r/  )r#   rM   rl   rs   r$   )rP   rS   rs   sum_p	sum_sqr_prR   rT   s          rU   ru   zPrimeTests.test_count  s$   +
 	) 	)&AueY 1ASVVQ'''QWWYY...[^^U333[A..	:::16q)))ASVVQ!V,,,QWWYY]E222Q!$Q$((((	) 	)rW   N)rd   re   rf   r*  rc   r-  r3  ru   rg   rW   rU   r   r   i  sa          F: : :: : := = =<) ) ) ) )rW   r   c                   T    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
S )PPrintTestsc                 h    t                      }t          | |           |                                S )N)stream)r   r   getvalue)rR   ra   s     rU   get_code_stringzPPrintTests.get_code_string  s,    JJqzz||rW   c                     t          |                     |                    }|                     ||           |                     t          |          t          |                     d S N)evalrB  rM   rN   rP   rR   rT   s      rU   
round_tripzPPrintTests.round_trip  s[    %%a(())Aa$q''*****rW   c                     t          d          }|                     |                     |          d           |                     |           d S )N110zbitarray('110')
)r   rM   rB  rG  rt   s     rU   test_bitarrayzPPrintTests.test_bitarray  sJ    UOO--a002EFFFrW   c                     t          d          }|                     |                     |          d           |                     |           d S )Nr   zfrozenbitarray('01')
)r   rM   rB  rG  rt   s     rU   test_frozenbitarrayzPPrintTests.test_frozenbitarray  sL    4  --a002JKKKrW   c                 P   t          d          }t          ddd          D ]}t          dd          D ]}t                      }t          ||||           |                                }|                     t          |          |           |                    d          }|                                d d         D ]%}|                     t          |          |           &|                    d	          D ](}| 
                    t          |          |k                )d S )
N   r      r   r\   )r@  groupwidthz
bitary(')
r[   
)r   rL   r   r   rA  rM   rE  r    splitrl   rq   )	rP   rR   rQ  rS   ra   r   r   rP  lines	            rU   test_formattingzPPrintTests.test_formatting  s$   SMM2sB'' 
	7 
	7E1b\\ 	7 	7JJq!59999JJLL  a!,,,GGM**WWYYss^ 4 4E$$SZZ3333GGDMM 7 7DOOCII$566667	7
	7 
	7rW   c                 z    d dddgt                      t          d          fD ]}|                     |           d S )Nasdr\   r   rK   )r   r   rG  rt   s     rU   test_fallbackzPPrintTests.test_fallback  sK    uq!fhjj.2E2EE 	 	AOOA	 	rW   c                 @    G d dt                     } |            }|                     |          }|                     |d           t          |          }|                     ||           |                     t	          |          t	          |                     d S )Nc                       e Zd ZdS )&PPrintTests.test_subclass.<locals>.FooN)rd   re   rf   rg   rW   rU   Foor[    s        DrW   r\  zFoo()
)r   rB  rM   rE  rN   )rP   r\  rR   coderT   s        rU   test_subclasszPPrintTests.test_subclass  s    	 	 	 	 	( 	 	 	 CEE##A&&y)))JJAa$q''*****rW   c                 n    t          d          D ]$}|                     t          |                     %d S )Nr   )rL   rG  r   rP   rS   s     rU   test_randomzPPrintTests.test_random  s<    s 	( 	(AOOGAJJ''''	( 	(rW   c                    t          j                    }t          j                            |d          }t          d          }	 t          |d          5 }t          ||           d d d            n# 1 swxY w Y   t          |d          5 }t          |	                                          }d d d            n# 1 swxY w Y   | 
                    ||           t          j        |           d S # t          j        |           w xY w)Ntestfiler   wr   )tempfilemkdtempospathjoinr   openr   rE  readrM   shutilrmtree)rP   tmpdirtmpfilerR   fofirT   s          rU   	test_filezPPrintTests.test_file  s[   !##',,vz22dOO	"gs## rq"              gs## $rOO$ $ $ $ $ $ $ $ $ $ $ $ $ $ $Q"""M&!!!!!FM&!!!!sT   C1 A1%C1 1A55C1 8A59C1 "B:.C1 :B>>C1 B>C1 1DN)rd   re   rf   staticmethodrB  rG  rJ  rL  rU  rX  r^  ra  rr  rg   rW   rU   r>  r>    s          \
+ + +
  
  
7 7 7  	+ 	+ 	+( ( (" " " " "rW   r>  c                   &    e Zd Zd Zd Zd Zd ZdS )
StripTestsc                    |                      t          t          d           |                      t          t          t                      d           |                      t          t          t                      d           t          d          }|                     t          |          t          d                     |                     t          |d          t          d                     |                     t          |d          t          d	                     t          d          }t          |d          }|                     |t          d	                     |                     t          |          t                     d S )
N0110{   up000101100000001011left10110000both1011)	r^   r_   r    r   r`   assertEQUALr   rM   rN   rP   rR   rT   r2  s       rU   test_simplezStripTests.test_simple  s3   )UF333)UHJJ<<<*eXZZ>>>]##q8I#6#6777q&))8J+?+?@@@q&))8F+;+;<<<=))!VHV,,---a.11111rW   c                    t          d          D ]b}t          d          }t          g d          }t          |          }t	          ||          }|                     t          |          t                     |                     t          |          d           |                     |t          |                     t          |          }t	          ||          }|                     t          |          t                     |                     t          |          d           |
                    d           t	          ||          }|                     |t          |                     dd S )NrC   r   )r|  rightr~  r   r\   )rL   r   r   r   r    rM   rN   r   rl   r   setallr   )rP   rQ   rS   moderR   r2  rT   s          rU   test_zeros_oneszStripTests.test_zeros_ones  s9   r 	) 	)A"A33344DaAaAT!WWh///SVVQ'''Qa)))q!!AaAT!WWn555SVVQ'''HHQKKKaAQQ((((!	) 	)rW   c           	      <   |                                  D ]}|                                }t          |          }|                                }dt	          |                    d          |j                  fdt	          |                    d          |j                  fdt	          |                    d          |j                  ffD ]\  }}t          ||          }| 	                    ||           | 
                    t          |          t                     | 	                    ||           t          ||          }| 	                    ||           | 
                    t          |          t                     | 	                    ||           ΐd S )Nr|  rJ   r  r~  )randombitarrayscopyr   rO   r   lstriprE   rstripr    r  rM   rN   )rP   rR   rT   ra   r   r  r   r2  s           rU   ra  zStripTests.test_random&  sq   %%'' 	' 	'AAq!!AAhqxx}}ah??@hqxx}}ah??@hqwws||ah??@ ' '	c
 !TNN  C(((  a(333  A&&&!TNN  C(((  a.999  A&&&&'		' 	'rW   c                 ^   t          d          D ]}t          dd          }t          |          }|                    d           d|t	          |          <   |                     t          |d          t          d                     |                     t          |          |           d S )Nr   r\   r   r   r~  rK   )rL   r	   r   r  r   rM   r    rl   )rP   rQ   rS   rR   s       rU   test_one_setzStripTests.test_one_set:  s    r 	( 	(A5!!AAHHQKKKAillOU1f--x}}===SVVQ''''	( 	(rW   N)rd   re   rf   r  r  ra  r  rg   rW   rU   ru  ru    sP        2 2 2) ) )&' ' '(( ( ( ( (rW   ru  c                   \    e Zd Zed             ZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )CountN_Testsc                 p    ||                      dd|          }}||k     r|| |         z  }|dz  }||k     |S )z2return lowest index i for which a[:i].count() == nr\   r   )rs   )rR   rS   r   js       rU   r!   zCountN_Tests.count_nG  sN     !''!Q""1!ee1IAFA !ee rW   r\   c                     |                      |                    |d|          |           |dk    r|                      |d           d S |                      ||dz
           |           d S Nr   r\   )rM   rs   )rP   rR   rS   r   vs        rU   check_resultzCountN_Tests.check_resultP  sq    Aq))1---66Q"""""Qq1uXq)))))rW   c                 V   t                      }|                     t          |d          d           |                     t          |dd          d           |                     t          |dd          d           |                     t          t          |d           |                     t
          t          dd           |                     t
          t          |d           |                     t          t          |dd           |                     t          dt          |d           d S )Nr   r\   rY   g      @r   z#n = 1 larger than bitarray length 0)r   rM   r!   r^   r`   r_   assertRaisesMessagert   s     rU   
test_emptyzCountN_Tests.test_emptyW  s   JJA***Aq))1---Aq))1---*gq!444)Wb!444)Wa555*gq!Q777   .,-4a	< 	< 	< 	< 	<rW   c           	         t          d          }|                                }|                     t          |          d           |                     |                                d           |                     |                    d          d           |                     t          |d          d           |                     t          |dd          d           |                     t          |dd          d           |                     t          |dd          d	           |                     t          |d
          d           |                     t          |d
d          d           |                     t          |d          d           |                     t          dt
          |d           |                     t          dt
          |d           |                     t          dt
          |dd           |                     t          dt
          |dd           dD ]}t          |                    |          dz             D ]}t          |||          }| 	                    ||||           |                     |d |                             |          |           |                     ||                     |r|n| |                     | 
                    ||           d S )N01111101111101111101111100111101111101111101110000   r   r   r   r   r   r   r   rk   r   r\   -   znon-negative integer expectedr[   z%n = 49 larger than bitarray length 481   z,n = 12 exceeds total count (a.count(0) = 11)z,n = 38 exceeds total count (a.count(1) = 37)&   r   r\   )r   r  rM   rl   rs   r!   r  r`   rL   r  r  )rP   rR   rT   r  rS   r   s         rU   r  zCountN_Tests.test_simplec  s   GHHFFHHQ$$$B'''R(((A***Aq))1---Aq))2...B**B///B,,,B**B///B,,,  -L!(!R	1 	1 	1 	   .-.5q"	> 	> 	> 	   .56=q"a	I 	I 	I 	   .56=q"a	I 	I 	I  	E 	EA1771::>** E EAq!$$!!!Q1---  2A2Q333  DLLaaR$C$CDDDD	E
 	ArW   c           	         t          d          }|                     t          |          d           |                     |                                d           |                     t	          |d          d           |                     t	          |d          d           |                     t	          |d          d           |                     t          t          |d           |                     t          t          |d	           |                     t          t          |d
           t          d	          D ]'}|                     ||t	          ||                     (d S )N!001111101111101111101111100111100!      r   r   r   r   r[   r6  "   )	r   rM   rl   rs   r!   r^   r`   rL   r  rP   rR   rS   s      rU   rL  z CountN_Tests.test_frozenbitarray  s4   >??Q$$$B'''A***B,,,B,,,*gq"555*gq"555*gq"555r 	3 	3AaGAqMM2222	3 	3rW   c                    t          dd          }t          |          }|                     t          ||          |           |                     t
          t          |dd           |                     t
          t          ||dz              t          d          D ]6}t          d|          }|                     t          ||          |           7d S )Nr\   順 r   rk   )r	   r   rM   r!   r^   r`   rL   rP   rS   rR   rQ   r   s        rU   	test_oneszCountN_Tests.test_ones  s    AwGGA****gq!Q777*gq!a%888r 	/ 	/A1AWQ]]A....	/ 	/rW   c                    t          dd          }t          |          }|                     t          |d          d           |                     t
          t          |d           t          d          D ]t}|                    d           t          |          }d||<   |                     t          |d          |dz              |                     t
          t          |d           ud S )Nr\   r  r   rk   r   )	r	   r   rM   r!   r^   r`   rL   r  r   r  s        rU   r  zCountN_Tests.test_one_set  s    Aw!HHA****gq!444r 	9 	9AHHQKKK!AAaDWQ]]AE222j'1a8888	9 	9rW   c                     t          dd          D ]h}t          |          }d|d<   |                     t          |d          |           |dk    rd}nd}|                     t
          |t          |d           id S )Nr\   r   r[   z#n = 2 larger than bitarray length 1z*n = 2 exceeds total count (a.count(1) = 1)r   )rL   r   rM   r!   r  r`   )rP   r1  rR   msgs       rU   	test_lastzCountN_Tests.test_last  s    q$ 	E 	EAaAAbEWQ]]A...Avv;B$$Zgq!DDDD	E 	ErW   c                     t          d          }|                     |                                d           dD ],\  }}|                     t          ||          dz
  |           -d S )Nr   r:  ))r   r   )rI   i  )r   i  r\   )r#   rM   rs   r!   )rP   rR   rS   r   s       rU   test_primeszCountN_Tests.test_primes  st    vD)))# 	3 	3DAq WQ]]Q.2222	3 	3rW   c           	         t          d          D ]0}t          dd          }t          |          }t          d          }|                    |            t          t          d                    D ]}||t          |          <   |                    |          }t          |||          }|                     ||||           |dz   }| 	                    t          d|||fz  t          |||           t          d          D ];}t          d|          }t          |||          }|                     ||||           <2d S )NrI   r  r   r\   z-n = %d exceeds total count (a.count(%d) = %d)rk   r   )rL   r	   r   r   r  r   rs   r!   r  r  r`   )rP   rQ   r1  rR   r  tcr   rS   s           rU   
test_largezCountN_Tests.test_large  sV   s 	. 	.A))AAAAHHUOOO9S>>** $ $"#)A,,B2q!!AaQ***QA$$Z 2:=>2J2G%,aA7 7 7 2YY . .ArNNAq!$$!!!Q1----.	. 	.rW   N)r\   )rd   re   rf   rs  r!   r  r  r  rL  r  r  r  r  r  rg   rW   rU   r  r  E  s          \* * * *
< 
< 
<! ! !F3 3 3/ / /
9 
9 
9	E 	E 	E3 3 3. . . . .rW   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )BitwiseCountTestsc           	         t          d          D ]}t          t          |g                    }|                                }|                     t          |t          d                    d           |                     t          |t          d                    |           |                     t          ||          |           |                     t          |t          d                    |           |                     t          |t          d                    d           |                     t          ||          |           |                     t          |t          d                    |           |                     t          |t          d                    d|z
             |                     t          ||          d           d S )N   r   r   )
rL   r   	bytearrayrs   rM   r&   r   r   r'   r(   )rP   r   rR   cnts       rU   test_count_bytez!BitwiseCountTests.test_count_byte  s   s 	1 	1AA3((A''))CYq%((33Q777Yq$q''22C888Yq!__c222Xaq22C888Xaa111555Xa^^S111Yq%((33S999Yq$q''22AG<<<Yq!__a0000	1 	1rW   c           
      L   t          d          }|                                }t          d          }|                                }|                     t          ||          d           |                     t	          ||          d           |                     t          ||          d           t          t          t
          fD ]}|                     t          |           |                     t          ||           |                     t          |||d           |                     t          ||d           |                     t          |d|           |                     t          ||d           |                     ||           |                     ||           |	                    d	           t          t          t
          fD ]X}|                     t          |||           |                     t          |t          d
d          t          dd                     Yd S )N001111010011r   r   r   rY   rK   r}   r\   rI  rH   r   rG   )r   r  rM   r&   r'   r(   r^   r_   r  r   r`   )rP   rR   aarT   bbra   s         rU   test_1zBitwiseCountTests.test_1  s   XVVXXXVVXX1a!,,,!Q+++1a!,,,Hi/ 	2 	2Ai+++iA...iAq!444iAr222iC333iAq1111BB	Hi/ 	9 	9Aj!Q222j!&ue44&uh779 9 9 9	9 	9rW   c                    t          d          }t          d          }|                     t          ||          d           |                     t          ||          d           |                     t	          ||          d           d S )Nr  r  r   r   r   )r   rM   r&   r'   r(   rF  s      rU   test_frozenzBitwiseCountTests.test_frozen  s|    8$$8$$1a!,,,!Q+++1a!,,,,,rW   c                    t          d          D ]}t          d          }t          |          }t          ||j                  }|                     t          ||          ||z                                             |                     t          ||          ||z                                             |                     t          ||          ||z                                             d S )NrI   r   )
rL   r   r   r   rE   rM   r&   rs   r'   r(   )rP   rQ   rS   rR   rT   s        rU   ra  zBitwiseCountTests.test_random  s    s 	? 	?A$A!A18$$AYq!__q1ummoo>>>Xa^^q1ummoo>>>Yq!__q1ummoo>>>>	? 	?rW   c                 :   |                                  D ]}t          |          }t          ||j                  }|                     t          ||z            t          ||          dk               |                     t          ||          t          ||z                       |                     t          ||z            t          ||          dk               |                     t          ||z            t          |          pt          |                     |                     t          ||z            t          ||          dk               |                     t          ||z            ||k               |                     t          ||z            t          ||          |k               |                     t          ||z            t          |          ot          |                     |                     t          ||z            t          ||          |k               |                     t          ||z            t          ||          |k               |                     t          ||z            || k               d S Nr   )r  rl   r   rE   rM   anyr&   r)   r'   r(   r   rP   rR   rS   rT   s       rU   	test_misczBitwiseCountTests.test_misc  s*   %%'' 	2 	2AAA18$$ASQZZ1a1)<===WQ]]CAJJ777SQZZ!Q!);<<<SQZZQ)93q66:::SQZZ1a1)<===SQZZa000 SQZZ1aA)=>>>SQZZQ):CFF;;;SQZZ!Q1)<===SQZZ1aA)=>>>SQZZqb1111)	2 	2rW   N)rd   re   rf   r  r  r  ra  r  rg   rW   rU   r  r    s_        1 1 19 9 96- - -? ? ?2 2 2 2 2rW   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	BitwiseAnyTestsc           	         t          d          }t          d          }|                     t          ||                     |                     t
          t                     |                     t
          t          |d           |                    d           |                     t          t          ||           |                     t          t          t          dd          t          dd                     d S )	N01010111r}   r\   r   rG   11rH   )r   r   rq   r)   r^   r_   r   r`   rF  s      rU   rV   zBitwiseAnyTests.test_basic)  s    6""V1&&&)W---)Wa333	*gq!444*g"422"4//	1 	1 	1 	1 	1rW   c                 b   d}t          d          D ]}t          d|          }t          ||          }t          ||          }t          d|          }t          ||          }t          ||          }t          |          ot          |          o||v p||v }	t          t          |          t          |          z            }
|                     |	|
           t          |          t          |          }}dx|||<   |||<   |                     t          ||          |	           d S )NrI   r   r   r\   )rL   r	   boolr   rM   r   r)   )rP   rS   rQ   i1j1r1i2j2r2res1res2a1a2s                rU   test_overlapzBitwiseAnyTests.test_overlap5  s"   s 	4 	4AABQBr2BABQBr2B 88CRCbBh.B"(DB#b'')**DT4(((a[[(1++B$%%Br"uI2b5	WR__d3333!	4 	4rW   c           
         d}t          d          D ]}|                     |          }|                     |          }t          |          |         }t          |          |         }t          |          t          |          }}dx||<   ||<   |                     t	          ||          t          t          |          t          |          z                       d S )NrI   r   r\   )rL   random_slicer   rM   r)   r  r   )	rP   rS   rQ   s1s2r  r  r  r  s	            rU   test_commonzBitwiseAnyTests.test_commonI  s    s 	G 	GA""1%%B""1%%Bq"Bq"Ba[[(1++BBrFRVWR__d3r77SWW3D.E.EFFFF	G 	GrW   c                    t          ||          }|                     t          |          t                     |                     |t          ||                     |                     |t	          ||z                       |                     |||z                                             |                     |t          ||          dk               d S r  )r)   rM   rN   r  r  r&   )rP   rR   rT   r   s       rU   checkzBitwiseAnyTests.checkU  s    AqMMa$'''GAqMM***CAJJ'''QUKKMM***IaOOa/00000rW   c                     dD ]_\  }}}t          |          }t          |          }|                     t          ||          |u            |                     ||           `d S )N))rY   rY   F)rJ   rK   F)rJ   rJ   F)rK   rK   T)0001111100F)z
00001011 1z
01000100 1T)r   rq   r)   r  rP   rR   rT   r   s       rU   r-  zBitwiseAnyTests.test_explitcit]  sq    4 
	 
	JAq3 AAOOGAqMMS0111JJq!
	 
	rW   c                     |                                  D ]<}t          |          }t          ||j                  }|                     ||           =d S rD  )r  rl   r   rE   r  r  s       rU   ra  zBitwiseAnyTests.test_randomj  sZ    %%'' 	 	AAA18$$AJJq!	 	rW   c                     t          dd          D ]^}t          |          }t          |          }t          |          }d||<   |                     ||         t          ||                     _d S )Nr\   r   )rL   r   r   r   rM   r)   )rP   rS   rR   rT   r   s        rU   test_onezBitwiseAnyTests.test_onep  sr    q# 	2 	2AaA

A!AAaDQqT71a==1111	2 	2rW   N)
rd   re   rf   rV   r  r  r  r-  ra  r  rg   rW   rU   r  r  '  s        
1 
1 
14 4 4(
G 
G 
G1 1 1    2 2 2 2 2rW   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )SubsetTestsc           	         t          d          }t          d          }|                     t          ||                     |                     t          ||                     |                     t          t                     |                     t          t          |d           |                     t          t          d|           |                     t          t          |d           |                    d           |                     t          t          ||           |                     t          t          t          dd          t          d	d
                     d S )Nr  r  rY   rK   r}   r\   r   rG   r  rH   )	r   r   rq   r*   assertFalser^   r_   r   r`   rF  s      rU   rV   zSubsetTests.test_basic|  s   6""Vq!%%%1&&&)V,,,)VQ333)VS!444)VQ222	*fa333*f"422"4//	1 	1 	1 	1 	1rW   c                    t          ||          }|                     t          |          t                     |                     ||           |                     ||z  |k    |           |                     ||z  |k    |           d S rD  )r*   rM   rN   r  )rP   rR   rT   r   r   s        rU   r  zSubsetTests.check  s    1aLLa$'''C   Q!S)))Q!S)))))rW   c                 x    dD ]6\  }}|                      t          |          t          |          d           7d S )N))rY   rY   )rJ   rK   )rJ   rJ   )rK   rK   )000111)r  r  )	000010111	010011111Tr  r   rF  s      rU   	test_TruezSubsetTests.test_True  sH    1 	7 	7DAq JJx{{HQKK6666	7 	7rW   c                 x    dD ]6\  }}|                      t          |          t          |          d           7d S )N))rK   rJ   )1101r  )
0000101111
0100111011Fr  rF  s      rU   
test_FalsezSubsetTests.test_False  sF    3 	8 	8DAqJJx{{HQKK7777	8 	8rW   c                 Z   |                      d          D ]}|                                }d|t          t          |                    <   |                     ||d           |                     ||||k               |                    d           |                     ||d           d S )Nr\   startT)r  r  r   rl   r  r  rF  s      rU   ra  zSubsetTests.test_random  s    %%A%.. 		# 		#AA#$AiA JJq!T"""JJq!Q!V$$$HHQKKKJJq!T""""		# 		#rW   N)rd   re   rf   rV   r  r  r  ra  rg   rW   rU   r  r  z  s_        1 1 1* * *7 7 78 8 8

# 
# 
# 
# 
#rW   r  c                        e Zd Zd Zd Zd ZdS )CorrespondAllTestsc           	         t          d          }t          d          }|                     t          ||          d           |                     t
          t                     |                    d           |                     t          t          ||           |                     t          t          t          dd          t          dd                     d S )	Nr  r  )r\   r\   r\   r\   r\   r   rG   r  rH   )r   r   rq   r+   r^   r_   r   r`   rF  s      rU   rV   zCorrespondAllTests.test_basic  s    6""Vq!,,l;;;)^444	*na;;;*n"422"4//	1 	1 	1 	1 	1rW   c           	          dD ]D\  }}}|                      t          t          |          t          |                    |           Ed S )N))rY   rY   )r   r   r   r   )
0000011111
0000100111)r}   r\   r   r   )rM   r+   r   r  s       rU   r-  z!CorrespondAllTests.test_explitcit  sX     	L 	LIAq#
 ^HQKK!EEsKKKK	L 	LrW   c           	         t          d          D ]u}t          d          }t          |          }t          ||j                  }t          ||          }|                     |d         t          | |                      |                     |d         t          | |                     |                     |d         t          ||                      |                     |d         t          ||                     |                     |d         |t          ||          z
             |                     |d         |d         z   t          ||                     |                     t          |          |           wd S )NrI   i  r   r\   r   r   )rL   r   r   r   rE   r+   rM   r&   r'   r(   sum)rP   rQ   rS   rR   rT   r   s         rU   ra  zCorrespondAllTests.test_random  s]   s 	* 	*A$A!A18$$A A&&CSVYrA2%6%6777SVYr1%5%5666SVYq1"%5%5666SVYq!__555SVQ!Q%7888SVc!f_i1oo>>>SXXq))))	* 	*rW   N)rd   re   rf   rV   r-  ra  rg   rW   rU   r  r    sD        	1 	1 	1L L L* * * * *rW   r  c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )ByteSwapTestsc                    t          d          }t          |d           |                     |t          d                     t          |           |                     |t          d                     t          d          }t          |d           |                     |t          d                     t          |d           |                     |t          d                     d S )	N   ABCDr   s   BADCs   CDABs   ABCDEFr   s   CBAFEDr\   )r  r,   rM   rt   s     rU   test_basic_bytearrayz"ByteSwapTests.test_basic_bytearray  s    gAIg..///Ig..///i  AIi00111AIi0011111rW   c                    t          d          }t          |           |                     |t          d                     t          d          }|                                }|                                 t          |           |                     |t          d                     t          |           |                     ||           d S )Nz11110000 01010101z01010101 11110000z01111000 1001z10010000 0111)r   r,   rM   r  tobytesrF  s      rU   test_basic_bitarrayz!ByteSwapTests.test_basic_bitarray  s    ())H%899:::_%%FFHH			H_55666ArW   c                 |   t          j        d          }t          j        D ]}|dk    r	t          j        ||          }|                     t          |          |j        z  d           |                                 t          ||j                   |                     |                                |           d S )N@   u)	rg  r   array	typecodesrM   rl   itemsizer,   r  )rP   r   typecoderR   s       rU   test_basic_arrayzByteSwapTests.test_basic_array  s    JrNN 	- 	-H3Ha((ASVVaj0"555JJLLLQ
###QYY[[!,,,,	- 	-rW   c                    t                      }t          |           |                     |t                                 t          d          D ]4}t          ||           |                     |t                                 5d S )Nr   r  r,   rM   rL   r  s      rU   r  zByteSwapTests.test_empty  sy    KKIKK(((r 	- 	-AQNNNQ	,,,,	- 	-rW   c                    t          d          }t          |           |                     |t          d                     t          d          D ]5}t          ||           |                     |t          d                     6d S )N   r   r  r  s      rU   test_one_bytezByteSwapTests.test_one_byte  s    gIg..///q 	4 	4AQNNNQ	' 2 23333	4 	4rW   c                 >   dt          d          fD ]#}|                     t          t          |           $t	          d          }t          d          }dD ]F}|                     t          t          ||           |                     t          t          ||           Gd S )Ns   AB   r	  r   )r[   r   r      )r   r^   BufferErrorr,   r  r   r`   )rP   rR   rT   rS   s       rU   rc   zByteSwapTests.test_errors
  s    r*** 	8 	8Ak8Q7777gRLL 	: 	:Aj(Aq999j(Aq9999	: 	:rW   c           	         t          d          D ]}t          d          D ]}t          j        ||z            }t          |          }t	          ||           g }t          |          D ]3}|||z  ||z  |z            }|                    |d d d                    4|                     |t          |                     d S )Nrk   r[   )rL   rg  r   r  r,   extendrM   )rP   rS   mr   rR   r,  r   rb   s           rU   
test_rangezByteSwapTests.test_range  s    r 		4 		4A2YY 4 4Jq1u%%aLLAq ( (A!a%A	/*AJJq2w''''  IcNN33334		4 		4rW   c           
          t          d          D ]`}t          j        |          }t          |          }t	          |           |                     |t          |d d d                              ad S )NrI   r[   )rL   rg  r   r  r,   rM   )rP   rS   r   rR   s       rU   test_reverse_bytearrayz$ByteSwapTests.test_reverse_bytearray"  so    s 	4 	4A
1A!AQKKKQ	!DDbD' 2 23333		4 	4rW   c                     t          d          D ]j}t          d|z            }|                                }t          |           |                                 |                     ||d d d                    kd S )NrI   r   r[   )rL   r   r  r,   bytereverserM   )rP   rS   rR   rT   s       rU   test_reverse_bitarrayz#ByteSwapTests.test_reverse_bitarray)  sx    s 	) 	)AAAAQKKKMMOOOQ$$B$((((	) 	)rW   N)rd   re   rf   r
  r  r  r  r  rc   r"  r$  r'  rg   rW   rU   r  r    s        2 2 2  
- 
- 
-- - -4 4 4
: 
: 
:
4 
4 
44 4 4) ) ) ) )rW   r  c                   &    e Zd Zd Zd Zd Zd ZdS )ParityTestsc                     dD ]g\  }}|                      t          t          |                    |u            |                      t          t          |                    |u            hd S )N)rY   r   )rK   r\   )0010011r\   )10100110r   )rq   r"   r   r   )rP   r   r   s      rU   r-  zParityTests.test_explitcit5  sn    J 	> 	>FAsOOF8A;;//36777OOF>!#4#455<====	> 	>rW   c                     t          d          D ]e}|                     t          t          |                    d           |                     t          t	          |                    |dz             fd S )N  r   r   )rL   rM   r"   r   r   r`  s     rU   r  zParityTests.test_zeros_ones:  sn    t 	5 	5AVE!HH--q111VDGG__a!e4444	5 	5rW   c                    t          ddg          }t          |          }d}t          d          D ]}|                     t	          |          |           |                     ||                                dz             |                     |j        |           |                     t          |          |           t          d          }|	                    |           ||z  }d S )NrG   rH   rD   r   r/  r   r\   )
r   r   rL   rM   r"   rs   rE   rl   r   r   )rP   rE   rR   parr   r  s         rU   ra  zParityTests.test_random?  s    5)**F###t 	 	AVAYY,,,S!''))a-000QXv...SVVQ'''AAHHQKKK1HCC	 	rW   c                 (   |                      t          t          d           |                      t          t          d           |                      t          t                     |                      t          t          t          d          d           d S NrY   r\   rI  )r^   r_   r"   r   r   s    rU   test_wrong_argszParityTests.test_wrong_argsL  sn    )VR000)VQ///)V,,,)VXe__a@@@@@rW   N)rd   re   rf   r-  r  ra  r4  rg   rW   rU   r)  r)  3  sU        > > >
5 5 5
  A A A A ArW   r)  c                   (    e Zd Zd Zd Zd ZddZdS )	SumIndicesUtilc           	      `   dD ]\  }}}t          |t          ddg                    t          |t          ddg                    fD ]e}|                      ||d          |           |                      ||d          |           |                     |t          |                     fd S )N)	)rY   r   r   )rJ   r   r   )rK   r   r   )r  r\   r\   )011r   r   )001r   r}   )0001100r   r6  )00001111   ~   )01100111 1101r  i}  rG   rH   r\   r   )r   r   r   rM   )rP   Sr   r  r  rR   s         rU   check_explicitzSumIndicesUtil.check_explicitV  s    
 		1 		1IAr2
 q&(E):";";<<$Q%/@(A(ABBD 1 1  1a"---  1a"---  HQKK0000	1		1 		1rW   c                 
   |                      t          |d           |                      t          |d           |                      t          |           dD ],}|                      t          |t          d          |           -d S )NrY   rZ   )r[   r   r   r}   rI  )r^   r_   r`   r   )rP   r?  r  s      rU   check_wrong_argszSumIndicesUtil.check_wrong_argsb  s    )Q+++)Q,,,)Q''' 	D 	DDj!Xe__dCCCC	D 	DrW   c           	      4   t          |          }|                      ||d          t          d t          |          D                                  |                      ||d          t          d t          |          D                                  d S )Nr\   c              3   $   K   | ]\  }}||V  d S rD  rg   r&  r   r  s      rU   	<genexpr>z/SumIndicesUtil.check_urandom.<locals>.<genexpr>k  s+      %F%FDAqA%Fa%F%F%F%F%F%FrW   r   c              3   *   K   | ]\  }}|||z  V  d S rD  rg   rE  s      rU   rF  z/SumIndicesUtil.check_urandom.<locals>.<genexpr>l  s/      %J%J1%Ja!e%J%J%J%J%J%JrW   )r   rM   r  	enumerate)rP   r?  rS   rR   s       rU   check_urandomzSumIndicesUtil.check_urandomi  s    aLL1a#%F%FIaLL%F%F%F"F"FGGG1a#%J%J	!%J%J%J"J"JKKKKKrW   r\   Fc                    t          |t          ddg                    }|                      |||          d           |                     |                                           t          t          |          |          }d||<   |dk    rt          |          nt          d |D                       }	|r9|                                 |dk    rdnd|z  dz
  }
|
||dz
  z  z  }
|
dz  }
|
|	z
  }	|rt          |          }|
                                }|                     |                                |r||z
  n|           |                      |||          |	           |                     ||           d S )	NrG   rH   r   r\   c              3       K   | ]	}||z  V  
d S rD  rg   r%  s     rU   rF  z.SumIndicesUtil.check_sparse.<locals>.<genexpr>u  s&      0H0H1Q0H0H0H0H0H0HrW   r   r   r  )r   r   rM   r  r  r   rL   r  invertr   r  rs   )rP   r?  rS   r{   r  freezeinvrR   indicesr   sum_onesr2  s               rU   check_sparsezSumIndicesUtil.check_sparsen  s   !VXu-..//1dQ'''!!!q1%%'
"aiic'lllS0H0H0H0H0H-H-H 	!HHJJJ AIIqq1q519HQU#HNHS.C 	"q!!AFFHHS$7AEEa8881dS)))ArW   N)r\   FF)rd   re   rf   r@  rB  rI  rQ  rg   rW   rU   r6  r6  T  s[        
1 
1 
1D D DL L L
     rW   r6  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
SSQI_Testsc                 :    |                      t                     d S rD  )r@  r?   r   s    rU   test_explicitzSSQI_Tests.test_explicit  s    E"""""rW   c                 :    |                      t                     d S rD  )rB  r?   r   s    rU   r4  zSSQI_Tests.test_wrong_args  s    e$$$$$rW   c                 D   t                      }dx}}t          d          D ]}}t          d          }|                    |           |r||z  }|||z  z  }|                     t          |d          |           |                     t          |d          |           ~d S )Nr   rI   r\   r   )r   rL   r   r   rM   r?   )rP   rR   sm1sm2r   r  s         rU   
test_smallzSSQI_Tests.test_small  s    JJcs 	/ 	/AAAHHQKKK qq1uU1a[[#...U1a[[#....	/ 	/rW   c                 <    |                      t          d           d S )N5'  )rI  r?   r   s    rU   test_urandomzSSQI_Tests.test_urandom  s    5&)))))rW   c           	          t          d          D ]P}t          dd          }t          d          }t          d          }|                     t          dd|||           Qd S )Nr   r\   r   iCB i  rS   r{   r  rM  rN  )rL   r	   r   rQ  r?   )rP   rQ   r  rM  rN  s        rU   test_sparsezSSQI_Tests.test_sparse  s{    q 	A 	AA1a==D ^^Fa..CeyC#'C  A A A A		A 	ArW   N)rd   re   rf   rU  r4  rZ  r]  r`  rg   rW   rU   rS  rS    sd        # # #% % %
/ 
/ 
/* * *A A A A ArW   rS  c                   &    e Zd Zd Zd Zd Zd ZdS )SumIndicesTestsc                     |                      t                     t          d          }|                     t          |d          d           |                     t          |d          d           d S )NrI   r\   )r  r7  r   r8  )r@  r$   r#   rM   rt   s     rU   rU  zSumIndicesTests.test_explicit  sm    K(((sOOQQ///%888QQ///88888rW   c                 :    |                      t                     d S rD  )rB  r$   r   s    rU   r4  zSumIndicesTests.test_wrong_args  s    k*****rW   c           	      P    dD ]"}|                      t          dd|dd           #d S )N)r\   r   i%j r   Tr_  )rQ  r$   )rP   r  s     rU   r  zSumIndicesTests.test_ones  sR     	@ 	@DkY!#'$  @ @ @ @	@ 	@rW   c           	         t          d          D ]o}t          ddg          }t          d          }t          dd          }t	          d          }t	          d          }|                     t          |||||           pd S )Nrk   i= i'	 r   r\   r   )rL   r   r   r	   r   rQ  r$   )rP   rQ   rS   r{   r  rM  rN  s          rU   r`  zSumIndicesTests.test_sparse  s    r 	D 	DA)**A%  A1a==D ^^Fa..Ck1avsCCCC	D 	DrW   N)rd   re   rf   rU  r4  r  r`  rg   rW   rU   rb  rb    sX        9 9 9+ + +@ @ @
D D D D DrW   rb  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
XoredIndicesTestsc                     dD ]o\  }}t          ||                                           t          ||                                           fD ]%}|                     t	          |          |           &pd S )N)r+  rJ   r   )rK   r   )r  r\   )r8  r   )r9  r   )r:  r   )r>  r   )r   random_endianr   rM   r%   )rP   r   r   rR   s       rU   rU  zXoredIndicesTests.test_explicit  s    , 	4 	4DAq q$"4"4"6"677$Q(:(:(<(<==? 4 4  Q33334	4 	4rW   c                    t           }|                     t          |d           |                     t          |d           |                     t          |           |                     t          |t          d          d           d S r3  )r%   r^   r_   r   )rP   Xs     rU   r4  z!XoredIndicesTests.test_wrong_args  ss    )Q+++)Q***)Q''')Q;;;;;rW   c                 l   g d}|                      d t          dd          D             |           t                      }d}t          d          D ]a}|                    d           ||z  }|                      t	          |          |           |dk     r|                      ||         |           bd S )N)r   r\   r   r   r}   r\   r   r   r   r\   r   r   r   r\   r   r   r  r\   r   c                 F    g | ]}t          t          |                    S rg   )r%   r   r%  s     rU   r'  z/XoredIndicesTests.test_ones.<locals>.<listcomp>  s&    EEE1+d1gg..EEErW   r\   rk   r   r   r   )rM   rL   r   r   r%   )rP   r,  rR   rb   r   s        rU   r  zXoredIndicesTests.test_ones  s    LLLEEaEEEsKKKJJt 	, 	,AHHQKKKFA[^^Q///2vv  Q+++	, 	,rW   c                 $   g d}t          d          }d}t          |                    d                    D ]W\  }}|                     t	          |d |                   |           |dk     r|                     ||         |           ||z  }Xd S )N)r   r   r\   r}   r   r   r   rk   r   r  r      7   r   r      r   r   r   r\   r   )r#   rH  r)  rM   r%   )rP   r,  r*  rb   r   r   s         rU   r  zXoredIndicesTests.test_primes  s    JJJD!!fmmA..// 	 	DAq[44a8882vv  Q+++FAA		 	rW   c                 b   d}t          |          t          t          |                    fD ]}t          t          j        d t          |          D                       }|                                }|                     t          |          |           |                     ||           d S )Nr\  c              3   $   K   | ]\  }}||V  d S rD  rg   rE  s      rU   rF  z6XoredIndicesTests.test_large_random.<locals>.<genexpr>  s+      'H'Hdaa'H'H'H'H'H'H'HrW   )	r   r   r   operatorxorrH  r  rM   r%   )rP   rS   rR   r   rT   s        rU   test_large_randomz#XoredIndicesTests.test_large_random  s    A,,y|| < <= 	# 	#A'H'Hill'H'H'HIICA[^^S111Q""""		# 	#rW   c                     |                                  D ]D}d}t          |          D ]\  }}|||z  z  }|                     t          |          |           Ed S r  )r  rH  rM   r%   )rP   rR   r2  r   r  s        rU   ra  zXoredIndicesTests.test_random  ss    %%'' 	0 	0AA!!  1QU
[^^Q////		0 	0rW   c                     t          d          }d}t          d          D ][}|                     t          |          |           t	          t          |                    }|                    |           ||z  }\d S )N   r   r   )r   rL   rM   r%   r   rl   rL  )rP   rR   r2  rQ   r   s        rU   
test_flipszXoredIndicesTests.test_flips  sz    SMMt 	 	A[^^Q///#a&&!!AHHQKKKFAA		 	rW   c                    g d}t          d          }d||<   t          |          }t          |dd          ||<   t          dd          D ]r}|                     t          |          d           |                    |           |                     t          |          |           |                    |           sd S )N)r\   r   r}   r   r  r   r  r{  r  r   r   rG   lengthrE   )r   r%   r5   rL   rM   rL  )rP   parity_bitsrR   r2  r   s        rU   test_error_correctz$XoredIndicesTests.test_error_correct  s    333CLL+NN!H===+q# 	 	A[^^Q///HHQKKK[^^Q///HHQKKKK		 	rW   N)rd   re   rf   rU  r4  r  r  rx  ra  r|  r  rg   rW   rU   rh  rh    s        4 4 4< < <, , ,	 	 	# # #0 0 0      rW   rh  c                 v    t          |           }|dk     r|S dt          | dd         | dd                   z   S )z5return number of uninterrupted intervals of 1s and 0sr   r\   Nr[   )rl   r(   )rR   rS   s     rU   runsr    s@    AA1uuy3B3122''''rW   c                   &    e Zd Zd Zd Zd Zd ZdS )IntervalsTestsc                    dg fddgfddgfdg dffD ]t\  }}t          |          }|                     t          t          |                    |           |                     t	          |          t          |                     ud S )NrY   rJ   )r   r   r\   rK   )r\   r   r\   z00111100 0000011))r   r   r   )r\   r   r  )r   r  r   )r\   r   r   )r   rM   r0  r-   r  rl   )rP   r   r,  rR   s       rU   rU  zIntervalsTests.test_explicit  s    Ryk"yk"#@@@B	 		0 		0FAs AT)A,,//555T!WWc#hh////		0 		0rW   c           	      0   t          dd          D ]}dD ]}|t          |g|                                           z  }|                     t	          t          |                    |d|fg           |                     t          |          d           d S )Nr\   rI   r  r   )rL   r   rk  rM   r0  r-   r  )rP   rS   r  rR   s       rU   test_uniformzIntervalsTests.test_uniform+  s    q# 	- 	-A - -!d&8&8&:&:;;;  ill!3!3q!Qi[AAA  a!,,,,-	- 	-rW   c                 z   |                                  D ]}t          |          }t          |          }t          |          D ]_\  }}}|                     t          |t                               |                     d|cxk    o|cxk     o|k    nc            ||||<   `|                     ||           d S r  )	r  rl   r   r-   r  
isinstancer  rq   rM   )rP   rR   rS   rT   valuer  stops          rU   ra  zIntervalsTests.test_random2  s    %%'' 	# 	#AAA

A&/ll & &"ud  E4!8!8999U 6 6 6 6T 6 6 6 6Q 6 6 6 6777 %%*Q""""	# 	#rW   c                    |                                  D ]}d t          |          D             }|                     t          |          t	          |                     t                      }|r|d         nd }|D ]D}|                     |dk               |                    |t          |g          z             | }E|                     ||           d S )Nc                      g | ]\  }}}||z
  S rg   rg   )r&  rQ   r  r  s       rU   r'  z1IntervalsTests.test_list_runs.<locals>.<listcomp>?  s"    HHHE4uHHHrW   r   )r  r-   rM   rl   r  r   rq   r   )rP   rR   alt_runsrT   r  r  s         rU   test_list_runszIntervalsTests.test_list_runs<  s    %%'' 	# 	#AHH9Q<<HHHHS]]DGG444

A#!tA"  
+++(A3--/000EQ""""	# 	#rW   N)rd   re   rf   rU  r  ra  r  rg   rW   rU   r  r    sP        
0 
0 
0- - -# # ## # # # #rW   r  c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )HexlifyTestsc                 |   g d}|D ]\  }}}t          |d          }t          |d          }|                     t          |d          |           |                     t          |d          |           |                     t	          |          |           |                     t	          |          |           d S )N))rY   rY   rY   )1000rK   8)z	0101 0110a656)z0100 1001 110129b49d)z0000 1100 1110 1111037f0cefrH   rG   )r   r  r1   rM   r0   )rP   databshex_lehex_bea_bea_les          rU   rU  zHexlifyTests.test_explicitN  s    
 
 
 #' 	3 	3BB&&DB))DVFE22D999VFH55t<<<VD\\6222VD\\62222	3 	3rW   c                 r   t          dd          }|                     t          |          d           |                     t          |d          d           |                     t          |dd          d           |                     t          |d          d           |                     t          |d	          d
           |                     t          |dd          d           |                     t          |dd          d           |                     t          |dd          d           d S )N1000 0000 0101 1111rG   10afr   r\   rY   z1 0 a fr   rP  z10 af-z10-afr   rQ   rP  sep10a_f, r  z10a, f)r   rM   r0   rt   s     rU   test_ba2hex_groupzHexlifyTests.test_ba2hex_group^  s!   *H55F+++1v...1b))62221y111+++W5551c**G444444g>>>1$///:::::rW   c                 \   |                      t          t                     |                      t          t          d            |                      t          t          d           |                      t          t          t	          d                     t	          dd          }|                      t          t          |d           |                      t          t          |d           |                      t          t          |dd           |                      t          t          |d	d
           d S )Nr   r   r  rG   r[   r  r\       r   z  )r^   r_   r0   r`   r   rt   s     rU   test_ba2hex_errorszHexlifyTests.test_ba2hex_errorsi  s    )V,,,)VT222)VU333 	*fhtnn===*H55*fa444*far:::)VQ4888*faE:::::rW   c                 >   |                      t          dt          z            t          d                     |                     t          dd          t          dd                     |                     t          dd          t          dd                     d S )	NzF1 FA %s f3 c0z#11110001 11111010 11110011 11000000s    a F rH   z	1010 1111a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0  1D                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              rG   z0000 1000 1011)rM   r1   r   r   r  r   s    rU   test_hex2ba_whitespacez#HexlifyTests.test_hex2ba_whitespacey  s     0: =>>!"GHH	J 	J 	J%00!+u55	7 	7 	7 ?JJ!"2H==	? 	? 	? 	? 	?rW   c                 p   |                      t          t          d           |                      t          t          dd           |                      t          t          dd           dD ]#}|                      t          t          |           $dD ]'}d}|                     t          |t          |d           (d S )	Nr   Fr\   r]   )01a7g89u   0€z0      )gagaagaaagar  z.invalid digit found for base16, got 'g' (0x67)rH   )r^   r_   r1   r`   r  )rP   r   r  s      rU   test_hex2ba_errorszHexlifyTests.test_hex2ba_errors  s    )VQ///)VS!444*fc59996 	5 	5Aj&!4444/ 	H 	HABC$$ZfaGGGG	H 	HrW   c                 F   ddddt          d          t          d          fD ]}}t          |d          }|                     |                                d           |                     |j        d           |                     t          |          t                     ~d S )NeE   e   ErH   1110)r  r1   rM   rO   rE   rN   r   rP   r2  rR   s      rU   test_hex2ba_typeszHexlifyTests.test_hex2ba_types  s    c4y	$G 	0 	0Aq%  AQVVXXv...QXu---T!WWh////		0 	0rW   c                    t          d          D ]}t          g d          }t          dt          d          z  |          }t	          |t          d          t          t
                              }t          ||          }|                     |j        |pt                                 |                     ||           | 
                    |           d S )NrI   rF   r}   r   r  )rL   r   r   r   r0   r   r1   rM   rE   r   	check_obj)rP   rQ   rE   rR   r   rT   s         rU   ra  zHexlifyTests.test_random  s    s 	 	A33344F!inn,f55Aq	"6*3E3EFFFAq&!!AQXv'E1C1E1EFFFQ"""NN1	 	rW   c                    t          t                    }|                     t          |          dt          t                    z             |                     t	          |          t
                     |                     |           t          |          }|                     |t          j                               |                     t	          |          t                     | 
                    |t          |                     d S )Nr}   )r1   r   rM   rl   rN   r   r  r0   lowerstrr  )rP   rR   ts      rU   test_hexdigitszHexlifyTests.test_hexdigits  s    9QS^^!3444a(+++q1IIIO--...a#&&&F1II&&&&&rW   c                 j   t          dd          }t          j        |                                                                          }|                     t          |          |           t          t          j        |          d          }| 	                    t          |d          |           d S )NP   rH   rD   )r   binasciihexlifyr  decoderM   r0   r   	unhexlifyr  r1   )rP   rR   r   rT   s       rU   test_binasciizHexlifyTests.test_binascii  s    BQYY[[))0022A&&&X'**59995))1-----rW   N)rd   re   rf   rU  r  r  r  r  r  ra  r  r  rg   rW   rU   r  r  L  s        3 3 3 	; 	; 	;; ; ; ? ? ?
H 
H 
H0 0 0  	' 	' 	'. . . . .rW   r  c                   j    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zg dZd Zd Zd ZdS )	BaseTestsc                    g d}|D ]\  }}}}t          |d          }t          |d          }|                     t          ||d          |           |                     t          ||d          |           |                     t	          ||          |           |                     t	          ||          |           d S )N))rY   r   rY   rY   )z1 0 1r   r   r   )z11 01 00r}   320310)z111 001r   7471)z	1111 0001r  f8f1)z11111 00001r   7Q7B)z111111 000001r  z/gz/BrG   rH   )r   r  r3   rM   r2   )rP   r  r  rS   s_les_ber  r  s           rU   rU  zBaseTests.test_explicit  s    
 
 
 "& 	5 	5B4B))DB&&DWQh77>>>WQe44>>>WQ--t444WQ--t4444	5 	5rW   c                     ddt          d          fD ]b}t          d|          }|                     |                                d           |                     t	          |          t
                     cd S )N7   7r   11111)r  r3   rM   rO   rN   r   r  s      rU   test_base2ba_typeszBaseTests.test_base2ba_types  sr    dIdOO+ 	0 	0AAAQVVXXw///T!WWh////	0 	0rW   c           
      R   |                      t          dt          d          d          t          d                     |                      t          dd          t          d                     |                      t          dd	          t          d
                     dD ]}t          |t                    }|                      |t                                 t          d          }t          t          ||                    }t          t          d                    D ]E}|
                    t          dt          |                    t          t                               Fd                    |          }|                      t          ||          |           d S )Nr   s   17 0rG   z100 111 000r   z7 Az11111 00000r  s   A /z000000 111111r   r}   r   r  r   r  <   r  r   rY   )rM   r3   r  r   r   r   r0  r2   rL   r   insertr	   rl   r   ri  )rP   rS   rR   r2  rQ   r   s         rU   test_base2ba_whitespacez!BaseTests.test_base2ba_whitespace  sk   Ig$6$6AA!-00	2 	2 	2U++Xm-D-DEEEV,,h.G.GHHH$ 	/ 	/A:&&AQ

+++AWQ]]##A9R==)) A ACFF++VJ-?-?@@@@

AWQ]]A....	/ 	/rW   c                 .   t          dd          }|                     t          d|d          d           |                     t          d|d          d           |                     t          d|d	d
          d           |                     t          d|dd          d           dD ]h\  }}}}}t          |d          }t          ||||          }|                     t          |          t                     |                     ||           id S )Nz001 011 100 111rG   r   r   z461 7r   r  z46 17rQ   )r  rP  46_17.r  z46.17))r   10100r   r  z10-10-0)r}   z10 11 00 01r\   rQ   2_3_0_1)r   101 100 011 101 001 010r   z  z543  512)r   r  r   rY   543512)r  z1011 0001 1101 1010 1111r}   +zb1da+f)r   z10110 00111 01101 01111r   r  zWH, NP)r  z"101100 011101 101011 111110 101110r   r  zsd.r+.urH   )r   rM   r2   rN   r  )rP   rR   rS   r   rP  r  r   s          rU   test_ba2base_groupzBaseTests.test_ba2base_group  s&   &11Aq))7333AQ///999A3a888'BBBAqc222G<<<& 	% 	%!Aq%c E""A1eS))AT!WWc***Q$$$$	% 	%rW   c                     dD ]X}t          |d          }|                     |t                                 |                     t          ||          d           Yd S )Nr  rY   )r3   rM   r   r2   )rP   rS   rR   s      rU   r  zBaseTests.test_empty  sc    $ 	0 	0A2AQ

+++WQ]]B////	0 	0rW   c                 .   dD ]=\  }}d||t          |          fz  }|                     t          |t          ||           >dD ]Q}dD ]$}|                     t          t          ||           %d|z  }|                     t          |t          |d           Rd S )N)	)r   2)r}   4)r   r  )r  r  )r   r  )r   rK   )r   rR   )r  r  )r  rQ   z1invalid digit found for base%d, got '%s' (0x%02x)r  )rQ   @[u   € r        z.invalid digit found for base%d, got '{' (0x7b){)ordr  r`   r3   r^   )rP   rS   r   r  s       rU   test_invalid_charactersz!BaseTests.test_invalid_characters  s    A 	E 	EDAq'*+QA8C$$Zgq!DDDD$ 	G 	GAL = =!!*gq!<<<<BQFC$$Zgq#FFFF		G 	GrW   c           	         t                      }|                     t          t          d |           |                     t          t          d d           |                     t          t          d|           |                     t          t          dd           |                     t          t          dd            |                     t          t          dd            g ddfg ddffD ]P\  }}|D ]H}|                     t          |t          ||           |                     t          |t          |d           IQt          d          }t          d	d
          D ]-}d|z  }|                     t          |t          d|z  |           .d S )NrY   g      0@r   )ir[   r   r   r   r   r  ?      i  i  zbase must be a power of 2)r\   r{  r  i      i   i   i    z"base must be 2, 4, 8, 16, 32 or 64r   r   r   z%bitarray length 29 not multiple of %dr\   )r   r^   r_   r2   r3   r  r`   rL   )rP   rR   valuesr  r   r!  s         rU   test_invalid_argszBaseTests.test_invalid_args  s   JJ)WdA666)WdB777)WdA666)WdB777)Wb$777)Wb$777 GFF,.;;;578 	J 	JKFC
  J J((S'1aHHH((S'1bIIIIJ RLLq! 	J 	JA9A=C$$ZgqAvqIIII	J 	JrW   c                     t          ddd          }|                     |t          d                     |                     t          d|          d           t	          d          D ]}d                    t          t          |                    }|                                 }t          d||          }| 	                    |t          ||                     |                     t          d|          t          |                     d S )	Nr  F61rH   z1111 0110 0001f61rC   rY   r   )r3   rM   r   r2   rL   ri  r   r   rk  r  r1   r0   )rP   rR   rS   r   rE   s        rU   test_hexadecimalzBaseTests.test_hexadecimal  s    Bu%%H%566777Q///r 	8 	8A	Q///00A''))FAv&&AQq& 1 1222WR^^VAYY7777	8 	8rW   c                    t          j        t          dd          dz            }t          j        |                                          }t          d|d          }|                     |                                |           |                     t          d|          |           |                     t          j
        |          |           d S )Nr   rI   r   r   rH   )rg  r   r	   base64	b32encoder  r3   rM   r  r2   	b32decoderP   r  r   rR   s       rU   test_base32zBaseTests.test_base32%  s    jS))A-..S!!((**B5!!c***Q+++)!,,c22222rW   c                    t          j        t          dd          dz            }t          j        |                                          }t          d|d          }|                     |                                |           |                     t          d|          |           |                     t          j
        |          |           d S )Nr   rI   r   r  rH   )rg  r   r	   r  standard_b64encoder  r3   rM   r  r2   standard_b64decoder  s       rU   test_base64zBaseTests.test_base64-  s    jS))A-..%c**1133B5!!c***Q+++2155s;;;;;rW   c                    t          dd          }|                                }dd|fdd|fddd	d
ddddddfD ]\  }}}t          ||          }t          ||          }|                     t          |          t                     |                     ||           t          |||          }|                     ||           |                     t          |          t                     |                     |j        |           d S )Nr  Tr/  r   rG   rH   )r}   rG   232132030132012122122010132110)r}   rH   131231030231021211211020231220)r   rG   65554155441515405550)r   rH   35551455114545105550)r  rG   e6bc4b46a921d61)r  rH   76d32d265948b68)r   rG   O3SJLSJTSI3C)r   rH   O3JS2JSZJC3I)r  rG   
utMtkppEtF)r  rH   
dtMtJllIto)	r#   rO   r   r2   rM   rN   r  r3   rE   )	rP   r*  base_2rS   rE   reprR   r   rT   s	            rU   r  zBaseTests.test_primes5  s"   BD)))Xv&Uv&@@6611..,,
 	/ 	/NAvs ((A1AT!WWc***Q$$$3''AQ"""T!WWh///QXv....+	/ 	/rW   ))r\   r   r   )r   r}   0123)r   r   01234567)r}   r  0123456789abcdef)r}   r  0123456789ABCDEF)r   r    ABCDEFGHIJKLMNOPQRSTUVWXYZ234567)r  r  z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/c                    | j         D ]\  }}}|                     d|z  |           |                     t          |          |           t          |          D ]\  }}|                                 }|                     t          t          |||                    |           |dk    r#|dv rt          t          |          dz             }|                     t          |t          |||                    |           d S )Nr\   r}   ABCDEFr   )	alphabetsrM   rl   rH  rk  r4   r3   chrr  r2   r5   )rP   r!  rS   alphabetr   r2  rE   s          rU   test_alphabetszBaseTests.test_alphabets[  s   "n 	F 	FNAq(Q!VQ'''S]]A...!(++ F F1++--  1f(=(=!>!>BBB66a8mmCFFRK((A  F1a,@,@!A!A1EEEEF	F 	FrW   c                     | j         D ]r\  }}}t          d          D ]\}t          |          }||v s|                                r*|dk    r
|t          v r:|                     t          t          ||           ]sd S )Nr  r  )r%  rL   r&  isspacer   r^   r`   r3   )rP   r!  rS   r'  r   r2  s         rU   test_not_alphabetszBaseTests.test_not_alphabetsf  s    "n 	= 	=NAq(3ZZ = =FF==AIIKK=77qI~~!!*gq!<<<<=	= 	=rW   c           	         t          d          D ]}t          dd          }t          |t          d          z            }d|z  }t	          ||t          d          t          d          dz            }|dk    r#t          d          r|                                }t          d          r|                                }t          |||j	                  }| 
                    ||           |                     |           d S )	NrI   r\   r  r   r    r  r}   )rL   r	   r   r   r2   r   upperencoder3   rE   r  r  )rP   rQ   r!  rR   rS   r   rT   s          rU   ra  zBaseTests.test_randomp  s    s 	 	A1A!inn,--AQA1IbMMy||c7IJJJAAvv+a..vGGII1~~ HHJJ1ah''AQ"""NN1	 	rW   N)rd   re   rf   rU  r  r  r  r  r  r  r  r  r  r  r%  r(  r+  ra  rg   rW   rU   r  r    s        5 5 5$0 0 0/ / /% % %(0 0 0G G GJ J J.
8 
8 
83 3 3< < </ / /4
 
 
I	F 	F 	F= = =    rW   r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )SC_Testsc                     dD ]\\  }}}t          ||          }|                     t          |          |           |                     t	          |          |           ]d S )N))     rY   rG   )s    rI  rG   )s   @ 0000001rG   )s    r4  rH   )s    z00001111 11110000rG   )s    z00000000 00001000rH   )s   	 
00000000 1rH   )s   gabde g0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110110rG   )r   rM   r6   r  r7   )rP   rT   bitsrE   rR   s        rU   rU  zSC_Tests.test_explicit  so    	 
 	. 	.OAtV v&&AYq\\1---Yq\\1----	. 	.rW   c                 @   t          dd          t          dd          fD ]O}t          |          }|                     t	          |          t
                     |                     |d           Pd g dddddfD ]#}|                     t          t          |           $d S )	NrK   rH   s    r   rx  rW   r  Q	@)r   r   r6   rM   rN   bytesr^   r_   rF  s      rU   test_encode_typeszSC_Tests.test_encode_types  s    #u%%~c5'A'AA 	7 	7A!AT!WWe,,,Q 56666r1c35 	7 	7AiA6666	7 	7rW   c                    d}|t          |          t          |          t          j        d|          fD ]|}t          |          }|                     t          |          t                     |                     |j        d           |                     |                                d           }g d}|                     t          |          t          d                     dD ](}||d<   | 	                    t          t          |           )| 	                    t          t          dd g           d d	d
t          dfD ]#}| 	                    t          t          |           $d S )N     BrH   r9  )r   r   r\   r   r   )r  r[   r[   r   r   g	@r]   )r  r0  r  r7   rM   rN   r   rE   rO   r^   r`   r_   Ellipsis)rP   blobrT   rR   rb   s        rU   test_decode_typeszSC_Tests.test_decode_types  sR   $yT

EKT4J4JJ 	. 	.A!AT!WWh///QXu---QVVXXu----1x777 	8 	8AAbEj)Q7777)Yt===q#x. 	7 	7AiA6666	7 	7rW   c                     dD ]^\  }}t          |          }|                     t          |          |           |                     |                                           _d S )N))r3  r   )s     r   )s    r\   )s      r   )s     r  )s       r   )s         )r7   rM   rl   r  r  )rP   rT   rS   rR   s       rU   test_decode_header_nbitsz!SC_Tests.test_decode_header_nbits  si    
 	& 	&DAq !ASVVQ'''QUUWW%%%%	& 	&rW   c                    t          d          }|                     t          |          t          d                     |                     t	          |          t          d                     t          g d          }|                     t          |          t          d                     |                     t	          |          d u            |                     t	          |          d           d S )Ns    XYZrI  rm  )r   r   r\      r   Nr]   r  r]   )iterrM   r7   r   nextr  rq   rP   r@  s     rU   test_decode_untouchzSC_Tests.test_decode_untouch  s    .//6**HUOO<<<fs3xx000>>>??6**HW,=,=>>>V,---fu-----rW   c           	          dD ](}|                      t          d|z  t          |g           )dD ]*}|                      t          d|z  t          dd|g           +d S )N)r   r  r  r{     r   rF  zinvalid header: 0x%02x)rL  r  r  rF  zinvalid block head: 0x%02xr\   r  )r  r`   r7   )rP   r2  s     rU   test_decode_header_errorsz"SC_Tests.test_decode_header_errors  s    9 	5 	5A$$Z%=%A%.5 5 5 5 ( 	A 	AA$$Z%AA%E%.tQA A A A	A 	ArW   c                 t   |                      t          dt          z  t          d           |                      t          dt          z  t          t          gt          dgz  z              t          dk    rF|                      t          dt          d           |                      t          dt          d	           d S d S )
Nz,sizeof(Py_ssize_t) = %d: cannot read 9 bytess
   	         z$read %d bytes got negative value: -1rF  r}   z+sizeof(Py_ssize_t) = 4: cannot read 5 bytess        ,read 4 bytes got negative value: -2147483648s      )r  OverflowErrorr   r7   r`   r   s    rU   test_decode_header_overflowz$SC_Tests.test_decode_header_overflow  s      :WD,	. 	. 	.
 	  2W<y7dV#33	5 	5 	5
 a<<$$=02 2 2
 $$>24 4 4 4 4 <rW   c                 "   |                      t          dt          d           |                      t          dt          d           |                      t          dt          d           |                      t          dt          d           |                      t          d	t          d
           ddd}|                      t          |t                   t          d           ddd}|                      t          |t                   t          d           d S )Nzdecode error (raw): 0 + 2 > 1s    zdecode error (raw): 32 + 3 > 34s	    zdecode error (n=1): 128 >= 128s    zdecode error (n=2): 512 >= 512s      z"decode error (n=3): 32768 >= 32768s	       rO  z$decode error (n=4): 2147483648 >= 16)r}   r   s	       z#read 4 bytes got negative value: -1z$decode error (n=4): 4294967295 >= 16s	    )r  r`   r7   r   )rP   r  s     rU   test_decode_errorszSC_Tests.test_decode_errors  s?     70	2 	2 	2 	  9<	> 	> 	>
 	  8,	. 	. 	. 	  88	: 	: 	: 	  <<	> 	> 	> A8: :  G<	> 	> 	> 88: :  G<	> 	> 	> 	> 	>rW   c                 R    dD ]#}|                      t          t          |           $d S )N)rW   r     s   ws   s   s   )r^   StopIterationr7   rI  s     rU   test_decode_end_of_streamz"SC_Tests.test_decode_end_of_stream  s=    J 	@ 	@FmY????	@ 	@rW   c                 ~    dD ]9}t          |          }|                     |                                d           :d S )N)r=  s   ? s    s     s      s	       r9  )r7   rM   rO   )rP   rT   rR   s      rU   test_decode_ambiguityzSC_Tests.test_decode_ambiguity  sK    	
 	. 	.A !AQVVXXu----	. 	.rW   c                    t          dd          D ]}|dk    r|nd|dz
  z  }d|z  }t          |d          }t          |dk     rd|gn
d|dz  |dz  g          }|                    |           |                    |                                           |                    d	           |                     t          |          |           |                     t          |          |           d S )
Nr\      r   r   r   rG   r  r   r   )	rL   r   r  r   r   r  rM   r7   r6   )rP   r{   nbytesnbitsrR   rT   s         rU   test_block_type0zSC_Tests.test_block_type0  s    tT"" 	. 	.Ar''QQrQV}FJEUH%%A53;;4--esl;= =AHHQKKKHHQYY[[!!!HHQKKKYq\\1---Yq\\1----	. 	.rW   c           	         t          dd          }t          dd          D ]}d|t          d          <   t          dddd|                                z   g          }|                    t          |                    d                               |                    d           | 	                    t          |          |           | 	                    t          |          |           d S )	Nr  rG   r\   r   r   r   r   r[  )r   rL   r   r  rs   r   r0  r)  r   rM   r7   r6   r  s       rU   test_block_type1zSC_Tests.test_block_type1'  s    S(##q" 	. 	.A !Ak!nn4tTAGGII-=>??AHHT!((1++&&'''HHQKKKYq\\1---Yq\\1----	. 	.rW   c           
         t          dd          }t          dd          D ]}d|t          d          <   t          ddddd|                                g          }|                    d          D ]*}|                    t          j        d	|                     +|	                    d           | 
                    t          |          |           |d
k     r$| 
                    t          |          |           |                     t          t          |                    t          |          k                d S )NrC  rG   r\   r  r  r   r      z<Hry   )r   rL   r   r  rs   r)  r   structpackr   rM   r7   r6   rq   rl   )rP   rR   rS   rT   r   s        rU   test_block_type2zSC_Tests.test_block_type23  s!   UH%%q# 	= 	=A!"Ak"oo4tT4CDDAXXa[[ / /T1--....HHQKKKYq\\1---3ww   1q1111IaLL 1 1SVV ;<<<<	= 	=rW   c           
         t          dd          }d|t          t          d          d          <   t          dddddd|                                g          }|                    d          D ]2}|                    t          j        d	|          d d
                    3|	                    d           | 
                    t          |          |           | 
                    t          |          |           d S )Ni   rG   r\   rF  r   r}   r      <Ir   )r   r   rL   r  rs   r)  r   rc  rd  r   rM   r7   r6   )rP   rR   rT   r   s       rU   test_block_type3zSC_Tests.test_block_type3E  s    Z**,-'%..C
(
(
()tT4tT17799EFF! 	/ 	/AHHV[q))"1"-....	1q)))1q)))))rW   c                 ,   t          dd          }t          t          t          t	          t          |                    d                              }d||<   t          d          }|                    t          |                     |D ]*}|                    t          j
        d|                     +|                    d           |                     t          |          |           |                     t          |          |           d S )	Ni   rG   r   r   r\   s      rh  r   )r   sortedr   r   rL   rl   r  r   r   rc  rd  rM   r7   r6   )rP   rR   rO  rT   r   s        rU   test_block_type4zSC_Tests.test_block_type4O  s    Wh'' WU3q66]]a88899::'
122	W 	+ 	+AHHV[q))****	1q)))1q)))))rW   c                 B   t          d          D ]}t          d          }dt          j        |          z   }	 t	          |          }n# t
          t          f$ r Y Lw xY w|                     t          |          d           |                     |j	        d           d S )NrI   rk   s    r   rG   )
rL   r   rg  r   r7   rV  r`   rM   rl   rE   )rP   rQ   rS   rT   rR   s        rU   test_decode_random_bytesz!SC_Tests.test_decode_random_bytes^  s    s 	1 	1A"A"*Q--/AaLL!:.   SVVT***QXx0000	1 	1s   A		AAc                     t          |          }|                     t          |          |           |                     t          |          |           d S rD  )r6   rM   rl   r7   )rP   rR   r!  r@  s       rU   check_blob_lengthzSC_Tests.check_blob_lengthj  sK    ||TA&&&4!,,,,,rW   c                    t          d          D ]}d|z  }t          |          }d}|t          |                                          z  }|                     ||           d|d<   |dz  }|dt          |dk              z  z  }|t          |dk              z  }|t          |dk              z  }|                     ||           d S )Nrs  r\   r   r   	   r  r  )rL   r   r   
bit_lengthrp  r  )rP   r   rS   rR   r!  s        rU   test_encode_zeroszSC_Tests.test_encode_zeroso  s    r 	) 	)AQAaAAALLNN+++A""1a(((AaDFAT!a%[[ Aa"fAa"fA""1a((((	) 	)rW   c                 L   t          d          D ]}t          d          }t          |          }d}|t          |                                          z  }t          |          }||z  }|t          |dz            z  }||dz  dz   dz  z  }|                     ||           d S )Nr   r  r   r   r  r{  )rL   r   r   r   rs  r  rp  )rP   rQ   r]  rR   r!  r\  s         rU   test_encode_oneszSC_Tests.test_encode_ones~  s    r 
	) 
	)Ag&&EUAAE,,..///A&&FKAfrk"""A&B,$,,A""1a((((
	) 
	)rW   c                 t   |                                 }t          t          |                    }t          |          }|                     ||cxk    o|k    nc            |                     |j        |j        cxk    o
|j        k    nc            |                     t          |          g            d S rD  )r  rG  r6   r7   rq   rE   rM   r0  )rP   rR   r2  r   rT   s        rU   rG  zSC_Tests.round_trip  s    FFHH1aLLQ!$$$AH88888888999a"%%%%%rW   c                 0   t          d          D ]}t          d          }|                                 }t          ||          }|                                r<|t          ||          z  }|                     |           |                                <d S Nr   r  )rL   r   rk  r   rs   r   rG  )rP   rQ   rS   rE   rR   s        rU   ra  zSC_Tests.test_random  s    r 	# 	#A'""A''))FQA'')) #WQ'''""" '')) #		# 	#rW   N)rd   re   rf   rU  r;  rA  rD  rJ  rM  rQ  rS  rW  rY  r^  r`  re  ri  rl  rn  rp  rt  rv  rG  ra  rg   rW   rU   r1  r1    sV       . . .7 7 77 7 7$& & &. . .
A 
A 
A4 4 4,> > >@@ @ @
. . .. . .
. 
. 
.= = =$* * ** * *
1 
1 
1- - -
) ) )) ) )& & &# # # # #rW   r1  c                   \    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )VLFTestsc                 x   dD ]5\  }}t          |          }|                     t          |          |           t          |          }|                     ||           |                     |j        t                                 dD ]}t          ||          }t          |          }|                     t          |          t                     |                     ||           t          ||          }|                     ||           |                     |j        |pt                                 7d S )N)
)   @rY   )   0rJ   )   8rK   )r  0000)rU  0001)    001101)s   @0000 1)s   z0000 000001)s   z0101 0100111 0011)s   z0101 0110111 001110)rH   rG   N)r   rM   r8   r9   rE   r   rN   r:  )rP   r@  r   rR   r2  rE   s         rU   rU  zVLFTests.test_explicit  s=   
 	K 	KGD! AYq\\4000$AQ"""QX'9';';<<</ K KQ''aLL  a%000  D)))dF++  A&&&  6+I5G5I5IJJJJK%	K 	KrW   c                 @   d}t          |          t          |          fD ]O}t          |          }|                     t	          |          t
                     |                     |d           Pd g dddddfD ]#}|                     t          t          |           $d S )N0011 01r  r   rx  rW   r  r9  )r   r   r8   rM   rN   r:  r^   r_   )rP   r   rR   rT   s       rU   r;  zVLFTests.test_encode_types  s    !nQ/// 	- 	-A!AT!WWe,,,Q,,,,r1c35 	7 	7AiA6666	7 	7rW   c           	      .   d}|t          |          t          |          t          ddg          t          |          fD ]p}t          ||                                           }|                     t          |          t                     |                     |t          d                     qdD ]#}|                     t          t          |           $d dt          dfD ]2}|                     t          t          t          d	|g                     3d S )
Nr  r  r   rD   r  )Nr   r\   r   gQ@r]   r  )rG  
memoryviewr  r9   rk  rM   rN   r   r^   r_   r?  )rP   r@  r   rR   argitems         rU   rA  zVLFTests.test_decode_types  s   T

Jt$4$4dD$<6H6HD//# 	5 	5A!D$6$6$8$8999AT!WWh///Q 3 34444 # 	9 	9CiC8888$%/ 	H 	HDiD$4F4FGGGG	H 	HrW   c                     |                      t          t          t          dg                     |                      t          t          ddd           |                      t          t          dd           d S )Nr}  rH   r   r]   )r^   r_   r9   rG  r`   r   s    rU   test_decode_argszVLFTests.test_decode_args  s^    )YgY@@@)YBBB*i%@@@@@rW   c                     dD ]g\  }}t          |          }|                     t          |          t          |                     |                     t	          |          d           hd S )N))s   @ABCrY   )s   @A00001A   )rG  rM   r9   r   rH  )rP   r   r7  r@  s       rU   test_decode_trailingzVLFTests.test_decode_trailing  so    1 	/ 	/GAt!WWFYv..???T&\\2....		/ 	/rW   c                     dD ]1}|                      t          |          t                                 2dD ]2}|                      t          |          t          d                     3d S )N)r}     Or  )      r  )rM   r9   r   )rP   r   s     rU   rY  zVLFTests.test_decode_ambiguity  sr    * 	7 	7AYq\\8::6666! 	< 	<AYq\\8E??;;;;	< 	<rW   c                 h   t          d          }dD ]2}|                     t          |          t          |                     3d t	          d          D             }t          d                    d |D                                 }|D ]%}|                     t          |          |           &d S )Ns	   @08@,@ )rY   rJ   rK   rY   r  r  r  c                 F    g | ]}t          t          d                     S )r   )r   r   )r&  rQ   s     rU   r'  z/VLFTests.test_decode_stream.<locals>.<listcomp>  s&    >>>Q')B--((>>>rW   r   rW   c              3   4   K   | ]}t          |          V  d S rD  )r8   r&  rR   s     rU   rF  z.VLFTests.test_decode_stream.<locals>.<genexpr>  s(      <<y||<<<<<<rW   )rG  rM   r9   r   rL   ri  )rP   r@  r7  arraysrR   s        rU   test_decode_streamzVLFTests.test_decode_stream  s    =>>? 	@ 	@DYv..????>>%++>>>chh<<V<<<<<== 	3 	3AYv..2222	3 	3rW   c                    |                      t          t          d           dD ]-}|                     t          d|d         z  t          |           .dD ]#}|                      t          t          |           $dD ]$}|                      t          t          |g           %|                      t
          t          d g           d S )NrW   )   p      P   `r  zinvalid head byte: 0x%02xr   )r  s   )r[   r  )r^   rV  r9   r  r`   r_   )rP   r   r   s      rU   rS  zVLFTests.test_decode_errors  s    -C888
 	3 	3A $$Z%@1Q4%G%.3 3 3 3 & 	; 	;AmY:::: 	: 	:Aj)aS9999)Y77777rW   c                 $   d}t          |ddgz  dgz   z  dgz             }t          |          D ]<}d }	 t          |          }n# t          $ r Y nw xY w|                     |d u            =|                     t          |          d           d S )NrI   r   r{  XXzend.)rG  rL   r9   r_   rq   rM   rH  )rP   r1  r   rQ   rR   s        rU   test_decode_invalid_streamz#VLFTests.test_decode_invalid_stream  s    a4&jD6)*fX566q 	' 	'AAaLL   OOAI&&&&a&)))))s   A
AAc                     t          d          D ]e}t          d|dz  z             }|dz  dz   }|                     t          |          |           |                     t	          |          |           fd S )NrI   r}   r   r  r  )rL   r   rM   r8   r9   )rP   rS   rR   r   s       rU   test_explicit_zeroszVLFTests.test_explicit_zeros  s    s 	. 	.Aa!a%i  AGg%AYq\\1---Yq\\1----		. 	.rW   c                    |                                 }t          |          }t          |          }|                     |           |                     ||cxk    o|k    nc            d}|                     t          |          t          |          |z   dz   dz             |d         }|dz  dz	  }|                     t          |          |z   dt          |          z  |z
             d S )Nr   r  r   r   p   r}   )r  r8   r9   r  rq   rM   rl   )rP   rR   r2  r   rT   LEN_PAD_BITSheadpaddings           rU   rG  zVLFTests.round_trip  s    FFHHaLLaLLqQ!$$$Q#a&&<"7!";!ABBBt$;1$Q')1s1vv:+DEEEEErW   c                     t          d          D ]3}t          t          d                    }|                     |           4d S ry  )rL   r   r   rG  )rP   rQ   rR   s      rU   r  zVLFTests.test_large(  sK    r 	 	A	'**++AOOA	 	rW   c                 ^    |                                  D ]}|                     |           d S rD  )r  rG  rt   s     rU   ra  zVLFTests.test_random-  s<    %%'' 	 	AOOA	 	rW   N)rd   re   rf   rU  r;  rA  r  r  rY  r  rS  r  r  rG  r  ra  rg   rW   rU   r{  r{    s        K K K:7 7 7H H HA A A/ / /< < <3 3 38 8 8(
* 
* 
*. . .F F F  
    rW   r{  c                   x    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zed             Zd ZdS )IntegerizationTestsc                    |                      t          t          d                    d           |                      t          t          d                    d           |                      t          t          dd                    d           |                      t          t          dd                    d	           |                      t          t          d
                    d           |                     t
          t          t                                 |                     t
          t          t                                 |                     t          t          d           t          d          }|                                }|                      t          |          d           |                     ||           d S )NrJ   r   rK   r\   00101rH   r   rG   rk   r  r   r   r  r   )	rM   r4   r   r   r^   r`   r_   r  r  rF  s      rU   test_ba2intzIntegerizationTests.test_ba2int5  sb   ..222..222% 8 8991===( ; ;<<bAAAt 4 455q999*fhjj999*fn.>.>???)VU333UOOFFHHA&&&ArW   c                     |                      d          D ]W}t          |          }|                     t          |          t          |                     |                     ||           Xd S )Nr\   r  )r  r   rM   r4   r  rF  s      rU   test_ba2int_frozenz&IntegerizationTests.test_ba2int_frozenD  st    %%A%.. 	# 	#Aq!!AVAYYq		222Q""""	# 	#rW   c                 
   |                      d          D ]k}t          |d          }|                     ||           |                     t          |          t	          |                                d                     ld S )Nr\   r  rH   r   )r  r   rM   r4   r   rO   rF  s      rU   test_ba2int_randomz&IntegerizationTests.test_ba2int_randomJ  s    %%A%.. 	: 	:AE""AQ"""VAYYAFFHHa(8(89999	: 	:rW   c                 .   t          dd          D ]}t          d|z            }t          |                                          }d}|j        dk    r|nt          |          D ]}|dz  }||z  }|                     t          |          |           d S )Nr\   rC   r   r   rH   )rL   r   r  r  rE   reversedrM   r4   )rP   rS   rR   r2  r   rb   s         rU   test_ba2int_bytesz%IntegerizationTests.test_ba2int_bytesP  s    q" 	+ 	+A!a%  A!))++&&AA8u,,aa(1++  aQVAYY****	+ 	+rW   c                    |                      t          d          t          d                     |                      t          d          t          d                     |                      t          d          t          d                     |                     t          dd	          t          d
d                     |                     t          dd	          t          dd                     |                     t
          t          d           |                     t
          t          dd           |                     t          t          dd           |                     t
          t          ddd           |                     t          t          ddd           |                     t
          t          dd           d S )Nr   rJ   r\   rK   r   r   r  rH   rD   rI  rG   r8  rZ   g      @r   rx  rW  rI   Tsigned)rM   r5   r   r  r^   r_   r`   r   s    rU   test_int2bazIntegerizationTests.test_int2baZ  sp   HSMM222HSMM222HUOO444%000(5%2H2HIII(333!%22	4 	4 	4)VS111)VQ444*fa333)VQC888*faU;;;)VS>>>>>rW   c                    dD ]\  }}|                      t          t          |d          d          |           |                      t          t          |d d d         d          d          |           t          t          |                    }|                     t          ||dd          t          |d                     |                     t          ||dd          t          |d d d         d                     d S )N)rj  )rK   r[   )00r   )r   r\   )r   )r  r[   )r  r   )100r\   )010r   )rI  r   )r9  )r   )r8  r  )r  r[   )00000r   )11110r   )r  r  )r  r[   )z
00000000 0r   )z
11111111 0rF  )r5  i )z
11111111 1r[   rG   r\   r  r[   rH   )rM   r4   r   rl   r  r5   )rP   r   r   len_ss       rU   test_signedzIntegerizationTests.test_signedi  s   
 	7 	7DAq0 VHQ$9$9!DDDaHHHVHQtttWe$<$<QGGGKKK$$EVAuhqAAA%a224 4 4VAueA>>>%a"gu557 7 7 7=	7 	7rW   c           	      n   dD ]}t          d|          }|                     |t          d|                     t          dd          D ]h}t          d||d          }t          |dz  |          }|                     ||           d	D ]'}|                     t          ||
          d           (id S )NrG   rH   r   rD   rJ   r\   rI   Tr  rE   r  r  r  )r5   r  r   rL   rM   r4   )rP   rE   rR   rS   rT   r  s         rU   	test_zerozIntegerizationTests.test_zero  s    % 	B 	BFq(((AQV < < <===1c]] B B1QvdCCCQWf--  A&&&" B BF$$VAf%=%=%=qAAAAB	B	B 	BrW   c                     dD ]v}t          dd          D ]c}t          d||d          }t          |dz  |          }|                     ||           |                     t          |d          d           dwd S )	Nr  r\   rI   r[   Tr  rK   r  )rL   r5   r   r  rM   r4   )rP   rE   rS   rR   rT   s        rU   test_negative_onez%IntegerizationTests.test_negative_one  s    % 	= 	=F1c]] = =2atDDDQWf--  A&&&  $!7!7!7<<<<	=	= 	=rW   c                    |                      t          t          d           |                      t          t          dd           |                      t          t          dd           |                      t          t          ddd           |                      t          t          ddd           t          dd	          D ]}|                      t          t          d|z  |           |                      t          t          d|dz
  z  |d           |                      t          t          d|dz
  z   dz
  |d           d S )
Nr[   r}   r{  r   r  r\   r  irk   )r^   rP  r5   rL   r`  s     rU   test_int2ba_overflowz(IntegerizationTests.test_int2ba_overflow  s7   -444-Q777-a888-QqAAA-aBBBq" 	( 	(AmVQ!VQ???mVQ1q5\1%&  ( ( (mVqQU|_q5H!%&  ( ( ( (		( 	(rW   c           	         |                      t          t          dd           |                      t          t          dd           |                     t          ddd          t          d                     t          dd	          D ]>}t          d|d          }t          d|d
          }|                     |j        d           |                     |j        d
           |                     t          |          |          f |                     t          |          |           |                     |t          |dz
  dz            t          d          z              |                     |t          d          t          |dz
  dz            z              t          d|d          }t          d|d
          }|                     t          |          |           |                     t          |          |           |                     |t          |dz  d                     |                     |t          |dz  d
                     |                     t          d|z  dz
            t          |dz                       |                     t          d|z  dz
  d
          t          |dz                       @d S )Nr   rZ   r   r  rH   r~  000101r\   rI   rG   rJ   rK   r   rD   )	r^   r_   r5   r`   rM   r   rL   rE   rl   )rP   rS   abals       rU   test_int2ba_lengthz&IntegerizationTests.test_int2ba_length  s   )VQ444*fa333!E:::!(++	- 	- 	-q# 	0 	0A1e$$B1h''BRY...RY111SWWa(())SWWa(((R1q5C-!8!88C==!HIIIR#1q5C-1H1H!HIII1e$$B1h''BSWWa(((SWWa(((R!c'5!9!9:::R!c'8!<!<===VAFQJ//!c'1B1BCCCVAFQJx@@@%a#g..0 0 0 0%	0 	0rW   c                    dD ]\  }}t          |d          }t          |d d d         d          }|                     t          |          |           |                     t          |d          |           |                     t          |d          |           |                     t	          |          t	          |          |           d S )N))r   rJ   )r\   rK   )r   r   )r   r  )r6  11001)i	  	100001001)iR8 1110000101001000011110rH   r[   rG   rD   )r   r  r5   rM   r4   )rP   r   sar  r  s        rU   rU  z!IntegerizationTests.test_explicit  s    ; 		8 		8EAr "e$$B"TTrT(H--BVAYY+++VAe444b999VAh777<<<VBZZQ7777		8 		8rW   c                 <   dD ]}t          ||          }|                     |           |                     |j        |           |                     t          |          dk               |j        dk    r?|                     t          |          dk    p|                    d          dk               |                     t          |          |           |dk    r5|                     |                                t          |                     |dk    r!t          t          d          |          |z   }n |t          t          d          |          z   }|                     |j        |           |                     t          |          |           d S )NrH   rG   rD   r   rH   r\   r}   )r5   r  rM   rE   rq   rl   indexr4   rs  r   r   )rP   r   rE   rR   s       rU   check_round_tripz$IntegerizationTests.check_round_trip  sn   % 	+ 	+Fq(((ANN1QXv...OOCFFQJ'''x5  A! >qwwqzzQ???VAYY***1uu  Q888)A,,//!3illF333QXv...VAYY****#	+ 	+rW   c           
          t          d          D ]5}|                     t          dt          dd          z                       6d S )Nrk   r   r   r   )rL   r  r   r	   )rP   rQ   s     rU   	test_manyzIntegerizationTests.test_many  sQ    r 	D 	DA!!)B'!S//,A"B"BCCCC	D 	DrW   c                 ,    d|dz
  z  }| |z   | | z  z   S Nr   r\   rg   )r   num_bitsmasks      rU   twos_complementz#IntegerizationTests.twos_complement  s)     X\"T{a4%i((rW   c           
         |                      d          D ]}t          |d          }t          |t          |          |j        d          }|                     ||           t          |d          }|dk    r|                     ||           |                     ||                     |t          |                               d S )Nr\   r  Tr  Fr   )r  r4   r5   rl   rE   r  rM   r  )rP   rR   r   rT   r  s        rU   test_random_signedz&IntegerizationTests.test_random_signed  s    %%A%.. 		A 		AAq&&&Aq#a&&!(4888AQ"""q'''AAvv  A&&&Q 4 4QA ? ?@@@@		A 		ArW   N)rd   re   rf   r  r  r  r  r  r  r  r  r  r  rU  r  r  rs  r  r  rg   rW   rU   r  r  3  s         # # #: : :+ + +? ? ? 7  7  7D	B 	B 	B= = =( ( (0 0 04
8 
8 
8+ + +(D D D ) ) \)

A 
A 
A 
A 
ArW   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
MixedTestsc                    t          d          D ]}t          d          }t          |          }|                     |d d         d           t	          |dd          d          }|                     t          |          |           |                                }|                     ||dd                     |                     t          |d          |           d S )Nrk   r   r   0brH   )rL   r   binrM   r   r4   rO   r   rP   rQ   r   r   rR   r  s         rU   test_binzMixedTests.test_bin	  s    r 	+ 	+A$AAAQrrUD)))122&&AVAYY***AQ!""&&&SAYY****	+ 	+rW   c                    t          d          D ]}t          d          }t          |          }|                     |d d         d           t	          d|dd          d          }|                     t          |          |           t          d|          }|                     ||dd                     |                     t          |d          |           d S )Nrk   r   r   0or   rH   )rL   r   octrM   r3   r4   r2   r   r  s         rU   test_octzMixedTests.test_oct	  s    r 	+ 	+A$AAAQrrUD)))1QRR5%((AVAYY***1AQ!""&&&SAYY****	+ 	+rW   c                    t          d          D ]}t          d          }t          |          }|                     |d d         d           t	          |dd          d          }|                     t          |          |           t          |          }|                     ||dd                     |                     t          |d          |           d S )Nrk   r   r   0xrH   r  )rL   r   hexrM   r1   r4   r0   r   r  s         rU   test_hexzMixedTests.test_hex	  s    r 	, 	,A$AAAQrrUD)))que$$AVAYY***q		AQ!""&&&SBZZ++++	, 	,rW   c                    |                      d          D ]}t          t          |          |j                  }|                                }|                                }t          |          }t          |          }|                     t          ||z            ||z             |                     t          ||z            ||z             |                     t          ||z            ||z             t          dt          |                    }|j        dk    rr|                     t          ||z	            ||z	             t          t          |          d          |z   }|                     t          ||z            ||z             | 	                    ||           | 	                    ||           d S Nr\   r  r   rH   )
r  r   rl   rE   r  r4   rM   r	   r   r  )	rP   rR   rT   r  r  r   r  rS   r2  s	            rU   test_bitwisezMixedTests.test_bitwise"	  s   %%A%.. 	$ 	$AA))ABBq		Aq		AVAE]]AE222VAE]]AE222VAE]]AE2223q66""Ax5    Qa888#a&&%((1,  Qa888Q###Q#####	$ 	$rW   c                    |                      d          D ]}t          t          |          |j                  }|                                }t          |          }t          |          }|                                }||z  }|                     t          |          ||z             |                                }||z  }|                     t          |          ||z             |                                }||z  }|                     t          |          ||z             |                     ||           t          dt          |                    }|j        dk    r|                                }||z  }|                     t          |          ||z	             t          t          |          d          |z   }||z  }|                     t          |          ||z             d S r  )
r  r   rl   rE   r  r4   rM   r  r	   r   )rP   rR   rT   r  r   r  r2  rS   s           rU   test_bitwise_inplacezMixedTests.test_bitwise_inplace6	  s   %%A%.. 	4 	4AA))ABq		Aq		AAFAVAYYA...AFAVAYYA...AFAVAYYA...Q###3q66""Ax5  FFHHa  AF333#a&&%((1,a  AF333/	4 	4rW   N)rd   re   rf   r  r  r  r  r  rg   rW   rU   r  r    s_        	+ 	+ 	+	+ 	+ 	+	, 	, 	,$ $ $(4 4 4 4 4rW   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )SerializationTestsc                    dD ]\  }}}t          ||          }t          |          }|                     ||           |                     t          |          t                     t          |          }|                     ||           |                     |j        |           |                     t          |          t                      d S )N))r  rG   rY   )   rG   rK   )   rH   rK   )s   rH   r  )s    rG   11110000)s   rH   r  )s   rH   z10000111 110110)r   r.   rM   rN   r:  r/   rE   )rP   r@  rE   r7  rR   r   rT   s          rU   rU  z SerializationTests.test_explicitT	  s    #
 	0 	0D&$ v&&A!AT1%%%T!WWe,,,D!!AQ"""QXv...T!WWh////#	0 	0rW   c           	         dddddddgt          dg          fD ]#}|                     t          t          |           $|                     t          t                     |                     t          t          t	                      d           t	          dd          t          dd          fD ]%}|                     t          |          d           &d S )	NrJ   r   r\   r  r   r  rH   s   p)r  r^   r_   r.   r   r   rM   )rP   rb   rR   s      rU   test_serialize_argsz&SerializationTests.test_serialize_argsh	  s    aGS1a&)QC..@ 	7 	7AiA6666)Y///)Y

A>>>&%((.*G*GG 	8 	8AYq\\;7777	8 	8rW   c           
         ddddd dddddgf	D ]#}|                      t          t          |           $|                      t          t                     |                      t          t          dd           d	}t          |          }|t	          |          t          |          |fD ]T}t          |          }|                     |                                d
           |                     |j        d           Ud S )Nr   r\   FTrY   r   r   r  s   01100rG   )	r^   r_   r/   r   r  r  rM   rO   rE   )rP   rb   r@  r   rR   s        rU   test_deserialize_argsz(SerializationTests.test_deserialize_argss	  s    AudD"dC!Q? 	9 	9Aia8888)[111)['1===TNNy
4(8(8!; 	1 	1AAAQVVXXw///QXx0000	1 	1rW   c           	      z                          t          t          d            fd}t          d          D ]}t	          |g          }|dk    s|dk    r0                     t          |          t                                 n,                      t          t          |            ||           |                    d           |dk     r@|dz  dk     r7                     t          |          t          d|dz  z
                       ։                      t          t          |            ||           d S )NrW   c                 b    d| d         z  }                     t          |t          |            d S )Nzinvalid header byte: 0x%02xr   )r  r`   r/   )rT   r  rP   s     rU   	check_msgz8SerializationTests.test_invalid_bytes.<locals>.check_msg	  s1    /!A$6C$$Zk1EEEEErW   r  r   r  r   r   )	r^   r`   r/   rL   r  rM   r   r   r   )rP   r  r   rT   s   `   rU   test_invalid_bytesz%SerializationTests.test_invalid_bytes	  s:   *k3777	F 	F 	F 	F 	F s 	 	A1#AAvvb  Q<<<<!!*k1===	!HHQKKK2vv!b&1**  Qq1q5y1A1ABBBB!!*k1===	!	 	rW   c                     dD ]W\  }}t          |          }|                     |                                d           |                     |j        |           Xd S )N))r  rG   )s   rG   )s   rG   )r  rH   )s   rH   )s   rH   rK   )r/   rM   rO   rE   )rP   r@  rE   rR   s       rU   test_padbits_ignoredz'SerializationTests.test_padbits_ignored	  si    
 
	/ 
	/LD& D!!AQVVXXs+++QXv....
	/ 
	/rW   c                    |                                  D ]k}t          |          }t          |          }|                     ||           |                     |j        |j                   |                     |           ld S rD  )r  r.   r/   rM   rE   r  r  s       rU   ra  zSerializationTests.test_random	  s    %%'' 	 	A!AAAQ"""QXqx000NN1	 	rW   N)	rd   re   rf   rU  r  r  r  r
  ra  rg   rW   rU   r  r  R	  sn        0 0 0(	8 	8 	81 1 1  ,/ / /    rW   r  c                        e Zd Zd Zd Zd ZdS )HuffmanTreeTestsc                 L    i }|                      t          t          |           d S rD  )r^   
IndexErrorr:   rP   freqs     rU   r  zHuffmanTreeTests.test_empty	  s%    *mT:::::rW   c                     ddi}t          |          }|                     |j        d           |                     |j        d           |                     t
          t          |d           d S )NAr\   child)r:   rM   symbolr  r^   AttributeErrorgetattrrP   r  trees      rU   test_one_symbolz HuffmanTreeTests.test_one_symbol	  sh    QxT""c***A&&&.'4AAAAArW   c                    ddd}t          |          }|                     t          t          |d           |                     |j        d           |                     |j        d         j        d           |                     |j        d         j        d           |                     |j        d         j        d           |                     |j        d         j        d           d S )Nr\   r  r>  r  r   r   r  r>  )r:   r^   r  r  rM   r  r  r  r  s      rU   test_two_symbolsz!HuffmanTreeTests.test_two_symbols	  s    QT"".'4BBBA&&&A-s333A+Q///A-s333A+Q/////rW   N)rd   re   rf   r  r  r  rg   rW   rU   r  r  	  sD        ; ; ;B B B0 0 0 0 0rW   r  c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )HuffmanTestsc                 l   dddd}t          |          }|                     t          |          d           |                     t          |d                   d           |                     t          |d                   d           |                     t          |d                    d           d S )	Nr   r   g?)r   asNr   r   r\   r!  )r;   rM   rl   )rP   r  r]  s      rU   r  zHuffmanTests.test_simple	  s    Qc**D!!TA&&&T!Wq)))T$Z!,,,T$Z!,,,,,rW   c                     dddd}dD ]g}t          ||          }|                     t          |          d           |                                D ]}|                     |j        |           hd S )Nr   r   r   )r  r>  Cr  r   )r;   rM   rl   r  rE   )rP   r  rE   r]  r  s        rU   test_endiannesszHuffmanTests.test_endianness	  s    aa((% 	3 	3Ff--DSYY***[[]] 3 3  622223	3 	3rW   c                 X   |                      t          t          dg           |                      t          t          d           |                      t          t          d            |                      t          t          ddd           |                      t          t          i            d S )N)rR   r\   rx  rR   r\   r  )r^   r_   r;   r`   r   s    rU   test_wrong_argzHuffmanTests.test_wrong_arg	  s    )\H:>>>)\3777)\4888)\13E3EFFF*lB77777rW   c                 B   ddi}t          |          }|                     |dt          d          i           t          d          D ]}|dgz  }t                      }|                    ||           |                     |                                |dz             |                     t          |                    |                    |           |                    d           | 	                    t          t          |                    |                     d S )NrR   r\   rJ   r}   )r;   rM   r   rL   r/  rO   r0  r  r   r^   r`   )rP   r  r]  rS   r  rR   s         rU   r  zHuffmanTests.test_one_symbol	  s   AhC  Xc]]3444q 	@ 	@Ase)C

AHHT3QVVXXq3w///T!((4..113777HHQKKKj$????	@ 	@rW   c                 <   t          |          }t          |          }|                     |                                |           |                     |                                d|z  dz
             |                     |                                           d S r  )rl   r   rM   todictnodesrq   complete)rP   r]  rS   r  s       rU   
check_treezHuffmanTests.check_tree	  s~    II$---q1uqy111(((((rW   c                 X   di }t          dz            D ]}d||<   t          |          }|                     t          |          dz             |                     t          fd|                                D                                  |                     |           d S )Nr  r\   c              3   >   K   | ]}t          |          k    V  d S rD  rl   r&  r  rS   s     rU   rF  z-HuffmanTests.test_balanced.<locals>.<genexpr>	  -      ??ACFFaK??????rW   )rL   r;   rM   rl   rq   r   r  r,  )rP   r  r   r]  rS   s       @rU   test_balancedzHuffmanTests.test_balanced	  s    qAv 	 	ADGGD!!TAF+++?????????@@@rW   c           	      h   d}i }t          |          D ]
}d|z  ||<   t          |          }|                     t          |          |           t          |          D ]<}|                     t          ||                   |t	          d|          z
             =|                     |           d S )N   r\   )rL   r;   rM   rl   r   r,  rP   rS   r  r   r]  s        rU   test_unbalancedzHuffmanTests.test_unbalanced
  s    q 	 	A1fDGGD!!TA&&&q 	: 	:ASa\\1s1ayy=9999rW   c                 ,   d}t          t          |                    }t                      }|                    ||           |                     d                    |                    |                    |           |                     |           d S )Nz,the quick brown fox jumps over the lazy dog.rY   )r;   r   r   r/  rM   ri  r  r,  )rP   messager]  rR   s       rU   test_counterzHuffmanTests.test_counter
  s}    @GG,,--JJ	w$00':::rW   c                 X   t          t          d          d          }t          t          |                    }t	                      }|                    ||           |                     t          |                    |                    |           | 	                    |           d S )NrI   r   r   )
r   rL   r;   r   r   r/  rM   r0  r  r,  )rP   plainr]  rR   s       rU   test_random_listzHuffmanTests.test_random_list
  s    c

c***GENN++JJ	uahhtnn--u555rW   c                     dddt          dd          fD ]=}t          d t          |          D                       }|                     |           >d S )Nr   r   r}   r   rN  c                 ,    i | ]}|t                      S rg   r
   r%  s     rU   
<dictcomp>z1HuffmanTests.test_random_freq.<locals>.<dictcomp> 
  s     ? ? ?FHH ? ? ?rW   )r	   r;   rL   r,  )rP   rS   r]  s      rU   test_random_freqzHuffmanTests.test_random_freq
  sc    Aq'!S//) 	" 	"A ? ?eAhh ? ? ?@@DOOD!!!!	" 	"rW   N)rd   re   rf   r  r$  r&  r  r,  r2  r6  r9  r<  rA  rg   rW   rU   r  r  	  s        - - -3 3 38 8 8@ @ @) ) )  	 	 	    " " " " "rW   r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )CanonicalHuffmanTestsc           	      l   t          d          }t          t          |                    \  }}}|                     t	          |          t
                     |                     t	          |          t                     |                     t	          |          t                     t                      }|                    ||           |                     t          |	                    |                    |           |                     t          t          |||                    |           d S Ns,   the quick brown fox jumps over the lazy dog.)r  r<   r   rM   rN   dictr0  r   r/  r  r=   )rP   r;  chcrs   r  rR   s         rU   rV   z CanonicalHuffmanTests.test_basic'
  s    IJJ.wu~~>>UFcD)))ed+++ft,,,JJ	e188C==115999#3Auf#E#EFFNNNNNrW   c           
      `   dddddd}t          |          \  }}}|                     |t          d          t          d          t          d          t          d	          t          d
          d           |                     |g d           |                     |g d           t          d          }d}|                     d                    |                    |                    |           |                     d                    t          |||                    |           d S )Nr   r   r\   r   )rR   rT   r2  dr   rJ   r   r  1111rI  )r   r\   r\   r\   r   )rR   rT   r   r2  rI  01011001110011110101100abracadabrarY   )r<   rM   r   ri  r  r=   )rP   r  codedictrs   r  rR   r  s          rU   test_examplez"CanonicalHuffmanTests.test_example2
  s,   AAAA66"3C"8"8%#)1$)1&)9)9)1&)9)9)1%	$: $: 	; 	; 	;
 	000!:!:!:;;;.//(!3!344c:::!1!UF!C!CDDcJJJJJrW   c                 F   |                      t          t          g            |                      t          t          i            |                      t          t                     t	          t          d                    }|                      t          t          |d           d S )NaabcrR   )r^   r_   r<   r`   r;   r   )rP   r  s     rU   test_canonical_huffman_errorsz3CanonicalHuffmanTests.test_canonical_huffman_errorsA
  s    )%6;;;*&7<<<)%677776??++)%6SAAAAArW   c           
         ddi}t          |          \  }}}|                     |dt          d          i           |                     |ddg           |                     |dg           t          d          D ]}|dgz  }t                      }|                    ||           |                     |                                |dz             |                     t          t          |||                    |           |                    d           | 	                    t          t          t          |||                     d S )NrR   r\   rJ   r   r}   )r<   rM   r   rL   r/  rO   r0  r=   r   r^   r`   )rP   r  rG  rs   r  rS   r  rR   s           rU   r  z%CanonicalHuffmanTests.test_one_symbolI
  sM   Ah.s33UFsHSMM2333A'''#'''q 	B 	BAse)C

AHHS#QVVXXq3w///T"21eV"D"DEEsKKKHHQKKKj$.q%@@B B B B	B 	BrW   c                 @   t          d          }dg}|                     t          t          dddg|           |                     t          t          |ddh|           |                     t          t          |ddg|           |                     t          t          |ddg|           |                     t          t          |ddgd           g d	}|                     t          d
t          |g d|           |                     t          dt          |ddgz  |           d S )Nr  rR   r  r   r\   rZ   l             r   )rR   rT   r2  rI  z#sum(count) = 3, but len(symbol) = 4)r   r\   r   z#len(count) cannot be larger than 32r  )r   r^   r_   r=   rP  r  r`   )rP   rR   r   r  s       rU   test_canonical_decode_errorsz2CanonicalHuffmanTests.test_canonical_decode_errorsY
  s0   VE)%5taVQGGG)%5q1a&!DDD)%5q1c(AFFF-)91q'lANNN)%5q1a&"EEE%%%  !F!11iii	I 	I 	I 	  !F!11bA3h	H 	H 	H 	H 	HrW   c           	      b   t                      }t          dd          D ]}ddgz  }d||<   |                     t          d|d|z  fz  t          ||g            d|z  }|||<   |dk    r/t
          dk    r$|                     t          t          ||g            x|                     t          d|z  t          ||g            |dz   ||<   |                     t          d	||||         fz  t          ||g            t	          |ddgz  g           }|                     t          |          g            d S )
Nr\   r   r   r[   z count[%d] not in [0..%d], got -1r   r}   z$sum(count) = %d, but len(symbol) = 0z count[%d] not in [0..%d], got %d)
r   rL   r  r`   r=   r   r^   rP  rM   r0  )rP   rR   r   rs   maxbitsrG  s         rU   !test_canonical_decode_count_rangez7CanonicalHuffmanTests.test_canonical_decode_count_rangeq
  sg   JJq" 	0 	0A!HEE!H$$Z2aa[@ !UB0 0 0 1fGE!HBww7a<<!!-"2AubB B B$$Z6@ !UB0 0 0 {E!H$$Z2a%(5KK !UB0 0 0 0  28R00dR(((((rW   c                    g d}ddddgddig}t          d          }|                     t          t          |||                    |           |                     t          t          |d|                    |           |                     t          t          d	|z  ||                    d	|z             g d
}|                     t          t          |||                    |           |                     t          t          |g d|                    |           |                     t          t          |g d|                    |           g d}|                     t          t          |||                    |           |                     t          t          ||t	          |                              |           |                     t          t          ||t          |                              |           |                     t          t          ||t          |                              |           |                     t          t          ||t          |                              |           d S )N)r   r   r}   r  *   y333333?y              @r>  r  z00 01 10 11r   )r   r   r}   r   r   r   r   r   )ir   r}   )Nr   r}   )r  B   r   b   )r   rM   r0  r=   r  tupler:  rG  )rP   r  r   rR   rs   s        rU   test_canonical_decode_simplez2CanonicalHuffmanTests.test_canonical_decode_simple
  sO   ii"xnsAh/]##.q#q99::A>>>.q)Q??@@!DDD.q1uc1==>>AFFF(((.q%;;<<a@@@.q+++qAABBAFFF.q,,,BBCCQGGG .q#q99::A>>>.q#y||DDEEqIII.q#uQxx@@AA1EEE.q#uQxx@@AA1EEE 	.q#tAww??@@!DDDDDrW   c           
         t                      }|                     t          t          |g g                     g            |                    d           |                     t          dt          t          |g g                      t          d          }|                     t          dt          t          |g g                      d S )Nr   reached end of bitarray0000000000000000000000000000000ran out of codes)r   rM   r0  r=   r   r  r`   rt   s     rU   test_canonical_decode_emptyz1CanonicalHuffmanTests.test_canonical_decode_empty
  s    JJ.q"b99::B???	  -F!%'72r'B'B	D 	D 	DX  -?!%'72r'B'B	D 	D 	D 	D 	DrW   c           	         dg}ddg}t          d          }|                     t          t          |||                    d|z             |                    d           |                    t          d                     t          |||          }|                     t          dt          |           |                    t          d                     t          |||          }|                     t          d	t          |           d S )
Nr  r   r\   r  r   
0000000000r_  00000000000000000000ra  )r   rM   r0  r=   r   r   r  r`   )rP   symbolsrs   rR   iterators        rU    test_canonical_decode_one_symbolz6CanonicalHuffmanTests.test_canonical_decode_one_symbol
  s   %AUOO.q%AABBW	& 	& 	&		(##$$$#Aug66  -F!%x	1 	1 	1 	
(##$$$#Aug66  -?!%x	1 	1 	1 	1 	1rW   c           	         t          t          d          5 }t          |                                          }d d d            n# 1 swxY w Y   |                     t          |          dk               t          t          |                    \  }}}t                      }|	                    ||           | 
                    t          t          |||                    |           |                     |||           d S )NrbiP  )rj  __file__r  rk  rq   rl   r<   r   r   r/  rM   r=   
check_code)rP   ra   r  rM  rs   r  rR   s          rU   test_canonical_decode_largez1CanonicalHuffmanTests.test_canonical_decode_large
  s   (D!! 	&QAFFHH%%C	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&C5()))"3GCLL"A"A%JJ	3#3Auf#E#EFFLLL%00000s   "AAAc                 H   t          d          t          t                              \  }}}|                     |||           t	                      }|                    |dz             t          |||          fd}|                      |                       t          d          ||	                    t          d                    <   |                      |            t          d                     |d d = | 
                    t          |           d S )Ns   Hello World!r   c                  n    t           fdt          t                              D                       S )Nc              3   6   K   | ]}t                    V  d S rD  )rH  )r&  rQ   its     rU   rF  zdCanonicalHuffmanTests.test_canonical_decode_symbol_change.<locals>.decode_one_msg.<locals>.<genexpr>
  s)      ??!T"XX??????rW   )r  rL   rl   )rq  r  s   rU   decode_one_msgzQCanonicalHuffmanTests.test_canonical_decode_symbol_change.<locals>.decode_one_msg
  s2    ????uSXX??????rW   r{   ls   Hekko Workd!)r  r<   r   rl  r   r/  r=   rM   r  r  r^   r  )rP   rM  rs   r  rR   rr  rq  r  s         @@rU   #test_canonical_decode_symbol_changez9CanonicalHuffmanTests.test_canonical_decode_symbol_change
  s&   (("3GCLL"A"A%%000JJ	28$$$a//	@ 	@ 	@ 	@ 	@ 	@ 	))3///),Sv||CHH%%&))9_+E+EFFF111I*n55555rW   c                     t          t          |          dz
            D ]T}|||                  }|||dz                     }|                     t          |          t          |          k                Ud S )Nr\   )rL   rl   rq   r4   )rP   rG  r  r   rR   rT   s         rU   ensure_sortedz#CanonicalHuffmanTests.ensure_sorted
  sr    s6{{Q'' 	3 	3AF1IAF1q5M"AOOF1IIq		12222	3 	3rW   c                    d}t          |          D ]\  }}t          |||z   dz
            D ]}|||                  }|||dz                     }	|                     t          |          t          |	          cxk    o|k    nc            |                     t          |          dz   t          |	                     ||z  }d S r  )rH  rL   rq   rl   rM   r4   )
rP   rG  rs   r  r  r]  r  r   rR   rT   s
             rU   ensure_consecutivez(CanonicalHuffmanTests.ensure_consecutive
  s    #E** 	 	JE35%#+/22 ; ; q	Nq1u&A#a&& 9 9 9 9E 9 9 9 9:::  Qq		::::SLEE	 	rW   c                    t          |          dz
  }|                     |t          d |                                D                                  |dz   dgz  }|                                D ]:}|                     |j        d           |t          |          xx         dz  cc<   ;|                     ||           d S )Nr\   c              3   4   K   | ]}t          |          V  d S rD  r/  r  s     rU   rF  z5CanonicalHuffmanTests.ensure_count.<locals>.<genexpr>
  s(      %C%Cc!ff%C%C%C%C%C%CrW   r   rH   )rl   rM   r   r  rE   )rP   rG  rs   rV  my_countrR   s         rU   ensure_countz"CanonicalHuffmanTests.ensure_count
  s    e**q.#%C%Ccjjll%C%C%C"C"CDDDaKA3& 	" 	"AQXu---SVV!5)))))rW   c                     t                    t          fdt          d          D                       }|                     |dz             d S )Nc              3   4   K   | ]}|         |z
  z  V  d S rD  rg   )r&  r   rs   len_cs     rU   rF  z8CanonicalHuffmanTests.ensure_complete.<locals>.<genexpr>  s0      AAAaUQY'AAAAAArW   r\   )rl   r  rL   rM   )rP   rs   rb   r  s    ` @rU   ensure_completez%CanonicalHuffmanTests.ensure_complete  s\    E

AAAAAq%AAAAAAJ'''''rW   c                 r    t          |          }|                     |                                           d S rD  )r   rq   r+  )rP   rG  dts      rU   ensure_complete_2z'CanonicalHuffmanTests.ensure_complete_2  s-    __&&&&&rW   c                 .   t          |d          }t                      }|                    ||           t          |||          }~~~|                     t          |          j        d           |                     t          |          |           d S )Nr   r   canonical_decodeiter)r   r   r/  r=   rM   rN   rd   r0  )rP   rG  rs   r  r  rR   rq  s          rU   ensure_round_tripz'CanonicalHuffmanTests.ensure_round_trip  s    f###JJ	ca//ufb*,BCCCb3'''''rW   c                    |                      t          |          t          |          cxk    ot          |          k    nc            |                     |d         d           |                      t	          |          t	          |          k               |                      ||d                                                             |                     ||d                  d                    |                     ||           |                     |||           | 	                    ||           | 
                    |           |                     |           |                     |||           d S )Nr   r[   )rq   rl   r  rM   r   r   r  rv  rx  r|  r  r  r  )rP   rG  rs   r  s       rU   rl  z CanonicalHuffmanTests.check_code  sP   CCKK====3u::====>>>q1%%%CCKK/000F2J++--...VAY*+++3'''UF333#u%%%U###s###sE622222rW   c                 p    t          d          }t          |          } | j        t          |            d S rE  )r  r   rl  r<   )rP   r;  r  s      rU   test_simple_counterz)CanonicalHuffmanTests.test_simple_counter(  s9    IJJenn*3//0000rW   c                 >    ddd} | j         t          |            d S )Nr\   )Nr  )rl  r<   r  s     rU   test_no_compz"CanonicalHuffmanTests.test_no_comp-  s-    a  *4001111rW   c                 d   di }t          dz            D ]}d||<   t          |          \  }}}|                     t          |          dz             |                     t          fd|                                D                                  |                     |||           d S )Nr   r\   c              3   >   K   | ]}t          |          k    V  d S rD  r/  r0  s     rU   rF  z6CanonicalHuffmanTests.test_balanced.<locals>.<genexpr>8  r1  rW   )rL   r<   rM   rl   rq   r   r  rl  )rP   r  r   r]  rs   symrS   s         @rU   r2  z#CanonicalHuffmanTests.test_balanced1  s    qAv 	 	ADGG,T22eSTAF+++?????????@@@eS)))))rW   c           	      x   d}i }t          |          D ]
}d|z  ||<   t          |          d         }|                     t          |          |           t          |          D ]<}|                     t          ||                   |t	          d|          z
             = | j        t          |            d S )Nr   r\   r   )rL   r<   rM   rl   r   rl  r5  s        rU   r6  z%CanonicalHuffmanTests.test_unbalanced;  s    q 	 	A1fDGG &&q)TA&&&q 	: 	:ASa\\1s1ayy=9999*4001111rW   c                     dddt          dd          fD ]2}d t          |          D             } | j        t          |            3d S )Nr   r   r}   r   rN  c                 ,    i | ]}|t                      S rg   r?  r%  s     rU   r@  z:CanonicalHuffmanTests.test_random_freq.<locals>.<dictcomp>H  s    222AAvxx222rW   )r	   rL   rl  r<   )rP   rS   r  s      rU   rA  z&CanonicalHuffmanTests.test_random_freqF  s`    Aq'!S//) 	6 	6A22q222DDO.t44555	6 	6rW   N)rd   re   rf   rV   rN  rQ  r  rT  rW  r]  rb  rh  rm  rt  rv  rx  r|  r  r  r  rl  r  r  r2  r6  rA  rg   rW   rU   rC  rC  %
  s       	O 	O 	OK K KB B BB B B H H H0) ) )8E E EB	D 	D 	D1 1 1"1 1 16 6 6"3 3 3
 
 
* * *( ( (' ' '
	( 	( 	(3 3 3 1 1 1
2 2 2* * *	2 	2 	26 6 6 6 6rW   rC  __main__)s__doc__rg  r   r   r  r  r  rv  rc  rl  re  unittestior   	functoolsr   r
   r   r   r   r   r	   r   r   stringr   r   collectionsr   r   r   r   r   r   bitarray.test_bitarrayr   r   r   r   r   bitarray.utilr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   TestCaserA   ri   rw   r   HAVE_BINOMIALVARIATEr   r   r   r>  ru  r  r  r  r  r  r  r)  r6  rS  rb  rh  r  r  r  r  r1  r{  r  r  r  r  r  rC  rd   mainrg   rW   rU   <module>r     s	  
  
			 



                     " " " " " " " " " " " " " " " " " " " " ( ( ( ( ( ( ( (      * * * * * * * * * * * * * * L L L L L L L L L L L L L L	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ) ( ( ( ( ( ( ("7 "7 "7 "7 "7X& "7 "7 "7L> > > > >8$ > > >DV; V; V; V; V;X& V; V; V;t '+w6 D D D D Dx0 D D D   !!L+ L+ L+ L+ L+X& L+ L+ "!L+`O) O) O) O) O)" O) O) O)fC" C" C" C" C"(# C" C" C"N>( >( >( >( >("D >( >( >(DJ. J. J. J. J.8$d J. J. J.\P2 P2 P2 P2 P2)4 P2 P2 P2hO2 O2 O2 O2 O2h' O2 O2 O2f-# -# -# -# -#(#T -# -# -#b"* "* "* "* "** "* "* "*L ]) ]) ]) ]) ])H% ]) ]) ])BA A A A A(# A A AB0 0 0 0 0X& 0 0 0fA A A A A A A ADD D D D Dn D D D:L L L L L)4 L L L`( ( (+# +# +# +# +#X& +# +# +#^b. b. b. b. b.8$d b. b. b.LJ J J J J!4 J J J\Z# Z# Z# Z# Z#x $ Z# Z# Z#|Q Q Q Q Qx $ Q Q QjHA HA HA HA HA(+T HA HA HAXO4 O4 O4 O4 O4"D O4 O4 O4fY Y Y Y Y*D Y Y Yz0 0 0 0 0x( 0 0 00Z" Z" Z" Z" Z"8$ Z" Z" Z"|d6 d6 d6 d6 d6H-t d6 d6 d6P	 zHMOOOOO rW   