
    daf{                       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	m
Z
mZ  G d dej                        Z G d d      Z G d d	e      Z G d
 de      Z G d dee      Z G d dee      Z G d de      Z G d dee      Z G d dee      Z G d de      Z G d dee      Z G d dee      Z G d de      Z G d dej                        Z G d  d!ej                        Zed"k(  r ej:                          yy)#zUnittest for ipaddress module.    N)LARGESTSMALLESTc                   R    e Zd Zed        Zej                  d        Zd Zd Z	d Z
y)BaseTestCasec                     t         N)NotImplementedErrorselfs    ./root/Python-3.12.4/Lib/test/test_ipaddress.pyfactoryzBaseTestCase.factory%   s    !!    c              '      K   |r||z  }| j                  ||      }|5 }| ddd       j                  j                  &| j                  |j                  j                         yy# 1 sw Y   FxY ww)z{
        Ensure exception does not display a context by default

        Wraps unittest.TestCase.assertRaisesRegex
        N)assertRaisesRegex	exception__context__
assertTrue__suppress_context__)r   exc_typedetailsargscmexcs         r   assertCleanErrorzBaseTestCase.assertCleanError)   sq      nG##Hg6 	3I	 ==$$0OOCMM>>? 1	 	s   A4A(AA4(A1-A4c                 F     | j                   t        j                  |g| S )z Ensure a clean AddressValueError)r   	ipaddressAddressValueErrorr   r   r   s      r   assertAddressErrorzBaseTestCase.assertAddressError9   *    $t$$Y%@%@%,5/35 	5r   c                 F     | j                   t        j                  |g| S )z Ensure a clean NetmaskValueError)r   r   NetmaskValueErrorr   s      r   assertNetmaskErrorzBaseTestCase.assertNetmaskError>   r    r   c                 d    | j                  | j                  |      | j                  |             y)z8Check constructor arguments produce equivalent instancesN)assertEqualr   r   lhsrhss      r   assertInstancesEqualz!BaseTestCase.assertInstancesEqualC   s$    c*DLL,=>r   N)__name__
__module____qualname__propertyr   
contextlibcontextmanagerr   r   r#   r)    r   r   r   r      sA    & " " @ @5
5
?r   r   c                   $    e Zd Zd Zd Zd Zd Zy)CommonTestMixinc                 r    | j                  d      5  | j                  d       d d d        y # 1 sw Y   y xY w)NAddress cannot be empty r   r   r
   s    r   test_empty_addressz"CommonTestMixin.test_empty_addressJ   s2    $$%>? 	LL	 	 	s   -6c                     | j                  t        j                  t        d                  5  | j	                  d       d d d        y # 1 sw Y   y xY w)Nz1.0g      ?)r   reescapereprr   r
   s    r   test_floats_rejectedz$CommonTestMixin.test_floats_rejectedN   s>    $$RYYtE{%;< 	LL	 	 	s   A		Ac                    | j                  t        t        j                  | j	                  d             | j                  t        t
        | j	                  d             | j                  t        t        | j	                  d             y )N   )assertRaises	TypeErroroperatorindexr   hexbytesr
   s    r   test_not_an_index_issue15559z,CommonTestMixin.test_not_an_index_issue15559R   sV     	)X^^T\\!_E)S$,,q/:)UDLLO<r   c                 ,   t        t        j                  dz         D ]i  }| j                  |      5  | j	                  |      }t        j
                  t        j                  ||            }| j                  ||       d d d        k y # 1 sw Y   vxY w)Nr>   )proto)rangepickleHIGHEST_PROTOCOLsubTestr   loadsdumpsr%   )r   addrrG   xys        r   pickle_testzCommonTestMixin.pickle_testY   s    622Q67 	'EE* 'LL&LLa!78  A&' '	'' 's   AB

B	N)r*   r+   r,   r7   r<   rE   rQ   r0   r   r   r2   r2   H   s    ='r   r2   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)CommonTestMixin_v4c                     d}g d}|D ]H  }| j                  |      5  | j                  |      5  | j                  |       d d d        d d d        J y # 1 sw Y   xY w# 1 sw Y   axY w)Nz(Leading zeros are not permitted in '\d+')z000.000.000.000z192.168.000.001z016.016.016.016z001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)address)rK   r   r   )r   msg	addressesrU   s       r   test_leading_zerosz%CommonTestMixin_v4.test_leading_zerosc   sv    9	
	 ! 	*Gg. *,,S1 *LL)** *	** ** *s"   A!AA!AA!!A*	c                 L    | j                  dd       | j                  dd       y )Nr   0.0.0.0    P 192.168.0.1r)   r
   s    r   test_intzCommonTestMixin_v4.test_intu   s"    !!!Y/!!*m<r   c                     | j                  t        j                  d      d       | j                  t        j                  d      d       y )N00000000rZ   c0a80001r\   )r)   rD   fromhexr
   s    r   test_packedzCommonTestMixin_v4.test_packedy   s4    !!%--
";YG!!%--
";]Kr   c                     d}| j                  t        j                  |            5  | j                  d       d d d        y # 1 sw Y   y xY w)Nz,-1 (< 0) is not permitted as an IPv4 addressr   r9   r:   r   r   rV   s     r   test_negative_ints_rejectedz.CommonTestMixin_v4.test_negative_ints_rejected}   >    <$$RYYs^4 	LL	 	 	   AAc                     d}| j                  t        j                  |dz              5  | j                  d       d d d        y # 1 sw Y   y xY w)Nz1%d (>= 2**32) is not permitted as an IPv4 addressl        rf   rg   s     r   test_large_ints_rejectedz+CommonTestMixin_v4.test_large_ints_rejected   sC    A$$RYYsU{%;< 	 LL	  	  	 s   AAc                 0      fd} |d        |d       y )Nc                     d| z  }d}j                  t        j                  ||| fz              5  j                  |       d d d        y # 1 sw Y   y xY w)N    z4%r (len %d != 4) is not permitted as an IPv4 addressrf   lengthrN   rV   r   s      r   assertBadLengthzBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength   sR    6>DHC((3$3G)HI #T"# # #s   AA      r0   r   rr   s   ` r   test_bad_packed_lengthz)CommonTestMixin_v4.test_bad_packed_length   s    	# 	r   N)	r*   r+   r,   rX   r^   rc   rh   rl   rv   r0   r   r   rS   rS   a   s!    *$=L
 
r   rS   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
CommonTestMixin_v6c                 L    | j                  dd       | j                  dd       y )Nz
0000::0000::z000::c0a8:0001::c0a8:1r]   r
   s    r   rX   z%CommonTestMixin_v6.test_leading_zeros   s#    !!,5!!"2J?r   c                 L    | j                  dd       | j                  dd       y )Nr   rz   r[   r{   r]   r
   s    r   r^   zCommonTestMixin_v6.test_int   s"    !!!T*!!*j9r   c                     dt         j                  d      z   }| j                  |d       dt         j                  d      z   }| j                  |d       t         j                  d      dz   }| j                  |d       y )Ns               r`   rz   ra   r{   zc0a8:1::)rD   rb   r)   r   rN   s     r   rc   zCommonTestMixin_v6.test_packed   sk    %--
33!!$-%--
33!!$
3}}Z(83!!$
3r   c                     d}| j                  t        j                  |            5  | j                  d       d d d        y # 1 sw Y   y xY w)Nz,-1 (< 0) is not permitted as an IPv6 addressre   rf   rg   s     r   rh   z.CommonTestMixin_v6.test_negative_ints_rejected   ri   rj   c                     d}| j                  t        j                  |ddz  z              5  | j                  ddz         d d d        y # 1 sw Y   y xY w)Nz2%d (>= 2**128) is not permitted as an IPv6 address      rf   rg   s     r   rl   z+CommonTestMixin_v6.test_large_ints_rejected   sK    B$$RYYsQV|%<= 	!LLC 	! 	! 	!s   AAc                 0      fd} |d        |d       y )Nc                     d| z  }d}j                  t        j                  ||| fz              5  j                  |       j                  |       d d d        y # 1 sw Y   y xY w)Nro   z5%r (len %d != 16) is not permitted as an IPv6 addressrf   rp   s      r   rr   zBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength   s^    6>DIC((3$3G)HI #T"T"# # #s   #AA'      r0   ru   s   ` r   rv   z)CommonTestMixin_v6.test_bad_packed_length   s    	# 	r   c                 x    d}| j                  d|      5  | j                  |       d d d        y # 1 sw Y   y xY w)Nz::1%Invalid IPv6 address: "%r"r6   r   rU   s     r   test_blank_scope_idz&CommonTestMixin_v6.test_blank_scope_id   s9    $$%A7K 	"LL!	" 	" 	"   09c                 x    d}| j                  d|      5  | j                  |       d d d        y # 1 sw Y   y xY w)Nz
::1%scope%r   r6   r   s     r   "test_invalid_scope_id_with_percentz5CommonTestMixin_v6.test_invalid_scope_id_with_percent   s9    $$%A7K 	"LL!	" 	" 	"r   N)r*   r+   r,   rX   r^   rc   rh   rl   rv   r   r   r0   r   r   rx   rx      s+    @:4
!
	"
"r   rx   c                   Z    e Zd Zej                  Zd Zd Zd Zd Z	d Z
d Zd Zd Zd	 Zy
)AddressTestCase_v4c                     t        j                  d      }g d}|D ]!  \  }}| j                  |t        ||             # y )N1.2.3.42))b 00000001000000100000001100101010)nr   )rO   0102032a)X0102032A)_b'0000_0001_0000_0010_0000_0011_0010_1010)_nr   )_x	0102_032a)_X	0102_032A)#b"0b00000001000000100000001100101010)#nr   )#x
0x0102032a)#X
0X0102032A)#_b)0b0000_0001_0000_0010_0000_0011_0010_1010)#_nr   )#_x0x0102_032a)#_X0X0102_032A)sr   )r5   r   )r   IPv4Addressr%   format)r   v4v4_pairsfmttxts        r   test_formatzAddressTestCase_v4.test_format   sD    "":.
( # 	3JS#S&S/2	3r   c                     d}| j                  d|      5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nz127.0.0.1/24Unexpected '/' in %rr   r   r   r~   s     r   test_network_passed_as_addressz1AddressTestCase_v4.test_network_passed_as_address   s;    $$%;TB 	(!!$'	( 	( 	(s   4=c                      fd} |d        |d        |d        |d        |d        |d        |d        |d	        |d
        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d       y )Nc                 ~    j                  d|       5  t        j                  |        d d d        y # 1 sw Y   y xY w)NzExpected 4 octets in %rr   rN   r   s    r   assertBadSplitzAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplit   s7    (()BDI ,%%d+, , ,   3<z127.0.1z42.42.42.42.42z42.42.42z42.4242z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016016000z0x0a.0x0a.0x0az	0x0a.0x0a0x0a.bogusz	bogus.com10001000000000000000z192.168.0.1.comr0   r   r   s   ` r   test_bad_address_splitz)AddressTestCase_v4.test_bad_address_split   s    	, 	y!'(z"wt~&~&'(~&'(}%y!uu'({#vsw{#v)*()r   c                 0      fd} |d        |d       y )Nc                 ~    j                  d|       5  t        j                  |        d d d        y # 1 sw Y   y xY w)NzEmpty octet not permitted in %rr   r   s    r   assertBadOctetz;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctet  s:    (()J)-/ ,%%d+, , ,r   z	42..42.42z...r0   r   r   s   ` r   test_empty_octetz#AddressTestCase_v4.test_empty_octet  s    	,
 	{#ur   c                       fd} |dd        |dd        |dd        |dd	        |d
d        |dd        |dd        |dd        |dd       y )Nc                     d|d| }j                  t        j                  |            5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz!Only decimal digits permitted in  in r   r9   r:   r   r   rN   octetrV   r   s      r   r   zBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctet  sF    AFMC((38 ,%%d+, , ,s   AAz0x0a.0x0a.0x0a.0x0ar   z0xa.0x0a.0x0a.0x0a0xaz42.42.42.-0-0z42.42.42.+0+0z42.42.42.-42z-42z
+1.+2.+3.4+1z	1.2.3.4e04e0	1.2.3.4::z4::1.a.2.3ar0   r   s   ` r   test_invalid_charactersz*AddressTestCase_v4.test_invalid_characters
  sf    	,
 	,f5+U3}d+}d+~u-|T*{E*{E*y#&r   c                 4      fd} |dd        |dd       y )Nc                     d}j                  t        j                  ||| fz              5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz*At most 3 characters permitted in %r in %rr   r   s      r   r   z<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctet  sK    >C((3%3F)GH ,%%d+, , ,   AAz0000.000.000.0000000z12345.67899.-54321.-9876512345r0   r   s   ` r   test_octet_lengthz$AddressTestCase_v4.test_octet_length  s     	,
 	)622G<r   c                 4      fd} |dd        |dd       y )Nc                     d|| fz  }j                  t        j                  |            5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz$Octet %d (> 255) not permitted in %rr   r   s      r   r   z;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet$  sJ    8E4=HC((38 ,%%d+, , ,r   z	257.0.0.0i  z192.168.0.999i  r0   r   s   ` r   test_octet_limitz#AddressTestCase_v4.test_octet_limit#  s    	,
 	{C(,r   c                 &    | j                  d       y N	192.0.2.1rQ   r
   s    r   test_picklezAddressTestCase_v4.test_pickle,  s    %r   c                 L    t        j                  | j                  d             y r   weakrefrefr   r
   s    r   test_weakrefzAddressTestCase_v4.test_weakref/  s    DLL-.r   N)r*   r+   r,   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   r   r      s:    ##G32(
*:' =-&/r   r   c                   ~    e Zd Zej                  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y)AddressTestCase_v6c                     t        j                  d      }g d}|D ]!  \  }}| j                  |t        ||             # y )Nz
::1.2.3.42))r   ڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r    0000000000000000000000000102032a)rO   r   )r    0000000000000000000000000102032A)r   ڟ0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r   '0000_0000_0000_0000_0000_0000_0102_032a)r   r   )r   '0000_0000_0000_0000_0000_0000_0102_032A)r   ڂ0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r   "0x0000000000000000000000000102032a)r   r   )r   "0X0000000000000000000000000102032A)r   ڡ0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r   )0x0000_0000_0000_0000_0000_0000_0102_032a)r   r   )r   )0X0000_0000_0000_0000_0000_0000_0102_032A)r   	::102:32a)r5   r   )r   IPv6Addressr%   r   )r   v6v6_pairsr   r   s        r   r   zAddressTestCase_v6.test_format6  sE    ""<0!
F # 	3JS#S&S/2	3r   c                 0      fd} |d        |d       y )Nc                     d}j                  ||       5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nr   )r   r   r   rN   rV   r   s     r   r   zIAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplit`  s;    (C((d3 ,%%d+, , ,s   5>z::1/24z::1%scope_id/24r0   r   s   ` r   r   z1AddressTestCase_v6.test_network_passed_as_address_  s    	, 	x ()r   c                 p      fd} |d        |d        |d        |d        |d        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)NzAt least 3 parts expected in %r%r   r   splitr   r   r  s     r   r   zUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplith  sH    3C((djjoa.@A ,%%d+, , ,   AA:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper0   r   s   ` r   *test_bad_address_split_v6_not_enough_partsz=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsg  s;    	,
 	st{#y!z"()r   c                       fd} |d        |d        |d        |d        |d        |d        |d        |d	        |d
        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz At most 8 colons permitted in %rr  r   r  r  s     r   r   zTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplitu  H    4C((djjoa.@A ,%%d+, , ,r
  z9:8:7:6:5:4:3::2:1z10:9:8:7:6:5:4:3:2:1z::8:7:6:5:4:3:2:1z8:7:6:5:4:3:2:1::z10:9:8:7:6:5:4:3:42.42.42.42z9:8:7:6:5:4:3::2:1%scopez10:9:8:7:6:5:4:3:2:1%scopez::8:7:6:5:4:3:2:1%scopez8:7:6:5:4:3:2:1::%scopez"10:9:8:7:6:5:4:3:42.42.42.42%scoper0   r   s   ` r   )test_bad_address_split_v6_too_many_colonsz<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonst  sd    	,
 	+,-.*+*+5612340101;<r   c                       fd} |d        |d        |d        |d        |d        |d        |d        |d	        |d
        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz+Exactly 8 parts expected without '::' in %rr  r   r  r  s     r   r   zSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplit  sH    ?C((djjoa.@A ,%%d+, , ,r
  z3ffe:0:0:0:0:0:0:0:1z9:8:7:6:5:4:3:2:1z7:6:5:4:3:2:1z9:8:7:6:5:4:3:42.42.42.42z7:6:5:4:3:42.42.42.42z3ffe:0:0:0:0:0:0:0:1%scopez9:8:7:6:5:4:3:2:1%scopez7:6:5:4:3:2:1%scopez9:8:7:6:5:4:3:42.42.42.42%scopez7:6:5:4:3:42.42.42.42%scoper0   r   s   ` r   (test_bad_address_split_v6_too_many_partsz;AddressTestCase_v6.test_bad_address_split_v6_too_many_parts  sc    	,
 	-.*+'23./3401,-8945r   c                 0      fd} |d        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz.Expected at most 7 other parts with '::' in %rr  r   r  r  s     r   r   zeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplit  sH    BC((djjoa.@A ,%%d+, , ,r
  z1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper0   r   s   ` r   :test_bad_address_split_v6_too_many_parts_with_double_colonzMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon  s    	,
 	)*/0r   c                 P     fd} |d        |d        |d        |d        |d        |d        |d        |d	        |d
        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz At most one '::' permitted in %rr  r   r  r  s     r   r   zZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplit  r  r
  z
3ffe::1::1z1::2::3::4:5z2001::db:::1z	3ffe::1::z	::3ffe::1z:3ffe::1::1z3ffe::1::1:z:3ffe::1::1:z:::z2001:db8:::1z3ffe::1::1%scopez1::2::3::4:5%scopez2001::db:::1%scopez3ffe::1::%scopez::3ffe::1%scopez:3ffe::1::1%scopez3ffe::1::1:%scopez:3ffe::1::1:%scopez	:::%scopez2001:db8:::1%scoper0   r   s   ` r   /test_bad_address_split_v6_repeated_double_colonzBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon  s    	,
 	|$~&~&{#{#}%}%~&u~&)*+,+,()()*+*++,{#+,r   c                       fd} |d        |d        |d        |d        |d        |d        |d        |d	       y )
Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz0Leading ':' only permitted as part of '::' in %rr  r   r  r  s     r   r   zRAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplit  sH    DC((djjoa.@A ,%%d+, , ,r
  z:2001:db8::1z:1:2:3:4:5:6:7z:1:2:3:4:5:6:z:6:5:4:3:2:1::z:2001:db8::1%scopez:1:2:3:4:5:6:7%scopez:1:2:3:4:5:6:%scopez:6:5:4:3:2:1::%scoper0   r   s   ` r   'test_bad_address_split_v6_leading_colonz:AddressTestCase_v6.test_bad_address_split_v6_leading_colon  sP    	,
 	~&'(''(+,-.,--.r   c                       fd} |d        |d        |d        |d        |d        |d        |d        |d	       y )
Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz1Trailing ':' only permitted as part of '::' in %rr  r   r  r  s     r   r   zSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplit  sH    EC((djjoa.@A ,%%d+, , ,r
  z2001:db8::1:z1:2:3:4:5:6:7:z
::1.2.3.4:z::7:6:5:4:3:2:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper0   r   s   ` r   (test_bad_address_split_v6_trailing_colonz;AddressTestCase_v6.test_bad_address_split_v6_trailing_colon  sP    	,
 	~&'(|$'(+,-.)*-.r   c                       fd} |dd        |dd        |dd        |dd	        |d
d        |dd        |dd        |dd        |dd	        |dd       y )Nc                     j                  d|| j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz%s in %rr  r   r  )rN   v4_errorr   s     r   assertBadAddressPartzDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPart  sE    ((Xtzz#q?QR ,%%d+, , ,s   AAz3ffe::1.netzExpected 4 octets in '1.net'z3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper0   )r   r#  s   ` r   test_bad_v4_part_inz&AddressTestCase_v6.test_bad_v4_part_in  s    	, 	],JK_=	?Y;	=]?	A..	/ 	02PQ2=	?_;	=0?	A4.	/r   c                       fd} |dd        |dd        |dd        |dd	        |d
d        |dd        |dd        |dd        |dd        |dd	        |dd        |dd       y )Nc                     d|d| j                  d      d   }j                  t        j                  |            5  t	        j
                  |        d d d        y # 1 sw Y   y xY w)NzOnly hex digits permitted in r   r  r   )r	  r   r9   r:   r   r   rN   partrV   r   s      r   assertBadPartzAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPart  sT    =A4::c?STCUVC((38 ,%%d+, , ,s    AA(z
3ffe::googgoogz3ffe::-0r   z3ffe::+0r   z3ffe::-1-1r   1.2.3.41234:axy::baxyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope1234:axy::b%scoper0   r   r)  s   ` r   r   z*AddressTestCase_v6.test_invalid_characters  s    	,
 	lF+j$'j$'j$'k9-mU+(&1&-&-&-'3)51r   c                       fd} |dd        |dd        |dd        |dd	        |d
d        |dd        |dd        |dd	       y )Nc                     d}j                  ||| j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz*At most 4 characters permitted in %r in %rr  r   r  r'  s      r   r)  z:AddressTestCase_v6.test_part_length.<locals>.assertBadPart  sJ    >C((dDJJsOA4FG ,%%d+, , ,s   AAz::0000000000z3ffe::1000010000z02001:db8::02001z2001:888888::1888888z::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper0   r0  s   ` r   test_part_lengthz#AddressTestCase_v6.test_part_length  s^    	,
 	i)mW-mW-&1ow/)73)73,h7r   c                 H    | j                  d       | j                  d       y N
2001:db8::2001:db8::%scoper   r
   s    r   r   zAddressTestCase_v6.test_pickle   s    &+,r   c                     t        j                  | j                  d             t        j                  | j                  d             y r9  r   r
   s    r   r   zAddressTestCase_v6.test_weakref$  s-    DLL./DLL!345r   c                     | j                  d      }| j                  |t        j                  |             | j                  |t        j                  |             y )Nr;  )r   r%   copydeepcopyr~   s     r   	test_copyzAddressTestCase_v6.test_copy(  sB    ||./tyy/t}}T23r   N)r*   r+   r,   r   r   r   r   r   r  r  r  r  r  r  r  r$  r   r7  r   r   r@  r0   r   r   r   r   3  sY    ##G'3R**=(6(1-8/ / /62(8 -64r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
NetmaskTestMixin_v4;Input validation on interfaces and networks is very similarc                     dD ]x  }| j                  |      }| j                  t        |      d       | j                  t        |j                        d       | j                  t        |j                        d       z y )N)r,     
1.2.3.4/32255.255.255.255rZ   r   r%   strnetmaskhostmask)r   rU   nets      r   test_no_maskz NetmaskTestMixin_v4.test_no_mask1  sf    C 	;G,,w'CSX|4S-/@AS.	:		;r   c                 |    d}| j                  d|z        5  | j                  |       d d d        y # 1 sw Y   y xY w)Nz1.2.3.4/32/24Only one '/' permitted in %rr6   r~   s     r   test_split_netmaskz&NetmaskTestMixin_v4.test_split_netmask:  s<    $$%Cd%JK 	LL	 	 	s   2;c                       fd} |dd        |dd        |dd        |dd        |dd        |d	d
        |dt        j                  d             y )Nc                 t    j                  |      5  j                  |        d d d        y # 1 sw Y   y xY wr   r6   rN   r   r   s     r   assertBadAddresszANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress@  2    ((1 #T"# # #   .7/r4   /8r   zExpected 4 octets
google.com10/8	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r9   r:   r   rU  s   ` r   test_address_errorsz'NetmaskTestMixin_v4.test_address_errors?  s_    	# 	7889"56':;!45&;<bii&>?r   c           	      &   | j                  t        | j                  d            d       | j                  t        | j                  d            d       | j                  t        | j                  d            d       | j                  t        | j                  d            d       t        dd      D ]  }d|z  }| j                  |      }| j                  t        |      |       | j                  t        | j                  d	|j                  z              |       | j                  t        | j                  d
|z              |       |dv rdd|z
  z  }| j                  t        | j                  d	|j
                  z              |        y )N	192.0.2.0   192.0.2.0/24)ra  24ra  255.255.255.0z192.0.2.0/255.255.255.0r   !   z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%d)    r   rh  )r%   rJ  r   rH   rK  rL  )r   inet_strrM  s       r   test_valid_netmaskz&NetmaskTestMixin_v4.test_valid_netmaskL  sY   T\\*;<=~NT\\*=>?PT\\*HIJ'	)T\\*CDE'	)q" 	IA"Q&G,,w'CSXw/DLL!;<=wH Sma.?!@A7K G|&"q&1DLL!<=>I	Ir   c                      fd} |dd        |dd        |dd        |dd        |dd        |dd        |dd	        |dd
        |dd        |dd        |dd        |dd        |dd        |dd       y )Nc                     d|z  }j                  t        j                  |            5  j                  | d|       d d d        y # 1 sw Y   y xY wN%r is not a valid netmaskrX  r#   r9   r:   r   rN   rK  rV   r   s      r   assertBadNetmaskzANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmaske  I    -7C((38 8g678 8 8   AAr,  r5   r+  r    1 0x133z254.254.255.256r   1.1.1.1z254.xyz.2.3z240.255.0.0z255.254.128.0z0.1.127.255puddingrz   r0   r   rr  s   ` r   test_netmask_errorsz'NetmaskTestMixin_v4.test_netmask_errorsd  s    	8
 	B'D)D)E*E*D)$56I.M2M2O4M2I.D)r   c                 4      fd} |dd        |dd       y )Nc                     d|z  }j                  t        j                  |            5  j                  | |f       d d d        y # 1 sw Y   y xY wNro  rp  rq  s      r   rr  zJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskz  H    -7C((38 .dG_-. . .   AArx  re   rg  r0   rz  s   ` r   test_netmask_in_tuple_errorsz0NetmaskTestMixin_v4.test_netmask_in_tuple_errorsy  s    	. 	B'B'r   c                 j    | j                  d       | j                  d       | j                  d       y )Nz192.0.2.0/27z192.0.2.0/31ra  r   r
   s    r   r   zNetmaskTestMixin_v4.test_pickle  s,    ((%r   Nr*   r+   r,   __doc__rN  rQ  r^  rk  r{  r  r   r0   r   r   rB  rB  .  s*    E;
@I0**(&r   rB  c                   $    e Zd Zej                  Zy)InterfaceTestCase_v4N)r*   r+   r,   r   IPv4Interfacer   r0   r   r   r  r        %%Gr   r  c                   6    e Zd Zej                  Zd Zd Zd Zy)NetworkTestCase_v4c                    | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   y N10.0.0.0/30z10.0.1.0/24z10.0.0.0/24assertFalser   	subnet_ofr   r
   s    r   test_subnet_ofz!NetworkTestCase_v4.test_subnet_of  s    LL'11]+-	. 	LL'11]+-	. 	LL'11]+-	. 	LL'11]+-	.r   c                    | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   y r  r  r   supernet_ofr   r
   s    r   test_supernet_ofz#NetworkTestCase_v4.test_supernet_of  s    LL'33]+-	. 	LL'33]+-	. 	LL'33]+-	. 	LL'33]+-	.r   c                    | j                  t              5  t        j                  d      j	                  t        j
                  d             d d d        | j                  t              5  t        j
                  d      j	                  t        j                  d             d d d        | j                  t              5  t        j                  d      j                  t        j
                  d             d d d        | j                  t              5  t        j
                  d      j                  t        j                  d             d d d        y # 1 sw Y   
xY w# 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   y xY w)Nr  ::1/128)r?   r@   r   IPv4Networkr  IPv6Networkr  r
   s    r   test_subnet_of_mixed_typesz-NetworkTestCase_v4.test_subnet_of_mixed_types  s5   y) 	2!!-0<<%%i02	2 y) 	6!!),88%%m46	6 y) 	2!!-0::%%i02	2 y) 	6!!),66%%m46	6 	6	2 	2	6 	6	2 	2	6 	6s/   8E+8E# 8E/8E;E #E,/E8;FN)	r*   r+   r,   r   r  r   r  r  r  r0   r   r   r  r    s    ##G.$.$6r   r  c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
NetmaskTestMixin_v6rC  c                    dD ]x  }| j                  |      }| j                  t        |      d       | j                  t        |j                        d       | j                  t        |j                        d       z | j                  d      }| j                  t        |      d       | j                  t        |j                        d       | j                  t        |j                        d       y )N)::1r>   s                  r  z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffrz   	::1%scope::1%scope/128rI  )r   rU   rM  
scoped_nets       r   rN  z NetmaskTestMixin_v6.test_no_mask  s    7 	6G,,w'CSXy1S-/XYS.5		6 \\+.
Z/:Z//02[\Z00148r   c                     d}| j                  d|z        5  | j                  |       d d d        d}| j                  d|z        5  | j                  |       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)Nzcafe:cafe::/128/190rP  zcafe:cafe::%scope/128/190r6   )r   rN   scoped_addrs      r   rQ  z&NetmaskTestMixin_v6.test_split_netmask  s}    $$$%Cd%JK 	LL	 2$$%Ck%QR 	&LL%	& 	&		 		& 	&s   A"A."A+.A7c                       fd} |dd        |dd        |dd        |dd        |dd        |d	d
        |dd        |dd        |dd        |dd        |dd        |dd
       y )Nc                 t    j                  |      5  j                  |        d d d        y # 1 sw Y   y xY wr   r6   rT  s     r   rU  zANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddress  rV  rW  rX  r4   rY  rZ  zAt least 3 partsr,  r[  r-  zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez1.2.3.4%scopez
10%scope/8r/  r0   r]  s   ` r   r^  z'NetmaskTestMixin_v6.test_address_errors  s    	# 	7889'9:$67!34(9:$=>%>?+-?@*<='9:,.?@r   c           	         | j                  t        | j                  d            d       | j                  t        | j                  d            d       | j                  t        | j                  d            d       t        dd      D ]^  }d|z  }| j                  t        | j                  |            |       | j                  t        | j                  d|z              |       ` | j                  t        | j                  d            d       t        dd      D ]^  }d|z  }| j                  t        | j                  |            |       | j                  t        | j                  d|z              |       ` y )	N)r:  rh  2001:db8::/32)r:  32r      z::/%dz::/0%dz2001:db8::%scope/32)r%   rJ  r   rH   )r   ri  rj  s      r   rk  z&NetmaskTestMixin_v6.test_valid_netmask  sH    	T\\*<=>(	*T\\*>?@(	*T\\/:;_Mq# 	GAkGSg!67AShl!;<gF	G 	T\\*?@ACXYq# 	GAkGSg!67AShl!;<gF	Gr   c                       fd} |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd	        |dd
        |dd        |dd        |dd       y )Nc                     d|z  }j                  t        j                  |            5  j                  | d|       d d d        y # 1 sw Y   y xY wrn  rp  rq  s      r   rr  zANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmask  rs  rt  r  r5   1::r+  r   ru  rv  129r,  ry  rz   r  r0   rz  s   ` r   r{  z'NetmaskTestMixin_v6.test_netmask_errors  s    	8
 	#&&%%&&&	*	*t$i0r   c                 F      fd} |dd        |dd        |dd       y )Nc                     d|z  }j                  t        j                  |            5  j                  | |f       d d d        y # 1 sw Y   y xY wr~  rp  rq  s      r   rr  zJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmask  r  r  r  re   r  r  r0   rz  s   ` r   r  z0NetmaskTestMixin_v6.test_netmask_in_tuple_errors  s(    	. 	#$c*r   c                     | j                  d       | j                  d       | j                  d       | j                  d       y )Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoper   r
   s    r   r   zNetmaskTestMixin_v6.test_pickle"  s>    -.-.)*/0r   Nr  r0   r   r   r  r    s*    E9&A&G.1(+1r   r  c                   $    e Zd Zej                  Zy)InterfaceTestCase_v6N)r*   r+   r,   r   IPv6Interfacer   r0   r   r   r  r  *  r  r   r  c                   0    e Zd Zej                  Zd Zd Zy)NetworkTestCase_v6c                    | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   y )N2000:999::/562000:aaa::/482000:aaa::/562000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56r  r
   s    r   r  z!NetworkTestCase_v6.test_subnet_of1  s2   LL)33_-/	0 	LL)33_-/	0 	LL)33_-/	0 	LL)33_-/	0 	LL./99235	6 	LL./99235	6r   c                    | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   y )Nr  r  r  r  r  r
   s    r   r  z#NetworkTestCase_v6.test_supernet_ofJ  s    LL)55_-/	0 	LL)55_-/	0 	LL)55_-/	0 	LL)55_-/	0r   N)r*   r+   r,   r   r  r   r  r  r0   r   r   r  r  .  s    ##G620r   r  c                   $    e Zd Zd Zd Zd Zd Zy)FactoryFunctionErrorsc                 v    d}d}| j                  t        |||      5   ||       ddd       y# 1 sw Y   yxY w)z3Ensure a clean ValueError with the expected messagecamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r   
ValueError)r   r   kindrN   rV   s        r   assertFactoryErrorz(FactoryFunctionErrors.assertFactoryError_  s<    ;"":sD$? 	DM	 	 	s   	/8c                 D    | j                  t        j                  d       y )NrU   )r  r   
ip_addressr
   s    r   test_ip_addressz%FactoryFunctionErrors.test_ip_addressf      	 4 4i@r   c                 D    | j                  t        j                  d       y )N	interface)r  r   ip_interfacer
   s    r   test_ip_interfacez'FactoryFunctionErrors.test_ip_interfacei  s    	 6 6Dr   c                 D    | j                  t        j                  d       y )Nnetwork)r  r   
ip_networkr
   s    r   test_ip_networkz%FactoryFunctionErrors.test_ip_networkl  r  r   N)r*   r+   r,   r  r  r  r  r0   r   r   r  r  ]  s    AEAr   r  c                   &   e Zd Z ej                  d      Z ej                  d      Z ej                  d      Z	 ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Zee	gZeegz   ZeegZeegz   ZeegZeegz   Zeez   Zeez   Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z  ej                  d      Z! ej                  d      Z" ej                  d      Z#d Z$d Z%d Z&d Z'd	 Z(d
 Z)d Z*d Z+d Z,d Z-d Z.y)ComparisonTestsr>   r  r   	::2%scopec                    t               }| j                  D ]r  }| j                  ||       | j                  ||k(         | j	                  |j                  |      t               | j	                  |j                  |      t               t y r   )objectobjects_with_scopedassertNotEqualr  r%   __eq__NotImplemented__ne__r   otherobjs      r   test_foreign_type_equalityz*ComparisonTests.test_foreign_type_equality  st    ++ 	@CU+SE\*SZZ.?SZZ.?		@r   c                 v    | j                   D ]*  }| j                   D ]  }||u r| j                  ||        , y r   )objectsr  r&   s      r   test_mixed_type_equalityz(ComparisonTests.test_mixed_type_equality  sD     << 	.C|| .#:##C-.	.r   c                 x    t        | j                  | j                        D ]  \  }}| j                  ||        y r   )zip
v6_objectsv6_scoped_objectsr  r&   s      r   test_scoped_ipv6_equalityz)ComparisonTests.test_scoped_ipv6_equality  s6    DOOT-C-CD 	*HCS)	*r   c                 l    | j                   D ]%  }| j                  D ]  }| j                  ||        ' y r   )
v4_objectsr  r  r&   s      r   test_v4_with_v6_scoped_equalityz/ComparisonTests.test_v4_with_v6_scoped_equality  s:    ?? 	.C-- .##C-.	.r   c                     | j                   D ]8  }| j                  ||       | j                  ||       | j                  ||       : y r   )r  r%   assertLessEqualassertGreaterEqualr   r  s     r   test_same_type_equalityz'ComparisonTests.test_same_type_equality  sG    ++ 	.CS#&  c*##C-	.r   c           
      
   | j                   | j                  f| j                  | j                  f| j                  | j
                  f| j                  | j                  f| j                  | j                  f| j                  | j                  f| j                  | j                  f| j                  | j                  f| j                   | j"                  ff	D ]  \  }}| j%                  ||       | j'                  ||       | j)                  ||       | j+                  ||       | j-                  ||       | j/                  ||kD         | j/                  ||k         | j/                  ||k\         | j/                  ||k          y r   )v4addrv4addr2v4netv4net2v4intfv4intf2v6addrv6addr2v6netv6net2v6intfv6intf2v6addr_scopedv6addr2_scopedv6net_scopedv6net2_scopedv6intf_scopedv6intf2_scopedr  
assertLessr  assertGreaterr  r  r&   s      r   test_same_type_orderingz'ComparisonTests.test_same_type_ordering  sK   [[$,,'ZZ%[[$,,'[[$,,'ZZ%[[$,,'!4!45 2 23!4!45

 	)HC S)OOC%  c*sC(##C-S3Y'S3Y'SCZ(SCZ('	)r   c                    | j                   D ]  }| j                  || j                           | j                  | j                  z   D ]  }| j                  || j
                           | j                  | j                  z   D ]  }| j                  || j                           | j                  | j
                  | j                  gz   D ]  }| j                  || j
                           | j                  | j
                  | j                  gz   D ]  }| j                  || j                           | j                  | j                  z   | j                  gz   D ]  }| j                  || j                           y r   )v4_addressesassertInr  v6_addressesv6_scoped_addressesr  r  r  assertNotInr  r  r  s     r   test_containmentz ComparisonTests.test_containment  sF   $$ 	+CMM#tzz*	+$$t'?'?? 	+CMM#tzz*	+$$t'?'?? 	2CMM#t001	2 ??djj$2C2C%DD 	.CS$**-	.??djj$2C2C%DD 	5CS$"3"34	5??T%;%;;tzzlJ 	.CS$**-	.r   c                 r   | j                   D ]  | j                   D ]  t        t                    st        t                    r.| j                  t        fd       | j                  t        fd       | j                  t        fd       | j                  t        fd         y )Nc                       k  S r   r0   r'   r(   s   r   <lambda>z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>      S3Y r   c                       kD  S r   r0   r  s   r   r  z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>  r  r   c                       k  S r   r0   r  s   r   r  z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>      SCZ r   c                       k\  S r   r0   r  s   r   r  z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>  r  r   )r  
isinstancetyper?   r@   r&   s    @@r   test_mixed_type_orderingz(ComparisonTests.test_mixed_type_ordering  s    ++ 	AC// Ac49-Cc1K!!)->?!!)->?!!)-?@!!)-?@A	Ar   c                 <   t               }| j                  D ]O  }| j                  t              5  ||k   d d d        | j                  t              5  ||kD   d d d        | j                  t              5  ||k   d d d        | j                  t              5  ||k\   d d d        | j	                  |t
        k         | j                  |t
        kD         | j	                  |t
        k         | j                  |t
        k\         | j                  |t        k         | j	                  |t        kD         | j                  |t        k         | j	                  |t        k\         R y # 1 sw Y   7xY w# 1 sw Y   !xY w# 1 sw Y   xY w# 1 sw Y   xY wr   )r  r  r?   r@   r   r   r  r   r  s      r   test_foreign_type_orderingz*ComparisonTests.test_foreign_type_ordering  sN   ++ 	-C""9- e""9- e""9- u""9- uOOC'M*S7]+OOC7N+SG^,S8^,OOC(N+SH_-OOC8O,!	-    s/   E+E86FF+E5	8F	F	F	c                    | j                   | j                  | j                  g}| j                  | j                  | j
                  g}| j                  | j                  | j                  g}| j                  |t        | j                  t        j                               | j                  |t        | j                  t        j                               | j                  |t        | j                  t        j                               | j                  ||z   t        | j                  | j                  z   t        j                               | j                  t         t        j                  t"                     y )N)key)r  r  r  r  r  r  r  r  r  r%   sortedr  r   get_mixed_type_keyr  r  r  r  )r   
v4_ordered
v6_orderedv6_scoped_ordereds       r   test_mixed_type_keyz#ComparisonTests.test_mixed_type_key  s,   kk4::t{{;
kk4::t{{;
!//1B1BDDVDVW$-$@$@B	C 	$-$@$@B	C 	* 6 6$-$@$@B	C 	&77$2H2H H$-$@$@B	C 	)E)Ef)MNr   c                     t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }| j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       y )Nrx  r  r  )r   r  r  r?   r@   __lt____gt__)r   r  r  r  r  r  r  s          r   test_incompatible_versionsz*ComparisonTests.test_incompatible_versions  s   %%i0$$Y/%%e,$$U+!,,[9 ++K8)V]]F;)V]]F;)U\\59)U\\59)V]]F;)V]]F;)U\\59)U\\59)V]]MB)V]]MB)U\\<@)U\\<@)]%9%96B)]%9%96B)\%8%8%@)\%8%8%@r   N)/r*   r+   r,   r   r   r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r#  r0   r   r   r  r  p  s   "Y""1%F!I!!!$E$Y$$Q'F"Y""1%F!I!!!$E$Y$$Q'F)I))+6M')''4L*9**;7MF#L'JF#L'J(-8+|n<:%G!$55#i##A&G"Y""1%F%i%%a(G#i##A&G"Y""1%F%i%%a(G*Y**;7N)I))+6M,Y,,[9N@.*.
.),.A-(O&Ar   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 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. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHdG ZIdH ZJdI ZKdJ ZLdK ZMyL)MIpaddrUnitTestc                    t        j                  d      | _        t        j                  d      | _        t        j
                  d      | _        t        j                  d      | _        t        j                  d      | _	        t        j                  d      | _        t        j                  d      | _        t        j                  d      | _        t        j                  d	      | _        y )
Nr,  
1.2.3.4/24
1.2.3.0/242001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:1/642001:658:22a:cafe::/64!2001:658:22a:cafe:200:0:0:1%scopez$2001:658:22a:cafe:200:0:0:1%scope/64z2001:658:22a:cafe::%scope/64)r   r   ipv4_addressr  ipv4_interfacer  ipv4_networkr  ipv6_addressipv6_interfacer  ipv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkr
   s    r   setUpzIpaddrUnitTest.setUp'  s    %11)<'55lC%11,?%33)+'55,.%112JK#,#:#:/$1 %.%<%<2&4"#,#8#89W#X r   c                    | j                  dt        t        j                  d                   | j                  dt        t        j                  d                   | j                  dt        t        j                  d                   y )NzIPv4Interface('1.2.3.4/32')r,  zIPv6Interface('::1/128')r  zIPv6Interface('::1%scope/128')r  )r%   r;   r   r  r  r
   s    r   testReprzIpaddrUnitTest.testRepr7  sp    6i55i@A	C3i55e<=	?9i55kBC	Er   c                    t        j                  d      }t        j                  d      }| j                  t        j                  d      |       | j                  t        j                  |df      |       | j                  t        j                  d      |       | j                  t        j                  d      |       | j                  t        j                  |df      |       | j                  t        j                  d      |       | j	                  t
              5  t        j                  d	       d d d        | j	                  t
              5  t        j                  |d
f       d d d        | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  |df       d d d        | j	                  t
              5  t        j                  d       d d d        t        j                  d      }| j                  t        j                  d	d      |       | j                  t        j                  |d
fd      |       | j                  t        j                  dd      |       | j                  t        j                  dd      |       | j                  t        j                  |dfd      |       | j                  t        j                  dd      |       t        j                  d      }t        j                  d      }| j                  t        j                  d      |       | j                  t        j                  |df      |       | j                  t        j                  d      |       | j                  t        j                  d      |       | j                  t        j                  |d
f      |       | j                  t        j                  d      |       | j                  t        j                  d	      t        j                  d             | j                  t        j                  d      t        j                  d             | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   z192.0.2.1/32)r   rh  rh  )      rh  )r   rH  rH  )r9  rH  )r   rb  rb  )r9  rb  )r   rf  rf  )r9  rf  rc  Fstrictra  re  )       rf  r`  )r<  rb  z192.0.2.1/24)r   z255.255.255.255.0)r   r   r  r%   r?   r  r  r  )r   iprM  s      r   testIPv4TuplezIpaddrUnitTest.testIPv4Tuple@  s   "";/##N3../@A3G..Bx8#>../?@#F.. 0C DEH	J..0A0C DEH	J.. 0C DEH	J z* 	5!!"34	5z* 	,!!2r(+	,z* 	4!!"23	4z* 	B!!"@A	Bz* 	9!!2"78	9z* 	A!!"?@	A ##N3../@6;=>A	C..Bx6;=>A	C../?6;=>A	C.. 0A6;=>A	C 	..0?0A6;=>A	C 	.. 0A6;=>A	C
 "";/##N3.. 0A BCF	H..0?0A BCF	H.. 0A BCF	H../@A3G..Bx8#>../?@#F001BC"00@	B001AB"00@	B z* 	F!!"DE	F z* 	E  !CD	E 	Ek	5 	5	, 	,	4 	4	B 	B	9 	9	A 	AN	F 	F	E 	Es`   "T)T6
U=U0U%U*U7
V)T36U UUU'*U47V Vc                 f   t        j                  d      }t        j                  d      }| j                  t        j                  d      |       | j                  t        j                  d      |       | j                  t        j                  |df      |       t        j                  d      }t        j                  d      }| j                  t        j                  d      |       | j                  t        j                  d      |       | j                  t        j                  |d	f      |       t        j                  d
      }t        j                  d      }| j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  |df       d d d        t        j                  d      }| j                  t        j                  dd      |       | j                  t        j                  dd      |       | j                  t        j                  |dfd      |       | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             t        j                  d      }| j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  |df       d d d        | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  d       d d d        y # 1 sw Y   RxY w# 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   y xY w)Nr:  z2001:db8::/128)r:  128)	                n   r   r@  z2001:db8::/96)r:  96)rA  `   rB  r;  2001:db8::1)rD  rC  )	               n   rC  rC  Fr:  )rD  rB  z2001:db8::1/96)rE  rB  2001:db8::1%scope)rF  rC  )rD  rf  )r   r   r  r%   r?   r  r  r  )r   r=  rM  	ip_scopeds       r   testIPv6TuplezIpaddrUnitTest.testIPv6Tuple  s   ""<0##$45../DE	..=?	 	..E{;	""<0##O4../CD	..<>	 	..Dz:	 ))*<=	 ""=1z* 	7!!"56	7z* 	=!! #< =	= z* 	,!!2r(+	, ##O4../B6;=	 	..I$)+ 	 	..BxF	 	001FG"001AB	D00>@"001AB	D ))*=>	z* 	=!!";<	=z* 	3!!9b/2	3
 z* 	D!!"BC	D z* 	C  !AB	C 	CM	7 	7	= 	=	, 	,,	= 	=	3 	3
	D 	D	C 	CsT   6O)O)O6"PP
P=P'O&)O36P PPP$'P0c                    | j                  t        j                  d      dz   t        j                  d             | j                  t        j                  d      dz
  t        j                  d             | j                  t        j                  d      dz   t        j                  d             | j                  t        j                  d      dz
  t        j                  d             | j	                  t        j                  d	      dz   t        j                  d
             | j	                  t        j                  d
      dz
  t        j                  d	             y )Nrx     z1.1.2.0   z1.1.0.1r  i  z::ffffr  z::ffff%scope)r%   r   r   r   r  r
   s    r   testAddressIntMathz!IpaddrUnitTest.testAddressIntMath  s   ..y9C?"..y9	;..y9C?"..y9	;..u5C"..x8	:..x8IF"..u5	7I11+>)L%11.A	CI11.AYO%11+>	@r   c                 p   | j                  t        t        j                  d       | j                  t        t        j                  dt        j                  z         | j                  t        t        j
                  d       | j                  t        t        j
                  dt        j                  z         y )Nre   r   )r?   r  r   v4_int_to_packed
IPV4LENGTHv6_int_to_packed
IPV6LENGTHr
   s    r   testInvalidIntToBytesz$IpaddrUnitTest.testInvalidIntToBytes  s~    *i&@&@"E*i&@&@y333	5*i&@&@"E*i&@&@y333	5r   c           	      P   t        j                  d      }t        j                  d      }t        j                  d      }| j                  t        t        j                  |g            ||fg       | j                  t        t        j                  ||g            ||f||fg       | j                  t        t        j                  |||g            ||fg       | j                  dt        j
                  dd             | j                  dt        | j                               y )Nz10.10.10.10z10.10.10.11z10.10.10.12r   r   zIPv4Network('1.2.3.0/24'))r   r   r%   list_find_address_range_count_righthand_zero_bitsr;   r.  )r   ip1ip2ip3s       r   testInternalszIpaddrUnitTest.testInternals  s    ##M2##M2##M2i;;SEBC*	'i;;S#JGH*sCj1	3i;;S#sOLM*	'iBB1cJK4d4;L;L6MNr   c                    | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t        | j
                  j                        d       | j                  t	        | j
                  j                        d       | j                  t	        | j
                  j                        d       | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t	        | j                  j                        d       y )Ni 1.2.3.0l	           /YE    2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r%   intr.  network_addressrJ  r1  rL  r4  r
   s    r   testGetNetworkzIpaddrUnitTest.testGetNetwork  s   T..>>?JT..>>?KT..>>??	AT..>>?.	0T..7780	2T55EEF?	AT55EEF4	6T55>>?0	2r   c                    | j                  | j                  j                  t        j                  d      j                         t        j
                  d      }t        j
                  d      }t        j
                  d      }| j                  |t        j
                  t        |j                                     | j                  |t        j
                  t        |j                                     | j                  |t        j
                  t        |j                                     d}| j                  | j                  j                  t        j                  |      j                         | j                  | j                  j                  t        j                  |      j                         | j                  t        j
                  | j                  j                        j                  d       | j                  t        j
                  | j                  j                        j                  d       | j                  t        j
                  | j                  j                        j                  d       y )NrE  r,  r)  r+  	         /YE          )r%   r-  _ipr   r  r  r_  r`  r  r0  r  r3  r,  versionr/  r2  )r   ipv4ipv6ipv6_scopedv6_ints        r   testIpFromIntzIpaddrUnitTest.testIpFromInt  s   ,,00"00:>>	@ ##I.##$AB**+NOy33C8L8L4MNOy33C8L8L4MNOK)=)=c+B]B]>^)_`7,,00"008<<	>3377"008<<	> 	--d.?.?.C.CDLL	--d.?.?.C.CDLL	--d.F.F.J.JKSS	r   c                    t         j                  }| j                  | j                  j                  t        j
                  d      j                         | j                   |d       |d             | j                  | j                  j                  t        j
                  d      j                         | j                   |d       |d             | j                   |d       |d             y )	NrF  255.254.253.252       X*      ffff:2:3:4:ffff::            rz   s                   )r   r  r%   r-  rf  r  r0  r=  r   s     r   testIpFromPackedzIpaddrUnitTest.testIpFromPacked  s    &&,,00"//0CDHH	J!23 !45	7,,//"//899;	= 	!45  "6 7	8 	 .	0r   c                 8   | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t        | j
                  j                        d       | j                  t	        | j
                  j                        d       | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       y )NrE  r,  rc  2001:658:22a:cafe:200::1)r%   r_  r-  r=  rJ  r0  r3  r
   s    r   	testGetIpzIpaddrUnitTest.testGetIp&  s    T00334h?T00334i@T00334?	AT003343	5T77::;?	AT77::;3	5r   c                 *   | j                  | j                  j                  d        | j                  t        | j                  j                        d       | j                  | j
                  j                  d        | j                  t        | j                  j                        d       | j                  | j                  j                  j                  d        | j                  t        | j                  j                  j                        d       y )Nscope)
r%   r/  scope_idrJ  r2  r0  r3  r1  r`  r4  r
   s    r   testGetScopeIdzIpaddrUnitTest.testGetScopeId3  s    **33	T55>>? 	",,55	T77@@A 	"**::CC	T55EENNO 	"r   c                    | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t        | j
                  j                        d       | j                  | j
                  j                  d       | j                  t        | j                  j                        d       | j                  | j                  j                  d       y )Nl     rf  l	            @   )r%   r_  r.  rK  rJ  r1  	prefixlenr4  r
   s    r   testGetNetmaskzIpaddrUnitTest.testGetNetmaskA  s    T..667DT..667IT..667@	B**44b9T55==>@	B11;;R@r   c                 b   t        j                  d      }| j                  t        |j                  j
                        d       | j                  |j                  d      d       t        j                  d      }| j                  t        |j                  j
                        d       | j                  |j                  d      d       t        j                  d      }| j                  t        |j                  j
                        d       | j                  |j                  d      d       y )N	1.2.3.4/0r   0z::1/0z::1%scope/0)r   r  r%   r_  r  rK  _prefix_from_prefix_stringr  )r   ipv4_zero_netmaskipv6_zero_netmaskipv6_scoped_zero_netmasks       r   testZeroNetmaskzIpaddrUnitTest.testZeroNetmaskK  s    %33K@.66>>?C*EEcJAN%33G<.66>>?C*EEcJAN#,#:#:=#I 5==EEFJ1LLSQSTUr   c                 f    t        j                  d      }| j                  |j                  d       y )Nz127.0.0.0/0.0.0.255rb  )r   r  r%   r}  r   rM  s     r   testIPv4NetzIpaddrUnitTest.testIPv4NetX  s'    ##$9:+r   c                 8   | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t        | j
                  j                        d       | j                  t	        | j
                  j                        d       | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       y )Ni	1.2.3.255l	   /YE    %2001:658:22a:cafe:ffff:ffff:ffff:ffff)r%   r_  r.  broadcast_addressrJ  r1  r4  r
   s    r   testGetBroadcastzIpaddrUnitTest.testGetBroadcast\  s    T..@@A8LT..@@A;OT..@@A?	AT..@@A@	B 	T55GGH?	AT55GGH@	Br   c                 $   | j                  | j                  j                  j                  d       | j                  | j                  j                  j                  d       | j                  | j
                  j                  j                  d       y )Nrb  r|  )r%   r-  r  r}  r0  r3  r
   s    r   testGetPrefixlenzIpaddrUnitTest.testGetPrefixlenj  sh    ,,44>>C,,44>>C33;;EErJr   c                    | j                  | j                  j                         j                  d       | j                  t	        | j                  j                         j
                        d       | j                  t        j                  d      j                  j                         t        j                  d             | j                  | j                  j                         j                  d       | j                  t	        | j                  j                         j
                        d       | j                  t        j                  d      j                  j                         t        j                  d             | j                  | j                  j                         j                  d       | j                  t	        | j                  j                         j
                        d       y )N   z1.2.2.0	0.0.0.0/0?   r]  z::0/0)r%   r.  supernetr}  rJ  r`  r   r  r  r  r1  r  r  r4  r
   s    r   testGetSupernetzIpaddrUnitTest.testGetSuperneto  sk   **335??DT..779IIJ"	$##K088AAC!!+.	0 	**335??DT..779IIJ.	0009AAJJL"..w7	911::<FFKT55>>@PPQ.	0r   c                    | j                  | j                  j                  d      j                  d       | j                  t	        | j                  j                  d      j
                        d       | j                  | j                  j                  d      j                  d       | j                  t	        | j                  j                  d      j
                        d       | j                  | j                  j                  d      j                  d       | j                  t	        | j                  j                  d      j
                        d       y )Nrs      z1.2.0.0=   z2001:658:22a:caf8::)r%   r.  r  r}  rJ  r`  r1  r4  r
   s    r   testGetSupernet3zIpaddrUnitTest.testGetSupernet3  s   **33A6@@"ET..77:JJK"	$ 	**33A6@@"ET..77:JJK.	011::1=GGLT55>>qAQQR.	0r   c                    | j                  t        | j                  j                  dd       | j                  t        | j                  j                  d       | j	                  | j                  j                  d      | j                  j                  d             | j                  t        | j
                  j                  dd       | j                  t        | j
                  j                  d       | j	                  | j
                  j                  d      | j
                  j                  d	             | j                  t        | j                  j                  dd       | j                  t        | j                  j                  d       | j	                  | j                  j                  d      | j                  j                  d	             y )
Nr   r>   prefixlen_diff
new_prefix   r  r     A   >   )r?   r  r.  r  r%   r1  r4  r
   s    r   testGetSupernet4zIpaddrUnitTest.testGetSupernet4  s   *d&7&7&@&@)*q 	 	:*d&7&7&@&@%' 	 	)**3313E**33r3B	D 	*d&7&7&@&@)*q 	 	:*d&7&7&@&@%' 	 	)**3313E**33r3B	D*d&>&>&G&G)*q 	 	:*d&>&>&G&G%' 	 	)11::!:L11::b:I	Kr   c                    t        | j                  j                               }| j                  dt	        |             | j                  t        j                  d      |d          | j                  t        j                  d      |d          t        j                  d      }t        |j                               }| j                  dt	        |             | j                  t        j                  d      |d          | j                  t        j                  d	      |d          t        j                  d
      }t        |j                               }| j                  dt	        |             | j                  t        j                  d      |d          | j                  t        j                  d	      |d          t        j                  d      t        j                  d      g}d}d}| j                  |t        t        j                  |      j                                      | j                  |t        t        j                  |      j                                      | j                  t        t        j                  |      j                               t        t        j                  |      j                                      t        j                  d      g}d}d}| j                  |t        t        j                  |      j                                      | j                  |t        t        j                  |      j                                      | j                  t        t        j                  |      j                               t        t        j                  |      j                                      t        j                  d      t        j                  d      g}d}d}| j                  |t        t        j                  |      j                                      | j                  |t        t        j                  |      j                                      | j                  t        t        j                  |      j                               t        t        j                  |      j                                      t        j                  d      g}d}d}| j                  |t        t        j                  |      j                                      | j                  |t        t        j                  |      j                                      | j                  t        t        j                  |      j                               t        t        j                  |      j                                      y )N   z1.2.3.1r   z	1.2.3.254re   2001:658:22a:cafe::/120rJ  2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/1202.0.0.0z2.0.0.1z
2.0.0.0/31)r     r,  rG  )r,  rh  r]  z2001:658:22a:cafe::/127)r]     2001:658:22a:cafe::1/128)r  r   )
rT  r.  hostsr%   lenr   r   r  r   r  )r   r  r1  r4  addrsstr_argstpl_argss          r   	testHostszIpaddrUnitTest.testHosts  s_   T&&,,./c%j)..y958D..{;U2YG ,,-FG\'')*c%j)../EFaQ../FGrS'334ST(..01c%j)../EFaQ../FGrS &&y1&&y13"Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G &&y12"Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G &&'<=&&'=>@,/Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G &&'=>A-0Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	Gr   c                    | j                  t        | j                  j                  d            t        | j                  j                  d                   | j	                  t
        t        | j                  j                  d             | j	                  t
        t        | j                  j                  dd             | j                  t        | j                  j                  d            t        | j                  j                  d                   | j	                  t
        t        | j                  j                  d	             | j	                  t
        t        | j                  j                  dd             | j                  t        | j                  j                  d            t        | j                  j                  d                   | j	                  t
        t        | j                  j                  d	             | j	                  t
        t        | j                  j                  dd             y )
Nrs   r     r  r  r  rd  D   r  )	r%   r  r.  subnetsr?   r  rT  r1  r4  r
   s    r   testFancySubnettingz"IpaddrUnitTest.testFancySubnetting  s    1 1 9 9 9 KL 1 1 9 9R 9 HI	K*d++33r3B	D*d++331>@ 4 B	C 	 1 1 9 9 9 KL 1 1 9 9R 9 HI	K*d++33r3B	D*d++331>@ 4 B	C 	 8 8 @ @PQ @ RS 8 8 @ @B @ OP	R*d22::b:I	K*d22::!FH ; J	Kr   c                    | j                  t        | j                  j                               d   j                  d       | j                  t        t        | j                  j                               d   j                        d       | j                  t        t        | j                  j                               d   j                        d       | j                  t        | j                  j                               d   j                  d       | j                  t        | j                  j                               d   j                  d       y )Nr   r  r\  r>   z	1.2.3.128r  )	r%   rT  r.  r  r}  rJ  r`  r1  r4  r
   s    r   testGetSubnetszIpaddrUnitTest.testGetSubnets  s   d//779:1=GGLT%%--/11244COE"	$ 	T%%--/11244COE$	& 	d//779:1=GGLd66>>@A!DNNPRSr   c                 &   t        j                  d      }|j                         D cg c]  }t        |       }}|j                  d      D cg c]  }t        |       }}| j	                  |dg       | j	                  ||       y c c}w c c}w )NrG  r   )r   r  r  rJ  r%   )r   r=  rO   subnets1subnets2s        r   testGetSubnetForSingle32z'IpaddrUnitTest.testGetSubnetForSingle32  sx    ""<0$&JJL1qCF11$&JJqM2qCF22L>28, 22s   B	Bc                 H   t        j                  d      }|j                         D cg c]  }t        |       }}|j                  d      D cg c]  }t        |       }}| j	                  |dg       | j	                  ||       t        j                  d      }|j                         D cg c]  }t        |       }}|j                  d      D cg c]  }t        |       }}| j	                  |dg       | j	                  ||       y c c}w c c}w c c}w c c}w )Nr  r   r  )r   r  r  rJ  r%   )r   r=  rO   r  r  rG  s         r   testGetSubnetForSingle128z(IpaddrUnitTest.testGetSubnetForSingle128  s    ""9-$&JJL1qCF11$&JJqM2qCF22I;/8,))/:	$-$5$5$78qCF88$-$5$5a$89qCF99O#458, 22
 99s   DD/DDc                 ,   | j                   j                  d      D cg c]  }t        |       }}| j                  |g d       | j                  j                  d      D cg c]  }t        |       }}| j                  |g d       y c c}w c c}w )Nr   )z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26)2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r.  r  rJ  r%   r1  )r   rO   ipsipsv6s       r   testSubnet2zIpaddrUnitTest.testSubnet2  s    #0088;<!s1v<<I	K "&!2!2!:!:1!=>AQ>>,	- =
 ?s   B#Bc                    | j                   j                  d      D cg c]  }t        |       }}| j                  |d d g d       | j                  |dd  g d       | j                  t	        |      d       t        j                  d      }|j                  d      D cg c]  }t        |       }}| j                  |d d g d       | j                  |dd  g d	       | j                  t	        |      d       y c c}w c c}w )
N   rs   )z
1.2.3.0/32z
1.2.3.1/32z
1.2.3.2/32)z1.2.3.253/32z1.2.3.254/32z1.2.3.255/32rK  r  )z2001:658:22a:cafe::/128r  z2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)r.  r  rJ  r%   r  r   r  )r   rO   r  r1  s       r   testGetSubnets3zIpaddrUnitTest.testGetSubnets3  s    #'#4#4#<#<Q#?@a3q6@@!6	8<	>Ws+ ,,-FG#/#7#7#:;a3q6;;!)	* 	*	+ 	Ws+# A <s   D#Dc                    | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             y )N	   r  r?   r  rT  r-  r  r  r.  r0  r1  r3  r4  r
   s    r   testSubnetFailsForLargeCidrDiffz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiff0  s    *d--55==a@	B*d++33A6	8*d--55==bA	C*d++33B7	9*d44<<DDRH	J*d22::2>	@r   c                 B   | j                  t        | j                  j                  j                  d       | j                  t        | j
                  j                  j                  d       | j                  t        | j                  j                  j                  d       y )Nr  r  )r?   r  r-  r  r  r0  r3  r
   s    r   !testSupernetFailsForLargeCidrDiffz0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff>  sz    *--55>>	D*--55>>	D*44<<EEr	Kr   c                    | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             y )Nre   r  r
   s    r   "testSubnetFailsForNegativeCidrDiffz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffF  s    *d--55==bA	C*d++33B7	9*d--55==bA	C*d++33B7	9*d44<<DDRH	J*d22::2>	@r   c                    | j                  | j                  j                  d       | j                  t        | j                  j	                               d   j                  d       | j                  | j                  j                         j                  d       | j                  | j                  j                  d       | j                  t        | j                  j	                               d   j                  d       | j                  | j                  j                         j                  d       | j                  | j                  j                  d       | j                  t        | j                  j	                               d   j                  d       | j                  | j                  j                         j                  d       y )NrK  r   r   i               l            l             )r%   r.  num_addressesrT  r  r  r1  r4  r
   s    r   testGetNum_Addressesz#IpaddrUnitTest.testGetNum_AddressesT  sc   **88#>d//779:1=KK	**335CCSI**88:NOd//779:1=KK,	.**335CC-	/11??AUVd66>>@A!DRR,	.11::<JJ-	/r   c                    | j                  t        j                  d      | j                         | j	                  t        j                  d      | j                         t        j
                  d      }| j                  || j                         | j                  t        j                  d      j                  t        j                  d                   y )Nz1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15)	r  r   r  r.  r  r   r  r  __contains__)r   addr1s     r   testContainszIpaddrUnitTest.testContainse  s    i--n=''	)00>**	, %%j1eT../ 	..|<II%%l35 	6r   c                    | j                  t        | j                  d         d       | j                  t        | j                  j
                  d       | j                  t        | j                  d         d       | j                  t        | j                  j
                  d       | j                  t        | j                  d         d       | j                  t        | j                  j
                  d       y )Nrt   1.2.3.5rK  z2001:658:22a:cafe::5r  )r%   rJ  r.  r?   
IndexError__getitem__r1  r4  r
   s    r   testNthzIpaddrUnitTest.testNthr  s    T..q12I>*d&7&7&C&CSIT..q12/	1*d&7&7&C&CWMT55a89/	1*d&>&>&J&JGTr   c                    t        j                  d      }| j                  d|j                         t	        |      }| j                  dt        |d                | j                  dt        |d                | j                  dt        |d                | j                  dt        |d                | j                  |d   |d          y )Nz172.31.255.128/255.255.255.240   z172.31.255.128r   z172.31.255.143re   )r   r  r%   r}  rT  rJ  )r   rN   	addr_lists      r   testGetitemzIpaddrUnitTest.testGetitem}  s    $$%EFT^^,J	)3y|+<=)3tAw<8)3y}+=>)3tBx=92R1r   c                    | j                  | j                  t        j                  d      k(         | j	                  | j                  t        j                  d      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  dk(         | j	                  | j                  g k(         | j	                  | j                  dk(         | j                  | j                  t        j
                  d      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  t        j                  d      k(         | j	                  | j                  dk(         | j	                  | j                  g k(         | j	                  | j                  dk(         | j                  | j                  t        j
                  d	      k(         | j	                  | j                  t        j
                  d
      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  t        j                  d      k(         | j	                  | j                  dk(         | j	                  | j                  g k(         | j	                  | j                  dk(         y )Nr'  
1.2.3.4/23::1.2.3.4/24::1.2.3.4%scope/24r5   r   2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64!2001:658:22a:cafe:200::1%scope/63)r   r-  r   r  r  r  r0  r3  r
   s    r   	testEqualzIpaddrUnitTest.testEqual  s   ++!//=> 	?,,"00>? 	@,,"00@A 	B,,"001EFG 	H,,23,,23,,12++##$ABC 	D,,##$ABC 	D,,"00>? 	@,,23,,23,,1222##$GHI 	J33##$GHI 	J33##$ABC 	D33##$ABC 	D33"00>? 	@33r9:33r9:33q89r   c                 	   | j                  | j                  t        j                  d      k7         | j	                  | j                  t        j                  d      k7         | j	                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j	                  | j                  t        j                  d      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d	      k7         | j	                  | j                  t        j                  d      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j	                  | j                  t        j                  d
      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d	      k7         | j	                  | j                  t        j                  d      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j	                  | j                  t        j                  d
      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         y )Nr'  r  r  r  r5   r   r  r  r  r,  r  r  )r  r-  r   r  r   r  r,  r   r0  r/  r3  r2  r
   s    r   testNotEqualzIpaddrUnitTest.testNotEqual  s   ,,"00>? 	@++!//=> 	?++!//?@ 	A++!//0DEF 	G++r12++r12++q01))"..y9: 	;))R/0))R/0))Q./,,##$ABC 	D++##$ABC 	D++!//=> 	?++r12++r12++q01))!--i89 	:))R/0))R/0))Q./33##$GHI 	J22##$GHI 	J22##$ABC 	D22##$ABC 	D22!//=> 	?22b8922b8922a7800!--i89 	:00B6700B6700A56r   c                 `    | j                  t        t        j                  d            d       y )Nz1.2.3.4/255.255.255.255rG  r%   rJ  r   r  r
   s    r   testSlash32Constructorz%IpaddrUnitTest.testSlash32Constructor  s*    Y44-/ 01=	?r   c                     | j                  t        t        j                  d            d       | j                  t        t        j                  d            d       y )Nr  r  )r%   rJ  r   r  r
   s    r   testSlash128Constructorz&IpaddrUnitTest.testSlash128Constructor  sH    Y44Y?@"+	-Y44_EF"1	3r   c                 `    | j                  t        t        j                  d            d       y )Nz1.2.3.4/0.0.0.0r  r  r
   s    r   testSlash0Constructorz$IpaddrUnitTest.testSlash0Constructor  s&    Y445FGH%	'r   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  ||||||g      }| j                  t	        |      t        j
                  d      t        j
                  d      g       t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  ||||g      }| j                  t	        |      t        j
                  d      g       t        j
                  d      }t        j
                  d	      }t        j
                  d
      }t        j
                  d      }t        j
                  d      }t        j
                  d      }t        j                  ||||||g      }| j                  t	        |      t        j
                  d      t        j
                  d      g       t        j                  ||g      }| j                  t	        |      t        j
                  d      g       t        j
                  d      x}}	| j                  t	        t        j                  ||	g            |g       t        j                  d      x}}	| j                  t	        t        j                  ||	g            t        j                  d      g       t        j                  d      }t        j                  d      }t        j                  d      }t        j                  |||g      }| j                  t	        |      |g       t        j                  d      }t        j                  d      }t        j                  d      }t        j                  |||g      }| j                  t	        |      |g       t        j                  d      t        j                  d      ft        j
                  d      t        j                  d      ft        j
                  d      t        j                  d      fg}
|
D ],  \  }}| j                  t        t         j                  ||g       . t        j                  d      t        j                  d      ft        j
                  d      t        j                  d      ft        j
                  d      t        j                  d      fg}
|
D ],  \  }}| j                  t        t         j                  ||g       . y )N1.1.1.0rx  1.1.1.2z1.1.1.3z1.1.1.4z
1.1.1.0/30z
1.1.1.4/32z
1.1.0.0/24
1.1.1.0/24
1.1.2.0/24z
1.1.3.0/24z
1.1.4.0/24z
1.1.0.0/22z
1.1.0.0/23z
1.1.1.1/32z
2001::/100z
2001::/120	2001::/96z2001::%scope/100z2001::%scope/120z2001::%scope/96r  z
1.1.0.0/32z
2001::/128r  z2001::%scope/128)r   r   collapse_addressesr%   rT  r  r  r  r  r?   r@   )r   rW  rX  rY  ip4ip5ip6	collapsedip_same1ip_same2addr_tupless              r   testCollapsingzIpaddrUnitTest.testCollapsing  s   ##I.##I.##I.##I.##I.##I.00#sCc*,	i&&|4&&|46	7
 ##I.##I.##I.##I. 00#sC1EF	i#//=>	@ ##L1##L1##L1##L1##L1 ##L100#sCc582: ;	i#//=#//=?	@
 00#s<	i#//=>	@ (33LAA8i::x(* +"	%
 (33I>>8i::x(* +#..|<=	? ##L1##L1##K000#sCA	i3%0##$67##$67##$5600#sCA	i3%0 %%i0%%e,.&&|4&&|46&&|4&&|46
 $ 	*HCi)E)E"Cj*	*
 %%i0%%k24&&|4&&'9:<&&|4&&'9:<
 $ 	*HCi)E)E"Cj*	*r   c           
      D	   t         j                  }t        j                  d      }t        j                  d      } G d dt         j                        } |d      } |d      }| j	                  t
        t         |||             | j	                  t        t         ||t        j                  d                   | j	                  t        t         ||t        j                  d                   | j                  t         |||            d   t        j                  d             t        j                  d	      }| j                  t         |||            t        j                  d
      t        j                  d	      g       t        j                  d      }t        j                  t         j                  j                        }| j                  t        j                  d      gt         |||                   t        j                  d      }t        j                  d      }| j                  t         |||            d   t        j                  d             t        j                  d      }| j                  t         |||            t        j                  d      t        j                  d      g       t        j                  d      }t        j                  d      }| j                  t         |||            d   t        j                  d             t        j                  d      }| j                  t         |||            t        j                  d      t        j                  d      g       | j	                  t
        t         |t        j                  d      t        j                  d                   | j	                  t        t         |t        j                  d      t        j                  d                   | j	                  t        t         |t        j                  d      t        j                  d                   | j	                  t        t         |t        j                  d      t        j                  d                   y )Nr  z	1.1.1.255c                       e Zd Zed        Zy)3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addressc                      y)N   r0   r
   s    r   rg  z;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.version]  s    r   N)r*   r+   r,   r-   rg  r0   r   r   IPv7Addressr  \  s     r   r	  r  r  r   r  z1.1.1.8z
1.1.1.0/29r  r  z$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z	1::%scopez*1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scopez	2::%scopez1.1.0.0rz   )r   summarize_address_ranger  r   r?   r  rT  r@   r%   r  r   	_ALL_ONESr  )r   	summarizerW  rX  r	  ip_invalid1ip_invalid2s          r   testSummarizingzIpaddrUnitTest.testSummarizingT  s    55	""9-"";/	)// 	 "%(!%(*d#K=	? 	)T#C)>)>u)EF	H)T#C)>)>{)KL	N 	iS1215"--l;	= ""9-iS12#..|<#..y9;	< ##A&##I$9$9$C$CD)//<=iS12	4 ""5)""#IJiS1215"--h7	9 ""5)iS12#..x8#..y9;	< "";/""#OPiS1215"--h7	9 "";/iS12#..x8#..y9;	<
 	*d#I$8$8$C$-$8$8$CE	F 	)T#I$8$8$C$-$8$8$CE	F 	)T#I$8$8$C$-$8$8$CE	F 	)T#I$8$8$>$-$8$8$CE	Fr   c                    | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         y )Nrx  r  r  ::2r  r  )r   r   r  r
   s    r   testAddressComparisonz$IpaddrUnitTest.testAddressComparison  s
   	,,Y7!,,Y78 	9	,,Y7!,,Y78 	9	,,U3!,,U34 	5	,,U3!,,U34 	5	,,[9!,,[9: 	;	,,[9!,,[9: 	;r   c                    | j                  t        j                  d      t        j                  d      k(         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      k(         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d	      t        j                  d	      k(         | j                  t        j                  d	      t        j                  d
      k         | j                  t        j                  d	      t        j                  d      k         | j                  t        j                  d      t        j                  d	      k         | j                  t        j                  d
      t        j                  d	      kD         | j                  t        j                  d      t        j                  d	      kD         | j                  t        j                  d	      t        j                  d      kD         | j                  t        j                  d	      t        j                  d      k(         | j                  t        j                  d	      t        j                  d      k         | j                  t        j                  d	      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d
      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d	      t        j                  d      kD         | j                  t        j                  d      t        j                  d	      k(         | j                  t        j                  d      t        j                  d
      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d	      k         | j                  t        j                  d      t        j                  d	      kD         | j                  t        j                  d      t        j                  d	      kD         | j                  t        j                  d      t        j                  d      kD         y )Nz
1.1.1.1/24z
1.1.1.1/16z
1.1.1.2/24z
1.1.1.2/16z::1/64z::1/80z::2/64z::2/48z::1%scope/64z::1%scope/80z::2%scope/64z::2%scope/48)r   r   r  r  r
   s    r   testInterfaceComparisonz&IpaddrUnitTest.testInterfaceComparison  s    	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	> 		..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	: 		..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@ 	//?!..x89 	:	..~>!..x89 	:	..~>!..x89 	:	..~>!..x89 	:	..~>!..x89 	:	..~>!..x89 	:	..~>!..x89 	: 	//9!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@r   c                    t        j                  d      }t        j                  d      }t        j                  d      }| j                  ||k         | j                  ||kD         | j                  |j	                  |      d       | j                  |j	                  |      d       | j                  |j	                  |      d       | j                  |j	                  |      d       | j                  |j	                  |      d       | j                  |j                         |j                         k         t        j                  d      }t        j                  d      }t        j                  d	      }| j                  ||k         | j                  ||kD         | j                  |j	                  |      d       | j                  |j                         |j                         k         | j                  t        | j                  j                  | j                         t        j                  d
      }t        j                  d      }| j                  t        |j                  |       | j                  t        |j                  |       | j                  t        |j                  |       | j                  t        |j                  |       t        j                  d      }| j!                  ||k         | j!                  ||kD         t        j                  d      }| j                  ||k         | j!                  ||k         | j!                  ||kD         | j                  ||kD         t        j                  d      }| j                  ||k         | j!                  ||k         | j!                  ||kD         | j                  ||kD         t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }||||g}||||g}|j#                          | j                  ||       ||||g}|j#                          | j                  ||       | j%                  |j                  t        j&                  d            t(               | j%                  |j                  t        j&                  d            t(               | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j!                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j!                  t        j                  d      t        j                  d      k         y )Nr  z
1.1.1.0/32r  r   re   r>   z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96::/0r  z10.1.2.128/25z10.1.3.0/24z10.1.3.0/25z10.10.10.0/31z
10.10.10.0z10.10.10.2/31z
10.10.10.2rx  r  r  r  )r   r  r   r%   compare_networks_get_networks_keyr  r?   r@   r.  r1  r  r  r!  r"  r  r  sortassertIsr  r  )	r   rW  rX  rY  ri  rh  r  r  unsorteds	            r   testNetworkComparisonz$IpaddrUnitTest.testNetworkComparison  s	   ##L1##L1##L1c	"c	"--c2A6 	--c2B7--c2A6--c2B7--c2A6--/#2G2G2IIJ##$45##$45##$9:c	"c	"--c2B7--/#2G2G2IIJ 	)++<<++	- &&v.&&{3)T[[$7)T[[$7)T[[$7)T[[$7 ""?3s#s#""=1c	"s#s#c	"""=1c	"s#s#c	" ""?3""<0""?3""<0sC%c3'*c3'*cjj!5!5l!CD$	&cjj!5!5l!CD$	& 		,,Y7!,,Y78 	9	,,Y7!,,Y78 	9--i8!,,Y78 	9 		,,U3!,,U34 	5	,,U3!,,U34 	5--e4"--e45 	6r   c                     | j                  t        t        j                  d       | j                  t        t        j                  d       | j                  t        t        j                  d       y )Nz192.168.1.1/24z::1/120z::1%scope/120)r?   r  r   r  r
   s    r   testStrictNetworksz!IpaddrUnitTest.testStrictNetworksO  sK    *i&:&:<LM*i&:&:IF*i&:&:OLr   c                 j   t        j                  d      }t        j                  d      }t        j                  d      }| j                  | j                  j	                  |             | j                  | j                  j	                  |             | j                  |j	                  |             y )Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)r   r  r   r.  overlapsr  )r   r  other2other3s       r   testOverlapszIpaddrUnitTest.testOverlapsT  s    %%l3&&|4&&}5))2259:**33F;</0r   c                    d}t        j                  |      }t        j                  d|z        }| j                  t	        |j
                        t	        |j
                               t        j                  d|z        }| j                  |j
                  |j
                         | j                  t         j                  t         j                  d       y )Nr\   z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	r   r  r  r%   r_  r=  r  r?   r   )r   ipv4_stringrh  v4compat_ipv6v4mapped_ipv6s        r   testEmbeddedIpv4zIpaddrUnitTest.testEmbeddedIpv4\  s    #&&{3!//0DE]--.DGG=!//k0IJM,,dgg6)55y7N7N0	2r   c                    | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             y )	Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scope)r%   r   r  r  r
   s    r   testIPv6AddressTooLargez&IpaddrUnitTest.testIPv6AddressTooLargeg  sf   --.@A#../@A	C 	--.?@#../?@	B 	--.FG#../FG	I--.EF#../EF	HI001IJ%001BC	EI001HI%001AB	DI001CD#../FG	II001BC#../EF	Hr   c                     | j                  | j                  j                  d       | j                  | j                  j                  d       | j                  | j                  j                  d       y )Nrd  re  )r%   r,  rg  r/  r2  r
   s    r   testIPVersionzIpaddrUnitTest.testIPVersion|  sV    **22A6**22A611991=r   c                     | j                  | j                  j                  d       | j                  | j                  j                  d       | j                  | j                  j                  d       y )Nrh  r   )r%   r-  max_prefixlenr0  r3  r
   s    r   testMaxPrefixLengthz"IpaddrUnitTest.testMaxPrefixLength  sV    ,,::B?,,::C@33AA3Gr   c                    | j                  | j                  j                  d       | j                  t        j                  d      j                  d       | j                  | j
                  j                  d       | j                  t        j                  d      j                  d       | j                  t        j                  d      j                  d       | j                  | j                  j                  d       | j                  t        j                  d	      j                  d       | j                  t        j                  d
      j                  d       y )NrF  rn  ro  rp  rq  rr  z::1:0:0:0:0s                  zffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)r%   r,  packedr   r  r/  r  r2  r
   s    r   
testPackedzIpaddrUnitTest.testPacked  s)   **11,	.001BCJJ,	.**11=	> 	001DELL*	+ 	00?FF@	B1188=	> 	001JKRR*	+ 	001DELL@	Br   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }| j                  t         j                  t        |             | j                  t         j                  t        |             | j                  t         j                  t        |             | j                  t         j                  t        |             y )Nr,  r\  )	r   r  r  r%   r  r  r   r  r   )r   ipv4netipv4addripv6netipv6addrs        r   
testIpTypezIpaddrUnitTest.testIpType  s    &&y1''	2&&{3''4..W>..X?..W>..X?r   c                    | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  t        j                  d      j                         | j                  t        j                  d      j                         | j                  t        j                  d      j                         | j                  t        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  t        j                  d      j                         | j                  t        j                  d       j                         | j                  dt        j                  d!      j                         | j                  dt        j                  d"      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         y )#NTz224.1.1.1/31Fz	240.0.0.0z192.168.1.1/17z192.169.0.0z10.255.255.255z11.0.0.0z172.31.255.255z
172.32.0.0z169.254.1.0/24z169.254.100.200/24z169.255.100.200/24z127.100.200.254/32z127.42.0.0/16z	128.0.0.0z100.64.0.0/10z192.0.2.128/25z192.0.3.0/24rZ   z	224.1.1.1z	240.0.0.1z239.255.255.255192.168.1.1z	192.0.0.0z	192.0.0.9z
192.0.0.10z192.0.0.255z169.254.100.200z169.255.100.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)r%   r   r  is_multicastr  is_reserved
is_privateis_link_localis_loopback	is_globalr  is_unspecifiedr  r   r
   s    r   testReservedIpv4zIpaddrUnitTest.testReservedIpv4  s   y55   ,	.	 4 4[ A N NOy33K@LLMy55  "",*	.	 4 4] C N NOy33  "",*	.	 4 4Z @ K KL	 4 4Z @ L LMy33  "",*	.	 4 4\ B M MN"--.>?MM	O 	#00244AM	C 	#00244AM	C 	#..244?K	A 	y33 !!,	.	 4 4[ A M MN"--o>II	K	 4 4_ E O OP"--.>?JJ	L"--n=GG	I 	y33I>MMNy33K@MMN	 4 4[ A N NOy33K@LLM"--.?@LL	N 	y33MBMMN	 4 4] C N NOy33  "",*	.	 4 4Z @ K KLy33  "",*	.	 4 4\ B M MN--k:DDE	,,[9CCD	,,\:DDE--m<FFG"--.?@NN	P"--.?@NN	P 		,,[9CCD--m<FFG#../@AMM	Oy33LAMMN	 4 4[ A M MNy33I>MMNr   c                 
   | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         y ) NFr  z	1.0.0.0/8Tz	0.0.0.0/8z
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z172.16.0.0/12z192.0.0.0/29z192.0.0.9/32z192.0.0.170/31rc  z192.168.0.0/16z198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32r  z::ff/128r  ::/128z::ffff:0:0/96z100::/64z2001:2::/48z2001:3::/48r  z2001:10::/28zfc00::/7z	fe80::/10)r%   r   r  r=  r
   s    r   testPrivateNetworksz"IpaddrUnitTest.testPrivateNetworks  s   	 4 4[ A L LM	 4 4[ A L LMy33K@KKLy33LALLMy33MBMMNy334DEPPQy33ODOOPy33NCNNO	 4 4^ D O OPy334DEPPQy33NCNNOy334DEPPQy33ODOOPy334EFQQRy334DEPPQy33MBMMNy334HITTU	 4 4V < G GH	 4 4Z @ K KLy33I>IIJy33H=HHIy33ODOOPy33J?JJKy33MBMMN	 4 4] C N NOy33ODOOPy33NCNNOy33J?JJKy33K@KKLr   c                 h   | j                  dt        j                  d      j                         | j                  dt        j                  ddz  dz
        j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  ddz  dz
        j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  t        j                  d      j                         | j                  t        j                  d      j                         | j                  t        j                  d      j                         | j                  t        j                  d       j                         | j                  t        j                  d!      j                         | j                  t        j                  d"      j                         | j                  t        j                  d#      j                         | j                  t        j                  d$      j                         | j                  t        j                  d%      j                         | j                  t        j                  d&      j                         | j                  t        j                  d'      j                         | j                  t        j                  d(      j                         | j                  t        j                  d)      j                         | j                  dt        j                  d*      j                         | j                  dt        j                  d+      j                         y ),NTzffff::r   r   r>   zff00::Fzfdff::zfecf::zfeff:ffff:ffff:ffff::z
fbf:ffff::zfc00::zfc00:ffff:ffff:ffff::zfbff:ffff::zfe00::zfea0::zfebf:ffff::zfe7f:ffff::zfec0::z	0:0::0:01z::1/127rz   r  z0::0r  z::/127z2001::1/128z
200::1/128z64:ff9b:1::z2001::z	2001:1::1z	2001:1::2z2001:2::z2001:3::z2001:4::z2001:4:112::z	2001:10::z	2001:20::z	2001:30::z	2001:40::z2002::z100::z4000::1/128)r%   r   r  r;  is_site_localr=  r>  r  r?  rA  r@  r  r  r   r<  r
   s    r   testReservedIpv6zIpaddrUnitTest.testReservedIpv6	  s   y33H=JJKy33AsFQJ?LLMy33H=JJK	 4 4X > K KLy33H=KKLy33' ))6	8	 4 4!+m	-	 4 4X > L LMy33H=HHIy33' ))3	5	 4 4] C N NO	 4 4X > I IJy33H=KKLy33 ,}	.	 4 4!,}	.	 4 4X > L LMy55kBNNO	 6 6y A M MN	 4 4T : F FG	 4 4U ; G GHy33F;JJK	 4 4U ; J JK	 4 4X > M MN"--m<GG	I"--l;EE	G 	y33H=JJKy33AsFQJ?LLMy33H=JJK	 4 4X > K KLy33H=KKLy33' ))6	8	 4 4!+m	-	 4 4X > L LMy33H=HHIy33' ))3	5	 4 4] C N NO	 4 4X > I IJy33H=KKLy33 ,}	.	 4 4!,}	.	 4 4X > L LMy33K@LLMy33E:FFG	 4 4U ; G GHy33F;JJK	 4 4U ; J JK--m<FFG--h7AAB	,,[9CCD	,,[9CCD--j9CCD	,,Z8BBC--j9CCD	,,^<FFG--k:DDE	,,[9CCD	,,[9CCD--k:DDE--h7AAB 	y33G<HHIy33MBNNOr   c                 j   | j                  t        j                  d      j                  t        j                  d             | j                  t        j                  d      j                  d        | j                  t        j                  d      j                  t        j                  d             y )N::ffff:192.168.1.1r:  z
::c0a8:101z::ffff:c0a8:101)r%   r   r  ipv4_mappedr
   s    r   testIpv4MappedzIpaddrUnitTest.testIpv4Mappedp	  s    $$%9:FF$$]3	5 	--l;GGN--.?@LL"--m<	>r   c                     | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         y )NTrJ  Fz::ffff:172.32.0.0)r%   r   r  r=  r
   s    r   testIpv4MappedPrivateCheckz)IpaddrUnitTest.testIpv4MappedPrivateCheckx	  sN    i**+?@KK	My++,?@KK	Mr   c                 8   | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         y )NTz::ffff:127.100.200.254/128z::ffff:127.42.0.0/112Fz::ffff:128.0.0.0z::ffff:127.100.200.254z::ffff:127.42.0.0)r%   r   r  r?  r  r
   s    r   testIpv4MappedLoopbackCheckz*IpaddrUnitTest.testIpv4MappedLoopbackCheck~	  s    y33, ..9k	;y33' ))4	6	 4 4"!$$/K	1 	y33( **5+	7y33# %%0[	2	 4 4"!$$/K	1r   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }| j                  t	        t        |j                  |                  t        j                  d      t        j                  d      g       | j                  t        t
        |j                  |             | j                  t        t
        |j                  |             | j                  t        t
        |j                  |             | j                  t        |j                  |            g        | j                  t	        t        |j                  |                  t        j                  d	      t        j                  d
      t        j                  d      t        j                  d      t        j                  d      t        j                  d      t        j                  d      t        j                  d      g       y )N10.1.1.0/24z10.1.1.0/26z10.2.1.0/2410.1.1.0z2001:db8::0/32z10.1.1.5/32z10.1.1.64/26z10.1.1.128/25z10.1.1.0/30z10.1.1.4/32z10.1.1.6/31z10.1.1.8/29z10.1.1.16/28z10.1.1.32/27)
r   r  r  r%   r  rT  address_excluder?   r  r@   r   r  addr2addr3addr4addr5addr6s          r   testAddrExcludezIpaddrUnitTest.testAddrExclude	  s   $$]3$$]3$$]3$$Z0$$%56$$]3U%:%:5%A BC#..~>#..?A	B 	*dE,A,A%,HI)T5+@+@+GH)T5+@+@+GHe33E:;R@U%:%:5%A BC#..}=#..}=#..}=#..}=#..~>#..~>#..~>#..?A	Br   c                    | j                  t        t        j                  d            t        t        j                  d                   | j                  t        t        j                  d            t        t        j                  d                   | j                  t        t        j
                  d            t        t        j
                  d                   | j                  t        t        j
                  d            t        t        j
                  t        t        j
                  d      j                                           t        j
                  d      }t        j
                  d      }i }d || j                  <   d || j                  <   d ||<   d ||<   | j                  | j                  |       | j                  ||       y )NrR  rS  r,  r  )r%   hashr   r  r  r  r_  rf  r,  r/  r  )r   rW  rX  dummys       r   testHashzIpaddrUnitTest.testHash	  sj   i44]CDi44]CD	Fi22=ABi22=AB	Di22:>?i22:>?	A 	i229=>i22	,,Y7;;<> ?	@ "":.""5)#'d #'d c
c
d''/c5!r   c                     | j                   }| j                  d|j                         | j                  }| j	                  t
        |j                  ddz  dz          y )Nr(  r   r   r>   )r.  r%   
compressedr1  r?   r  _string_from_ip_intr  s     r   testIPBaseszIpaddrUnitTest.testIPBases	  sL    s~~6*c&=&=q#vzJr   c                     | j                   }| j                  d|j                         | j                  d|j                         | j                  d|j                         | j                  dt        |             y )Nr*  z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)r1  r%   with_prefixlenwith_netmaskwith_hostmaskrJ  r  s     r   testIPv6NetworkHelpersz%IpaddrUnitTest.testIPv6NetworkHelpers	  sm    133E3EFD))	+D**	,13s8<r   c                     | j                   }| j                  d|j                         | j                  d|j                         | j                  d|j                         | j                  dt        |             y )Nr(  z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r.  r%   re  rf  rg  rJ  r  s     r   testIPv4NetworkHelpersz%IpaddrUnitTest.testIPv4NetworkHelpers	  se    s'9'9:0#2B2BC,c.?.?@s3x0r   c                    t        j                  d      }t        j                  |      }t        j                  d      }t        j                  |      }t        j                  d      }t        j                  d      }| j                  ||       | j                  ||       | j                  |t        j                  |             | j                  |t        j                  |             y )NrR  r  rx  ru  )r   r  r  r   r   r%   rU  s          r   testCopyConstructorz"IpaddrUnitTest.testCopyConstructor	  s    $$]3$$U+&&'DE&&u-%%i0%%&@A&&	 5 5e <=	 5 5e <=r   c           	         i ddddddddd	d
dddddddddddddddddddddd d!d"d#d$i}t        |j                               D ]3  \  }}| j                  |t        t	        j
                  |                   5 y )%Nz1:2:3:4:5:6:7:8z1:2:3:4:5:6:7:8/128z2001:0:0:4:0:0:0:8z2001:0:0:4::8/128z2001:0:0:4:5:6:7:8z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8z2001:0:3:4:5:6:7:8/128z0:0:3:0:0:0:0:ffffz0:0:3::ffff/128z0:0:0:4:0:0:0:ffffz::4:0:0:0:ffff/128z0:0:0:0:5:0:0:ffffz::5:0:0:ffff/128z1:0:0:4:0:0:7:8z1::4:0:0:7:8/128z0:0:0:0:0:0:0:0rD  z0:0:0:0:0:0:0:0/0r  z0:0:0:0:0:0:0:1r  z*2001:0658:022a:cafe:0000:0000:0000:0000/66r  r\  z::102:304/128z1:2:3:4:5:ffff:1.2.3.4z1:2:3:4:5:ffff:102:304/128z::7:6:5:4:3:2:1z0:7:6:5:4:3:2:1/128z::7:6:5:4:3:2:0z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1::z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1::z0:6:5:4:3:2:1:0/128)rT  itemsr%   rJ  r   r  )r   test_addressesuncompressedra  s       r   testCompressIPv6Addressz&IpaddrUnitTest.testCompressIPv6Address	  s6   4 "5 !"7 !":	
 !"3 !"6 !"4 1 x   y 9$  %&B  4!" 4#$ 4%& 4'* )-^-A-A-C(D 	 $L*ZY-D-D. *  	 r   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }| j                  d|j                         | j                  dt        j                  d      j                         | j                  d|j                         | j                  d	|j                         | j                  d|j                         y )
Nz2001::12001:0:5ef5:79fd:0:59d:a0e5:ba1r  z192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128r  z'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)r   r  r   r  r   r%   exploded)r   r  rV  rW  rX  s        r   testExplodeShortHandIpStrz(IpaddrUnitTest.testExplodeShortHandIpStr	  s    ''	2%%&GH%%k2%%o6F	)F"00;DD	F 	B	)E	)%..9r   c                     t        j                  d      }t        j                  d      }| j                  d|j                         | j                  d|j                         y )Nz	127.0.0.1rD  z1.0.0.127.in-addr.arpazH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa)r   r   r   r%   reverse_pointer)r   r  rV  s      r   testReversePointerz!IpaddrUnitTest.testReversePointer
  sU    %%k2%%m4153H3HI 2..	0r   c                     | j                  dt        | j                               | j                  dt        | j                               y )NrE  rc  )r%   r_  r,  r/  r
   s    r   testIntRepresentationz$IpaddrUnitTest.testIntRepresentation
  s<    3t'8'8#9:?T../	1r   c                     | j                  t        j                  d      j                  d       | j                  t        j                  d      j                  d       y )Nr>   rd  re  )r%   r   r  rg  r  r
   s    r   testForceVersionzIpaddrUnitTest.testForceVersion
  sD    --a088!<..q1991=r   c                    | j                  | j                  j                  d       | j                  | j                  j                  d       | j                  | j                  j                  d       | j                  | j
                  j                  d       | j                  | j
                  j                  d       | j                  | j
                  j                  d       y )Nr'  z1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255r  z.2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::z.2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff)r%   r-  re  rf  rg  r0  r
   s    r   testWithStarzIpaddrUnitTest.testWithStar
  s    ,,;;\J,,990	2,,::,	. 	,,;;6	8,,99I	K 	,,::I	Kr   c                    | j                  d| j                  j                         | j                  d| j                  j                         | j                  | j                  j                  t        j                  d             | j                  | j                  j                  t        j                  d             | j                  d| j                  j                         | j                  d| j                  j                         | j                  d| j                  j                         | j                  d| j                  j                         | j                  | j                  j                  t        j                  d             | j                  | j                  j                  j                  t        j                  d             | j                  | j                  j                  t        j                  d             | j                  | j                  j                  t        j                  d             | j                  | j                  j                  j                  t        j                  d             | j                  | j                  j                  j                  t        j                  d             | j                  d| j                  j                         | j                  d| j                  j                         | j                  d| j                  j                  j                         | j                  d| j                  j                  j                         y )Nr  rL  r  z	0.0.0.255r]  r  r^  )r  r.  __dict__r%   r  r   r   rL  r  r1  r`  r   r0  r  r
   s    r   testNetworkElementCachingz(IpaddrUnitTest.testNetworkElementCaching)
  s   ,d.?.?.H.HIT%6%6%?%?@ 	**<<"..{;	=**33"..{;	= 	)4+<+<+E+EFj$"3"3"<"<= 	,d.?.?.H.HIT%6%6%?%?@ 	**::"../DE	G,,44DD"../DE	G 	//!!"IJ	L 	**33"../FG	I''99!!"IJ	L 	,,44=="../FG	I 	)4+<+<+E+EFj$"3"3"<"<=)4+>+>+F+F+O+OPj$"5"5"="="F"FGr   c                 0   t        j                  d      }t        j                  d      }d}| j                  ||ft        j                  |      j                         d}| j                  t        j                  |      j                         d}| j                  t        j                  |      j                         t        j                  d      }| j                  t        j                  d      t        j                  d      f|j                         y )	Nz65.54.227.120z
192.0.2.45z'2001:0000:4136:e378:8000:63bf:3fff:fdd2z#2000::4136:e378:8000:63bf:3fff:fdd2z'2001:0001:4136:e378:8000:63bf:3fff:fdd2rs  z94.245.121.253z95.26.244.94)r   r   r%   r  teredor  r   )r   serverclientteredo_addrbad_addrs        r   
testTeredozIpaddrUnitTest.testTeredoS
  s    &&7&&|4?&&)"--k:AA	C8--h7>>?<--h7>>?  ++,MN)//0@A#//?A$++	-r   c                     t        j                  d      }t        j                  d      }| j                  t        j                  d      |j                         | j                  |j                         y )Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z172.29.45.100)r   r  r%   r   	sixtofourr  )r   sixtofouraddrr  s      r   testsixtofourzIpaddrUnitTest.testsixtofoure
  s\    !,,-@A''(;<..?&00	2++,r   c                     t        j                  d      }t        j                  d      }| j                  |j                         |j                                y )Nr,  z2.3.4.5)r   r  r  __hash__)r   ipv4_address1ipv4_address2s      r   testV4HashIsNotConstantz&IpaddrUnitTest.testV4HashIsNotConstantm
  sD    !//	:!//	:M224m6L6L6NOr   c                     t        j                  d      }t        j                  d      }| j                  |j                         |j                                y )Nr)  z2001:658:22a:cafe:200:0:0:2)r   r  r  r  )r   ipv6_address1ipv6_address2s      r   testV6HashIsNotConstantz&IpaddrUnitTest.testV6HashIsNotConstants
  sF    !//0MN!//0MNM224m6L6L6NOr   N)Nr*   r+   r,   r5  r7  r>  rH  rL  rR  rZ  ra  rl  rs  rv  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r(  r*  r,  r/  r2  r8  rB  rE  rH  rL  rN  rP  r[  r_  rc  rh  rj  rl  rq  ru  rx  rz  r|  r~  r  r  r  r  r  r0   r   r   r%  r%  %  s   Y EDEN@CF@5O2"00 5"AV,BK
0"
0K*4GlK.
T---,(@K@/"6	U	2#:J57n?3'`*DGFR;K@ZU6nM
12H*>
H
B,@KOZ MDYPv>M1 B0"*K=1> 4: 01
>K (HT-$-PPr   r%  __main__)r  r>  unittestr9   r.   rA   rI   r   r   test.supportr   r   TestCaser   r2   rS   rx   r   r   rB  r  r  r  r  r  r  r  r%  r*   mainr0   r   r   <module>r     s6   %   	      *3?8$$ 3?l' '2. .b/" /"bm/'9 m/`x4'9 x4vV&, V&r&<)< &36': 36lf1, f1R&<)< &,0': ,0^AL A&rAh'' rAjQPX&& QPh2 zHMMO r   