+
    Bi                       R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
Ht  ! R R]P                  4      t ! R R4      t ! R R]4      t ! R	 R
]4      t ! R R]]4      t ! R R]]4      t ! R R]4      t ! R R]]4      t ! R R]]4      t ! R R]4      t ! R R]]4      t ! R R]]4      t ! R R]4      t ! R R]P                  4      t ! R R ]P                  4      t]R!8X  d   ]P:                  ! 4        R# R# )"zUnittest for ipaddress module.N)LARGESTSMALLESTc                   f   a  ] tR t^t o ]R 4       t]P                  R 4       tR t	R t
R tRtV tR# )BaseTestCasec                    \         hN)NotImplementedErrorselfs   &*/usr/lib/python3.14/test/test_ipaddress.pyfactoryBaseTestCase.factory%   s    !!    c              '  "  "   V'       d	   W#,          pV P                  W4      pV;_uu_ 4       pVx  RRR4       XP                  P                  e(   V P                  VP                  P                  4       R# R#   + '       g   i     LQ; i5i)zc
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   assertCleanErrorBaseTestCase.assertCleanError)   sf      nG##H6R3I  ==$$0OOCMM>>? 1 Rs   ,BA<A	B<B	Bc                H    V P                   ! \        P                  V.VO5!  # )z Ensure a clean AddressValueError)r   	ipaddressAddressValueErrorr
   r   r   s   &&*r   assertAddressErrorBaseTestCase.assertAddressError9   (    $$Y%@%@%,5/35 	5r   c                H    V P                   ! \        P                  V.VO5!  # )z Ensure a clean NetmaskValueError)r   r   NetmaskValueErrorr   s   &&*r   assertNetmaskErrorBaseTestCase.assertNetmaskError>   r"   r   c                f    V P                  V P                  V4      V P                  V4      4       R# )z8Check constructor arguments produce equivalent instancesN)assertEqualr   r
   lhsrhss   &&&r   assertInstancesEqual!BaseTestCase.assertInstancesEqualC   s$    c*DLL,=>r    N)__name__
__module____qualname____firstlineno__propertyr   
contextlibcontextmanagerr   r    r%   r,   __static_attributes____classdictcell____classdict__s   @r   r   r      sI     & " " @ @5
5
? ?r   r   c                   8   a  ] tR t^Ht o R tR tR tR tRtV t	R# )CommonTestMixinc                    V P                  R 4      ;_uu_ 4        V P                  R4       RRR4       R#   + '       g   i     R# ; i)Address cannot be empty Nr    r   r	   s   &r   test_empty_address"CommonTestMixin.test_empty_addressJ   s0    $$%>??LL @???s	   6A	c                    V P                  \        P                  ! \        R 4      4      4      ;_uu_ 4        V P	                  R4       RRR4       R#   + '       g   i     R# ; i)z1.0g      ?N)r    reescapereprr   r	   s   &r   test_floats_rejected$CommonTestMixin.test_floats_rejectedN   s;    $$RYYtE{%;<<LL =<<<   AA$	c                   V P                  \        \        P                  V P	                  ^4      4       V P                  \        \
        V P	                  ^4      4       V P                  \        \        V P	                  ^4      4       R#    N)assertRaises	TypeErroroperatorindexr   hexbytesr	   s   &r   test_not_an_index_issue15559,CommonTestMixin.test_not_an_index_issue15559R   sV     	)X^^T\\!_E)S$,,q/:)UDLLO<r   c           	     Z   \        \        P                  ^,           4       Fr  pV P                  VR7      ;_uu_ 4        V P	                  V4      p\        P
                  ! \        P                  ! W24      4      pV P                  WC4       RRR4       Kt  	  R#   + '       g   i     K  ; i)rK   )protoN)rangepickleHIGHEST_PROTOCOLsubTestr   loadsdumpsr(   )r
   addrrU   xys   &&   r   pickle_testCommonTestMixin.pickle_testY   sr    622Q67EE**LL&LLa!78  & +* 8***s   ABB*r.   N)
r/   r0   r1   r2   r@   rF   rR   r_   r6   r7   r8   s   @r   r;   r;   H   s     =' 'r   r;   c                   D   a  ] tR t^at o R tR tR tR tR tR t	Rt
V tR# )	CommonTestMixin_v4c           
        R p. ROpV FY  pV P                  VR7      ;_uu_ 4        V P                  V4      ;_uu_ 4        V P                  V4       RRR4       RRR4       K[  	  R#   + '       g   i     L; i  + '       g   i     K  ; i)z(Leading zeros are not permitted in '\d+')addressN)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)rY   r    r   )r
   msg	addressesrd   s   &   r   test_leading_zeros%CommonTestMixin_v4.test_leading_zerosc   sh    9	
	 !Gg..,,S11LL) 2 /. !11 /..s#   A; A(A;(A83A;;Bc                N    V P                  ^ R4       V P                  RR4       R# )    0.0.0.0    P 192.168.0.1Nr,   r	   s   &r   test_intCommonTestMixin_v4.test_intu   s"    !!!Y/!!*m<r   c                    V P                  \        P                  R 4      R4       V P                  \        P                  R4      R4       R# )00000000rk   c0a80001rm   N)r,   rQ   fromhexr	   s   &r   test_packedCommonTestMixin_v4.test_packedy   s4    !!%--
";YG!!%--
";]Kr   c                    R pV P                  \        P                  ! V4      4      ;_uu_ 4        V P                  R4       RRR4       R#   + '       g   i     R# ; i)z,-1 (< 0) is not permitted as an IPv4 addressNr    rC   rD   r   r
   re   s   & r   test_negative_ints_rejected.CommonTestMixin_v4.test_negative_ints_rejected}   ;    <$$RYYs^44LL 5444   AA	c                    R pV P                  \        P                  ! VR,          4      4      ;_uu_ 4        V P                  R4       RRR4       R#   + '       g   i     R# ; i)z1%d (>= 2**32) is not permitted as an IPv4 addressNl        ry   rz   s   & r   test_large_ints_rejected+CommonTestMixin_v4.test_large_ints_rejected   s@    A$$RYYsU{%;<<LL =<<<rH   c                4   a  V 3R  lpV! ^4       V! ^4       R# )c                    < R V ,          pRpSP                  \        P                  ! W!V 3,          4      4      ;_uu_ 4        SP                  V4       RRR4       R#   + '       g   i     R# ; i)    z4%r (len %d != 4) is not permitted as an IPv4 addressNry   lengthr\   re   r
   s   &  r   assertBadLengthBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength   sN    6>DHC((33G)HIIT" JIIIs   AA/	Nr.   r
   r   s   f r   test_bad_packed_length)CommonTestMixin_v4.test_bad_packed_length   s    	# 	r   r.   N)r/   r0   r1   r2   rg   ro   ru   r{   r   r   r6   r7   r8   s   @r   rb   rb   a   s)     *$=L
 
 r   rb   c                   P   a  ] tR t^t o R tR tR tR tR tR t	R t
R tR	tV tR
# )CommonTestMixin_v6c                N    V P                  R R4       V P                  RR4       R# )z
0000::0000::z000::c0a8:0001::c0a8:1Nrn   r	   s   &r   rg   %CommonTestMixin_v6.test_leading_zeros   s#    !!,5!!"2J?r   c                N    V P                  ^ R4       V P                  RR4       R# )rj   r   rl   r   Nrn   r	   s   &r   ro   CommonTestMixin_v6.test_int   s"    !!!T*!!*j9r   c                   R\         P                  R4      ,           pV P                  VR4       R\         P                  R4      ,           pV P                  VR4       \         P                  R4      R,           pV P                  VR4       R# )r   rr   r   rs   r   zc0a8:1::Ns               )rQ   rt   r,   r
   r\   s   & r   ru   CommonTestMixin_v6.test_packed   sk    %--
33!!$-%--
33!!$
3}}Z(83!!$
3r   c                    R pV P                  \        P                  ! V4      4      ;_uu_ 4        V P                  R4       RRR4       R#   + '       g   i     R# ; i)z,-1 (< 0) is not permitted as an IPv6 addressNrx   ry   rz   s   & r   r{   .CommonTestMixin_v6.test_negative_ints_rejected   r}   r~   c                    R pV P                  \        P                  ! V^^,          ,          4      4      ;_uu_ 4        V P                  ^^,          4       RRR4       R#   + '       g   i     R# ; i)z2%d (>= 2**128) is not permitted as an IPv6 addressNry   rz   s   & r   r   +CommonTestMixin_v6.test_large_ints_rejected   sH    B$$RYYsQV|%<==LLC  >===s   A!!A2	c                4   a  V 3R  lpV! ^4       V! ^4       R# )c                   < R V ,          pRpSP                  \        P                  ! W!V 3,          4      4      ;_uu_ 4        SP                  V4       SP                  V4       RRR4       R#   + '       g   i     R# ; i)r   z5%r (len %d != 16) is not permitted as an IPv6 addressNry   r   s   &  r   r   BCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength   sZ    6>DIC((33G)HIIT"T" JIIIs   #A//B 	Nr.   r   s   f r   r   )CommonTestMixin_v6.test_bad_packed_length   s    	# 	r   c                    R pV P                  RV4      ;_uu_ 4        V P                  V4       RRR4       R#   + '       g   i     R# ; i)z::1%Invalid IPv6 address: "%r"Nr?   r
   rd   s   & r   test_blank_scope_id&CommonTestMixin_v6.test_blank_scope_id   s7    $$%A7KKLL! LKKK	   9A
	c                    R pV P                  RV4      ;_uu_ 4        V P                  V4       RRR4       R#   + '       g   i     R# ; i)z
::1%scope%r   Nr?   r   s   & r   "test_invalid_scope_id_with_percent5CommonTestMixin_v6.test_invalid_scope_id_with_percent   s7    $$%A7KKLL! LKKKr   r.   N)r/   r0   r1   r2   rg   ro   ru   r{   r   r   r   r   r6   r7   r8   s   @r   r   r      s3     @:4
!
	"
" "r   r   c                   t   a  ] tR t^t o ]P
                  tR tR tR t	R t
R tR tR tR tR	 tR
 tRtV tR# )AddressTestCase_v4c                    \         P                  ! R 4      p. ROpV F   w  r4V P                  V\        W4      4       K"  	  R# )1.2.3.42N))b 00000001000000100000001100101010)nr   )r]   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   )r>   r   )r   IPv4Addressr(   format)r
   v4v4_pairsfmttxts   &    r   test_formatAddressTestCase_v4.test_format   s;    "":.
( #JSS&/2 #r   c                    R pV P                  RV4      ;_uu_ 4        \        P                  ! V4       RRR4       R#   + '       g   i     R# ; i)z127.0.0.1/24Unexpected '/' in %rNr    r   r   r   s   & r   test_network_passed_as_address1AddressTestCase_v4.test_network_passed_as_address   s9    $$%;TBB!!$' CBBB	   >A	c                  a  V 3R  lpV! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R	4       V! R
4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       R# )c                    < SP                  R V 4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)zExpected 4 octets in %rNr   r\   r
   s   &r   assertBadSplitAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplit   s5    (()BDII%%d+ JIII	   =A	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.comNr.   r
   r   s   f r   test_bad_address_split)AddressTestCase_v4.test_bad_address_split   s    	, 	y!'(z"wt~&~&'(~&'(}%y!uu'({#vsw{#v)*()r   c                4   a  V 3R  lpV! R4       V! R4       R# )c                    < SP                  R V 4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)zEmpty octet not permitted in %rNr   r   s   &r   assertBadOctet;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctet  s?    (()J)-/ /%%d+/ / / /r   z	42..42.42z...Nr.   r
   r   s   f r   test_empty_octet#AddressTestCase_v4.test_empty_octet  s    	,
 	{#ur   c                   a  V 3R  lpV! RR4       V! RR4       V! RR4       V! RR4       V! R	R
4       V! RR4       V! RR4       V! RR4       V! RR4       R# )c                    < R V: RV : 2pSP                  \        P                  ! V4      4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z!Only decimal digits permitted in  in Nr    rC   rD   r   r   r\   octetre   r
   s   && r   r   BAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctet  sC    AFMC((388%%d+ 9888   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aNr.   r   s   f r   test_invalid_characters*AddressTestCase_v4.test_invalid_characters
  sf    	,
 	,f5+U3}d+}d+~u-|T*{E*{E*y#&r   c                8   a  V 3R  lpV! RR4       V! RR4       R# )c                    < R pSP                  \        P                  ! W!V 3,          4      4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z*At most 3 characters permitted in %r in %rNr   r   s   && r   r   <AddressTestCase_v4.test_octet_length.<locals>.assertBadOctet  sG    >C((33F)GHH%%d+ IHHHr   z0000.000.000.0000000z12345.67899.-54321.-9876512345Nr.   r   s   f r   test_octet_length$AddressTestCase_v4.test_octet_length  s     	,
 	)622G<r   c                8   a  V 3R  lpV! RR4       V! RR4       R# )c                    < R W3,          pSP                  \        P                  ! V4      4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z$Octet %d (> 255) not permitted in %rNr   r   s   && r   r   ;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet$  sE    8E=HC((388%%d+ 9888r   z	257.0.0.0i  z192.168.0.999i  Nr.   r   s   f r   test_octet_limit#AddressTestCase_v4.test_octet_limit#  s    	,
 	{C(,r   c                (    V P                  R 4       R# 	192.0.2.1Nr_   r	   s   &r   test_pickleAddressTestCase_v4.test_pickle,  s    %r   c                P    \         P                  ! V P                  R 4      4       R# r  weakrefrefr   r	   s   &r   test_weakrefAddressTestCase_v4.test_weakref/  s    DLL-.r   c                   V P                  \        P                  ! R 4      P                  \        P                  ! R4      4       V P                  \        P                  ! R 4      P                  \        P                  ! R4      4       V P                  \        P                  ! R 4      P                  P
                  \        P                  ! R 4      4       R# )192.168.1.1::ffff:192.168.1.1::ffff:c0a8:101N)r(   r   r   ipv6_mappedIPv6Addressipv4_mappedr	   s   &r   test_ipv6_mapped#AddressTestCase_v4.test_ipv6_mapped2  s    ..}=II"../CD	F..}=II"../@A	C..}=IIUU"..}=	?r   r.   N)r/   r0   r1   r2   r   r   r   r   r   r   r   r   r  r
  r  r  r  r6   r7   r8   s   @r   r   r      sG     ##G32(
*:' =-&/? ?r   r   c                      a  ] tR tRt o ]P
                  tR tR tR t	R t
R tR tR tR	 tR
 tR tR tR tR tR tR tR tRtV tR# )AddressTestCase_v6i;  c                    \         P                  ! R 4      p. ROpV F   w  r4V P                  V\        W4      4       K"  	  R# )z
::1.2.3.42N))r   ڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r    0000000000000000000000000102032a)r]   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)r>   r0  )r   r  r(   r   )r
   v6v6_pairsr   r   s   &    r   r   AddressTestCase_v6.test_format>  s<    ""<0!
F #JSS&/2 #r   c                4   a  V 3R  lpV! R4       V! R4       R# )c                    < R pSP                  W4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)r   N)r    r   r  r\   re   r
   s   & r   r   IAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplith  s6    (C((33%%d+ 4333r   z::1/24z::1%scope_id/24Nr.   r   s   f r   r   1AddressTestCase_v6.test_network_passed_as_addressg  s    	, 	x ()r   c                t   a  V 3R  lpV! R4       V! R4       V! R4       V! R4       V! R4       V! R4       R# )c                    < R pSP                  WP                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)zAt least 3 parts expected in %r%Nr    splitr   r  r6  s   & r   r   UAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplitp  sD    3C((jjoa.@AA%%d+ BAAA   AA%	:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scopeNr.   r   s   f r   *test_bad_address_split_v6_not_enough_parts=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partso  s;    	,
 	st{#y!z"()r   c                   a  V 3R  lpV! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R	4       V! R
4       R# )c                    < R pSP                  WP                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z At most 8 colons permitted in %rr;  Nr<  r6  s   & r   r   TAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplit}  D    4C((jjoa.@AA%%d+ BAAAr?  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%scopeNr.   r   s   f r   )test_bad_address_split_v6_too_many_colons<AddressTestCase_v6.test_bad_address_split_v6_too_many_colons|  sd    	,
 	+,-.*+*+5612340101;<r   c                   a  V 3R  lpRR,          R,           pV! V4       V! VR,           4       V! VR,           4       V! VR,           4       R# )c                    < R pSP                  V\        P                  ! V R,          4      4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z%At most 45 characters expected in '%s:N-   NN)r    rC   rD   r   r  r6  s   & r   r   MAddressTestCase_v6.test_bad_address_split_v6_too_long.<locals>.assertBadSplit  sF    :C((biiS	.BCC%%d+ DCCCr   z0:i'  0z%zoneidz:255.255.255.255z:ffff:255.255.255.255Nr.   )r
   r   	long_addrs   f  r   "test_bad_address_split_v6_too_long5AddressTestCase_v6.test_bad_address_split_v6_too_long  sI    	, E\S(	y!y9,-y#556y#::;r   c                   a  V 3R  lpV! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R	4       V! R
4       R# )c                    < R pSP                  WP                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z+Exactly 8 parts expected without '::' in %rr;  Nr<  r6  s   & r   r   SAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplit  sD    ?C((jjoa.@AA%%d+ BAAAr?  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%scopeNr.   r   s   f r   (test_bad_address_split_v6_too_many_parts;AddressTestCase_v6.test_bad_address_split_v6_too_many_parts  sc    	,
 	-.*+'23./3401,-8945r   c                4   a  V 3R  lpV! R4       V! R4       R# )c                    < R pSP                  WP                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z.Expected at most 7 other parts with '::' in %rr;  Nr<  r6  s   & r   r   eAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplit  sD    BC((jjoa.@AA%%d+ BAAAr?  z1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scopeNr.   r   s   f r   :test_bad_address_split_v6_too_many_parts_with_double_colonMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon  s    	,
 	)*/0r   c                T  a  V 3R  lpV! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R	4       V! R
4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       R# )c                    < R pSP                  WP                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z At most one '::' permitted in %rr;  Nr<  r6  s   & r   r   ZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplit  rF  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%scopeNr.   r   s   f r   /test_bad_address_split_v6_repeated_double_colonBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon  s    	,
 	|$~&~&{#{#}%}%~&u~&)*+,+,()()*+*++,{#+,r   c                   a  V 3R  lpV! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       R	# )
c                    < R pSP                  WP                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z0Leading ':' only permitted as part of '::' in %rr;  Nr<  r6  s   & r   r   RAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplit  sD    DC((jjoa.@AA%%d+ BAAAr?  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::%scopeNr.   r   s   f r   'test_bad_address_split_v6_leading_colon:AddressTestCase_v6.test_bad_address_split_v6_leading_colon  sP    	,
 	~&'(''(+,-.,--.r   c                   a  V 3R  lpV! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       R	# )
c                    < R pSP                  WP                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z1Trailing ':' only permitted as part of '::' in %rr;  Nr<  r6  s   & r   r   SAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplit  sD    EC((jjoa.@AA%%d+ BAAAr?  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:%scopeNr.   r   s   f r   (test_bad_address_split_v6_trailing_colon;AddressTestCase_v6.test_bad_address_split_v6_trailing_colon  sP    	,
 	~&'(|$'(+,-.)*-.r   c                   a  V 3R  lpV! RR4       V! RR4       V! RR4       V! RR4       V! R	R
4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR
4       R# )c                    < SP                  R WP                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z%s in %rr;  Nr<  )r\   v4_errorr
   s   &&r   assertBadAddressPartDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPart  sA    ((Xzz#q?QRR%%d+ SRRRs   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%scopeNr.   )r
   rm  s   f r   test_bad_v4_part_in&AddressTestCase_v6.test_bad_v4_part_in  s    	, 	],JK_=	?Y;	=]?	A..	/ 	02PQ2=	?_;	=0?	A4.	/r   c                   a  V 3R  lpV! RR4       V! RR4       V! RR4       V! RR4       V! R	R
4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR
4       V! RR4       R# )c                   < R V: RV P                  R4      ^ ,          : 2pSP                  \        P                  ! V4      4      ;_uu_ 4        \        P
                  ! V 4       RRR4       R#   + '       g   i     R# ; i)zOnly hex digits permitted in r   r;  N)r=  r    rC   rD   r   r  r\   partre   r
   s   && r   assertBadPartAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPart  sQ    =A4::c?STCUVC((388%%d+ 9888s   A00B	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%scopeNr.   r
   ru  s   f r   r   *AddressTestCase_v6.test_invalid_characters  s    	,
 	lF+j$'j$'j$'k9-mU+(&1&-&-&-'3)51r   c                   a  V 3R  lpV! RR4       V! RR4       V! RR4       V! RR4       V! R	R4       V! R
R4       V! RR4       V! RR4       R# )c                    < R pSP                  W!V P                  R4      ^ ,          4      ;_uu_ 4        \        P                  ! V 4       RRR4       R#   + '       g   i     R# ; i)z*At most 4 characters permitted in %r in %rr;  Nr<  rs  s   && r   ru  :AddressTestCase_v6.test_part_length.<locals>.assertBadPart&  sF    >C((DJJsOA4FGG%%d+ HGGGs   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%scopeNr.   r}  s   f r   test_part_length#AddressTestCase_v6.test_part_length%  s^    	,
 	i)mW-mW-&1ow/)73)73,h7r   c                J    V P                  R 4       V P                  R4       R# 
2001:db8::2001:db8::%scopeNr  r	   s   &r   r  AddressTestCase_v6.test_pickle5  s    &+,r   c                    \         P                  ! V P                  R 4      4       \         P                  ! V P                  R4      4       R# r  r  r	   s   &r   r  AddressTestCase_v6.test_weakref9  s-    DLL./DLL!345r   c                    V P                  R 4      pV P                  V\        P                  ! V4      4       V P                  V\        P                  ! V4      4       R# )r  N)r   r(   copydeepcopyr   s   & r   	test_copyAddressTestCase_v6.test_copy=  sB    ||./tyy/t}}T23r   r.   N)r/   r0   r1   r2   r   r  r   r   r   rA  rG  rO  rT  rY  r^  rc  rh  ro  r   r  r  r  r  r6   r7   r8   s   @r   r"  r"  ;  sf     ##G'3R**=(<6(1-8/ / /62(8 -64 4r   r"  c                   N   a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
tV tR# )NetmaskTestMixin_v4iC  ;Input validation on interfaces and networks is very similarc                   R Fy  pV P                  V4      pV P                  \        V4      R4       V P                  \        VP                  4      R4       V P                  \        VP                  4      R4       K{  	  R# )ry  
1.2.3.4/32255.255.255.255rk   N)ry     r   r(   strnetmaskhostmask)r
   rd   nets   &  r   test_no_mask NetmaskTestMixin_v4.test_no_maskF  sb    CG,,w'CSX|4S-/@AS.	:	 Dr   c                    R pV P                  RV,          4      ;_uu_ 4        V P                  V4       RRR4       R#   + '       g   i     R# ; i)z1.2.3.4/32/24Only one '/' permitted in %rNr?   r   s   & r   test_split_netmask&NetmaskTestMixin_v4.test_split_netmaskO  s:    $$%Cd%JKKLL LKKKs	   ?A	c                   a  V 3R  lpV! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR	4       V! R
\         P                  ! R4      4       R# )c                    < SP                  V4      ;_uu_ 4        SP                  V 4       R R R 4       R #   + '       g   i     R # ; ir   r?   r\   r   r
   s   &&r   assertBadAddressANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddressU  /    ((11T" 2111	   7A	/r=   /8r   zExpected 4 octets
google.com10/8	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255)N)rC   rD   r
   r  s   f r   test_address_errors'NetmaskTestMixin_v4.test_address_errorsT  s_    	# 	7889"56':;!45&;<bii&>?r   c           	     b   V P                  \        V P                  R4      4      R4       V P                  \        V P                  R4      4      R4       V P                  \        V P                  R	4      4      R4       V P                  \        V P                  R4      4      R4       \        ^ ^!4       F  pRV,          pV P                  V4      pV P                  \        V4      V4       V P                  \        V P                  RVP                  ,          4      4      V4       V P                  \        V P                  RV,          4      4      V4       VR
9   d   R^ V,
          ,          pV P                  \        V P                  RVP
                  ,          4      4      V4       K  	  R# )	192.0.2.0192.0.2.0/24z192.0.2.0/255.255.255.0z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%dNr     )r  24r  255.255.255.0)    rj   )r(   r  r   rV   r  r  )r
   inet_strr  s   &   r   test_valid_netmask&NetmaskTestMixin_v4.test_valid_netmaska  sR   T\\*;<=~NT\\*=>?PT\\*HIJ'	)T\\*CDE'	)q"A"Q&G,,w'CSXw/DLL!;<=wH Sma.?!@A7K G|&"q&1DLL!<=>I r   c                  a  V 3R  lpV! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR	4       V! R
R4       V! R
R4       V! R
R4       V! R
R4       V! R
R4       V! R
R4       R# )c                    < R V,          pSP                  \        P                  ! V4      4      ;_uu_ 4        SP                  V : RV: 24       RRR4       R#   + '       g   i     R# ; i%r is not a valid netmaskr  Nr%   rC   rD   r   r\   r  re   r
   s   && r   assertBadNetmaskANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmaskz  F    -7C((388g67 9888   AA,	ry  r>   rx  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puddingr   Nr.   r
   r  s   f r   test_netmask_errors'NetmaskTestMixin_v4.test_netmask_errorsy  s    	8
 	B'D)D)E*E*D)$56I.M2M2O4M2I.D)r   c                8   a  V 3R  lpV! RR4       V! R^!4       R# )c                    < R V,          pSP                  \        P                  ! V4      4      ;_uu_ 4        SP                  W34       RRR4       R#   + '       g   i     R# ; ir  Nr  r  s   && r   r  JNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmask  C    -7C((388d_- 9888   AA&	r  Nrx   r.   r  s   f r   test_netmask_in_tuple_errors0NetmaskTestMixin_v4.test_netmask_in_tuple_errors  s    	. 	B'B'r   c                l    V P                  R 4       V P                  R4       V P                  R4       R# )z192.0.2.0/27z192.0.2.0/31r  Nr  r	   s   &r   r  NetmaskTestMixin_v4.test_pickle  s,    ((%r   r.   Nr/   r0   r1   r2   __doc__r  r  r  r  r  r  r  r6   r7   r8   s   @r   r  r  C  s2     E;
@I0**(& &r   r  c                   .    ] tR tRt]P
                  tRtR# )InterfaceTestCase_v4i  r.   N)r/   r0   r1   r2   r   IPv4Interfacer   r6   r.   r   r   r  r        %%Gr   r  c                   J   a  ] tR tRt o ]P
                  tR tR tR t	Rt
V tR# )NetworkTestCase_v4i  c                   V P                  V P                  R 4      P                  V P                  R4      4      4       V P                  V P                  R 4      P                  V P                  R4      4      4       V P                  V P                  R 4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R 4      4      4       R# 10.0.0.0/30z10.0.1.0/24z10.0.0.0/24NassertFalser   	subnet_ofr   r	   s   &r   test_subnet_of!NetworkTestCase_v4.test_subnet_of  s    LL'11]+-	. 	LL'11]+-	. 	LL'11]+-	. 	LL'11]+-	.r   c                   V P                  V P                  R 4      P                  V P                  R4      4      4       V P                  V P                  R 4      P                  V P                  R4      4      4       V P                  V P                  R 4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R 4      4      4       R# r  r  r   supernet_ofr   r	   s   &r   test_supernet_of#NetworkTestCase_v4.test_supernet_of  s    LL'33]+-	. 	LL'33]+-	. 	LL'33]+-	. 	LL'33]+-	.r   c                   V P                  \        4      ;_uu_ 4        \        P                  ! R 4      P	                  \        P
                  ! R4      4       RRR4       V P                  \        4      ;_uu_ 4        \        P
                  ! R4      P	                  \        P                  ! R 4      4       RRR4       V P                  \        4      ;_uu_ 4        \        P                  ! R 4      P                  \        P
                  ! R4      4       RRR4       V P                  \        4      ;_uu_ 4        \        P
                  ! R4      P                  \        P                  ! R 4      4       RRR4       R#   + '       g   i     EL0; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)r  ::1/128N)rL   rM   r   IPv4Networkr  IPv6Networkr  r	   s   &r   test_subnet_of_mixed_types-NetworkTestCase_v4.test_subnet_of_mixed_types  s)   y))!!-0<<%%i02 * y))!!),88%%m46 * y))!!-0::%%i02 * y))!!),66%%m46 *) *)) *) *) *))s/   :E?=:F:F&;:F9?F	F#	&F6	9G
	r.   N)r/   r0   r1   r2   r   r  r   r  r  r  r6   r7   r8   s   @r   r  r    s$     ##G.$.$6 6r   r  c                   N   a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
tV tR# )NetmaskTestMixin_v6i  r  c                   R Fy  pV P                  V4      pV P                  \        V4      R4       V P                  \        VP                  4      R4       V P                  \        VP                  4      R4       K{  	  V P                  R4      pV P                  \        V4      R4       V P                  \        VP                  4      R4       V P                  \        VP                  4      R4       R# )::1r  z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr   	::1%scope::1%scope/128N)r  rK   s                  r  )r
   rd   r  
scoped_nets   &   r   r   NetmaskTestMixin_v6.test_no_mask  s    7G,,w'CSXy1S-/XYS.5	 8 \\+.
Z/:Z//02[\Z00148r   c                D   R pV P                  RV,          4      ;_uu_ 4        V P                  V4       RRR4       RpV P                  RV,          4      ;_uu_ 4        V P                  V4       RRR4       R#   + '       g   i     LN; i  + '       g   i     R# ; i)zcafe:cafe::/128/190r  Nzcafe:cafe::%scope/128/190r?   )r
   r\   scoped_addrs   &  r   r  &NetmaskTestMixin_v6.test_split_netmask  sz    $$$%Cd%JKKLL L 2$$%Ck%QRRLL% SR	 LK SRRs   A;B;B	B	c                   a  V 3R  lpV! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR	4       V! R
R4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR	4       R# )c                    < SP                  V4      ;_uu_ 4        SP                  V 4       R R R 4       R #   + '       g   i     R # ; ir   r?   r  s   &&r   r  ANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddress  r  r  r  r=   r  r  zAt least 3 partsry  r  rz  zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez1.2.3.4%scopez
10%scope/8r|  Nr.   r  s   f r   r  'NetmaskTestMixin_v6.test_address_errors  s    	# 	7889'9:$67!34(9:$=>%>?+-?@*<='9:,.?@r   c           	     2   V P                  \        V P                  R4      4      R4       V P                  \        V P                  R4      4      R4       V P                  \        V P                  R4      4      R4       \        ^ ^4       Fg  pRV,          pV P                  \        V P                  V4      4      V4       V P                  \        V P                  RV,          4      4      V4       Ki  	  V P                  \        V P                  R4      4      R4       \        ^ ^4       Fg  pRV,          pV P                  \        V P                  V4      4      V4       V P                  \        V P                  RV,          4      4      V4       Ki  	  R# )r  2001:db8::/32z::/%dz::/0%dz2001:db8::%scope/32N)r  r  )r  32)r(   r  r   rV   )r
   r  r  s   &  r   r  &NetmaskTestMixin_v6.test_valid_netmask  s:    	T\\*<=>(	*T\\*>?@(	*T\\/:;_Mq#AkGSg!67AShl!;<gF  	T\\*?@ACXYq#AkGSg!67AShl!;<gF r   c                   a  V 3R  lpV! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR4       V! RR	4       V! RR
4       V! RR4       V! RR
4       R# )c                    < R V,          pSP                  \        P                  ! V4      4      ;_uu_ 4        SP                  V : RV: 24       RRR4       R#   + '       g   i     R# ; ir  r  r  s   && r   r  ANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmask  r  r  r  r>   1::rx  r   r  r  129ry  r  r   r  Nr.   r  s   f r   r  'NetmaskTestMixin_v6.test_netmask_errors  s    	8
 	#&&%%&&&	*	*t$i0r   c                J   a  V 3R  lpV! RR4       V! R^4       V! R^4       R# )c                    < R V,          pSP                  \        P                  ! V4      4      ;_uu_ 4        SP                  W34       RRR4       R#   + '       g   i     R# ; ir  r  r  s   && r   r  JNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmask/  r  r  r  r  Nrx   r.   r  s   f r   r  0NetmaskTestMixin_v6.test_netmask_in_tuple_errors.  s(    	. 	#$c*r   c                    V P                  R 4       V P                  R4       V P                  R4       V P                  R4       R# )z2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scopeNr  r	   s   &r   r  NetmaskTestMixin_v6.test_pickle7  s>    -.-.)*/0r   r.   Nr  r8   s   @r   r  r    s2     E9&A&G.1(+1 1r   r  c                   .    ] tR tRt]P
                  tRtR# )InterfaceTestCase_v6i?  r.   N)r/   r0   r1   r2   r   IPv6Interfacer   r6   r.   r   r   r  r  ?  r  r   r  c                   D   a  ] tR tRt o ]P
                  tR tR tRt	V t
R# )NetworkTestCase_v6iC  c                   V P                  V P                  R 4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R4      4      4       R# )2000:999::/562000:aaa::/482000:aaa::/562000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56Nr  r	   s   &r   r  !NetworkTestCase_v6.test_subnet_ofF  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                   V P                  V P                  R 4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R4      4      4       V P                  V P                  R4      P                  V P                  R4      4      4       R# )r  r   r!  r"  Nr  r	   s   &r   r  #NetworkTestCase_v6.test_supernet_of_  s    LL)55_-/	0 	LL)55_-/	0 	LL)55_-/	0 	LL)55_-/	0r   r.   N)r/   r0   r1   r2   r   r  r   r  r  r6   r7   r8   s   @r   r  r  C  s     ##G620 0r   r  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )FactoryFunctionErrorsir  c                    RpRpV P                  \        WCV4      ;_uu_ 4        V! V4       RRR4       R#   + '       g   i     R# ; i)z3Ensure a clean ValueError with the expected messagecamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r   
ValueError)r
   r   kindr\   re   s   &&&  r   assertFactoryError(FactoryFunctionErrors.assertFactoryErrort  s8    ;"":s$??DM @???s	   	7A	c                F    V P                  \        P                  R 4       R# )rd   N)r,  r   
ip_addressr	   s   &r   test_ip_address%FactoryFunctionErrors.test_ip_address{      	 4 4i@r   c                F    V P                  \        P                  R 4       R# )	interfaceN)r,  r   ip_interfacer	   s   &r   test_ip_interface'FactoryFunctionErrors.test_ip_interface~  s    	 6 6Dr   c                F    V P                  \        P                  R 4       R# )networkN)r,  r   
ip_networkr	   s   &r   test_ip_network%FactoryFunctionErrors.test_ip_network  r2  r   r.   N)
r/   r0   r1   r2   r,  r0  r6  r;  r6   r7   r8   s   @r   r'  r'  r  s"     AEA Ar   r'  c                   b  a  ] tR tRt o ]P
                  ! ^4      t]P                  ! ^4      t]P                  ! ^4      t
]P                  ! ^4      t]P                  ! ^4      t]P                  ! ^4      t]P                  ! R4      t]P                  ! R4      t]P                  ! R4      t]]
.t]].,           t]].t]].,           t]].t]].,           t]],           t]],           t]P
                  ! ^4      t]P                  ! ^4      t]P                  ! ^4      t]P                  ! ^4      t]P                  ! ^4      t ]P                  ! ^4      t!]P                  ! R4      t"]P                  ! R4      t#]P                  ! R4      t$R t%R t&R t'R t(R t)R	 t*R
 t+R t,R t-R t.R t/Rt0V t1R# )ComparisonTestsi  r  	::2%scopec                   \        4       pV P                   Fq  pV P                  W!4       V P                  W!8H  4       V P	                  VP                  V4      \        4       V P	                  VP                  V4      \        4       Ks  	  R # r   )objectobjects_with_scopedassertNotEqualr  r(   __eq__NotImplemented__ne__r
   otherobjs   &  r   test_foreign_type_equality*ComparisonTests.test_foreign_type_equality  si    ++C+S\*SZZ.?SZZ.?	 ,r   c                    V P                    F.  pV P                    F  pWJ d   K
  V P                  W4       K  	  K0  	  R # r   )objectsrC  r)   s   &  r   test_mixed_type_equality(ComparisonTests.test_mixed_type_equality  s6     <<C||:##C- $  r   c                z    \        V P                  V P                  4       F  w  rV P                  W4       K  	  R # r   )zip
v6_objectsv6_scoped_objectsrC  r)   s   &  r   test_scoped_ipv6_equality)ComparisonTests.test_scoped_ipv6_equality  s.    DOOT-C-CDHC) Er   c                t    V P                    F'  pV P                   F  pV P                  W4       K  	  K)  	  R # r   )
v4_objectsrS  rC  r)   s   &  r   test_v4_with_v6_scoped_equality/ComparisonTests.test_v4_with_v6_scoped_equality  s.    ??C--##C- . #r   c                    V P                    F6  pV P                  W4       V P                  W4       V P                  W4       K8  	  R # r   )rB  r(   assertLessEqualassertGreaterEqualr
   rI  s   & r   test_same_type_equality'ComparisonTests.test_same_type_equality  s<    ++CS&  *##C- ,r   c           
        V P                   V P                  3V P                  V P                  3V P                  V P
                  3V P                  V P                  3V P                  V P                  3V P                  V P                  3V P                  V P                  3V P                  V P                  3V P                   V P"                  33	 F  w  rV P%                  W4       V P'                  W4       V P)                  W4       V P+                  W!4       V P-                  W!4       V P/                  W8  4       V P/                  W!8  4       V P/                  W8  4       V P/                  W!8*  4       K  	  R # r   )v4addrv4addr2v4netv4net2v4intfv4intf2v6addrv6addr2v6netv6net2v6intfv6intf2v6addr_scopedv6addr2_scopedv6net_scopedv6net2_scopedv6intf_scopedv6intf2_scopedrC  
assertLessr[  assertGreaterr\  r  r)   s   &  r   test_same_type_ordering'ComparisonTests.test_same_type_ordering  s2   [[$,,'ZZ%[[$,,'[[$,,'ZZ%[[$,,'!4!45 2 23!4!45

HC )OOC%  *s(##C-SY'SY'SZ(SZ('

r   c                ,   V P                    F  pV P                  WP                  4       K   	  V P                  V P                  ,            F  pV P                  WP
                  4       K   	  V P                  V P                  ,            F  pV P                  WP                  4       K   	  V P                  V P
                  V P                  .,            F  pV P                  WP
                  4       K   	  V P                  V P
                  V P                  .,            F  pV P                  WP                  4       K   	  V P                  V P                  ,           V P                  .,            F  pV P                  WP                  4       K   	  R # r   )v4_addressesassertInrc  v6_addressesv6_scoped_addressesri  ro  rW  assertNotInrR  rS  r]  s   & r   test_containment ComparisonTests.test_containment  s0   $$CMM#zz* %$$t'?'???CMM#zz* @$$t'?'???CMM#001 @ ??djj$2C2C%DDDCS**- E??djj$2C2C%DDDCS"3"34 E??T%;%;;tzzlJJCS**- Kr   c                  aa V P                    F  oV P                    F  o\        S\        S4      4      '       g   \        S\        S4      4      '       d   K;  V P                  \        VV3R  l4       V P                  \        VV3R l4       V P                  \        VV3R l4       V P                  \        VV3R l4       K  	  K  	  R# )c                     < S S8  # r   r.   r*   r+   s   r   <lambda>:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>  	    S3Yr   c                     < S S8  # r   r.   r  s   r   r  r    r  r   c                     < S S8*  # r   r.   r  s   r   r  r    	    SCZr   c                     < S S8  # r   r.   r  s   r   r  r    r  r   N)rB  
isinstancetyperL   rM   r)   s   &@@r   test_mixed_type_ordering(ComparisonTests.test_mixed_type_ordering  s    ++C//c49--Cc1K1K!!)->?!!)->?!!)-?@!!)-?@ 0 ,r   c                   \        4       pV P                   EFl  pV P                  \        4      ;_uu_ 4        W!8   R R R 4       V P                  \        4      ;_uu_ 4        W!8   R R R 4       V P                  \        4      ;_uu_ 4        W!8*   R R R 4       V P                  \        4      ;_uu_ 4        W!8   R R R 4       V P	                  V\
        8  4       V P                  V\
        8  4       V P	                  V\
        8*  4       V P                  V\
        8  4       V P                  V\        8  4       V P	                  V\        8  4       V P                  V\        8*  4       V P	                  V\        8  4       EKo  	  R #   + '       g   i     ELV; i  + '       g   i     EL@; i  + '       g   i     EL*; i  + '       g   i     EL; ir   )rA  rB  rL   rM   r   r   r  r   rG  s   &  r   test_foreign_type_ordering*ComparisonTests.test_foreign_type_ordering  s5   ++C""9-- .""9-- .""9-- .""9-- .OOC'M*S7]+OOC7N+SG^,S8^,OOC(N+SH_-OOC8O,! ,------------s/   F
"FF26G
FF/2GGc                
   V P                   V P                  V P                  .pV P                  V P                  V P
                  .pV P                  V P                  V P                  .pV P                  V\        V P                  \        P                  R 7      4       V P                  V\        V P                  \        P                  R 7      4       V P                  V\        V P                  \        P                  R 7      4       V P                  W,           \        V P                  V P                  ,           \        P                  R 7      4       V P                  \         \        P                  ! \"        4      4       R# ))keyN)ra  rc  re  rg  ri  rk  rm  ro  rq  r(   sortedrW  r   get_mixed_type_keyrR  rS  rE  rA  )r
   
v4_ordered
v6_orderedv6_scoped_ordereds   &   r   test_mixed_type_key#ComparisonTests.test_mixed_type_key	  s)   kk4::t{{;
kk4::t{{;
!//1B1BDDVDVW$-$@$@B	C 	$-$@$@B	C 	* 6 6$-$@$@B	C 	7$2H2H H$-$@$@B	C 	)E)Ef)MNr   c                .   \         P                  ! R 4      p\         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      pV P                  \        VP
                  V4       V P                  \        VP                  V4       V P                  \        VP
                  V4       V P                  \        VP                  V4       V P                  \        VP
                  V4       V P                  \        VP                  V4       V P                  \        VP
                  V4       V P                  \        VP                  V4       V P                  \        VP
                  V4       V P                  \        VP                  V4       V P                  \        VP
                  V4       V P                  \        VP                  V4       V P                  \        VP
                  V4       V P                  \        VP                  V4       V P                  \        VP
                  V4       V P                  \        VP                  V4       R# )r  r  r  N)r   r/  r:  rL   rM   __lt____gt__)r
   ra  rc  rg  ri  rm  ro  s   &      r   test_incompatible_versions*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   r.   N)2r/   r0   r1   r2   r   r   ra  r  rc  r  re  r  rg  r  ri  r  rk  rm  ro  rq  rx  rW  rz  rR  r{  rS  rM  rB  rb  rd  rf  rh  rj  rl  rn  rp  rr  rJ  rN  rT  rX  r^  ru  r}  r  r  r  r  r6   r7   r8   s   @r   r>  r>    s    ""1%F!!!$E$$Q'F""1%F!!!$E$$Q'F))+6M((5L++K8MF#L'JF#L'J(-8+|n<:%G!$55##A&G""1%F%%a(G##A&G""1%F%%a(G**;7N))+6M,,[9N@.*.
.),.A-(O&A Ar   r>  c                     a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R  t"R! t#R" t$R# t%R$ t&R% t'R& t(R' t)R( t*R) t+R* t,R+ t-R, t.R- t/R. t0R/ t1R0 t2R1 t3R2 t4R3 t5R4 t6R5 t7R6 t8R7 t9R8 t:R9 t;R: t<R; t=R< t>R= t?R> t@R? tAR@ tBRA tCRB tDRC tERD tFRE tGRF tHRG tIRH tJRI tKRJ tLRK tMRL tNRM tORN tPRO tQRP tRRQtSV tTRR# )SIpaddrUnitTesti:  c                "   \         P                  ! R 4      V n        \         P                  ! R4      V n        \         P
                  ! R4      V n        \         P                  ! R4      V n        \         P                  ! R4      V n	        \         P                  ! R4      V n        \         P                  ! R4      V n        \         P                  ! R4      V n        \         P                  ! R4      V n        \         P                  ! R	4      V n        R
# )ry  
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/64r  N)r   r   ipv4_addressr  ipv4_interfacer  ipv4_networkr  ipv6_addressipv6_interfacer  ipv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkipv6_with_ipv4_partr	   s   &r   setUpIpaddrUnitTest.setUp<  s    %11)<'55lC%11,?%33)+'55,.%112JK#,#:#:/$1 %.%<%<2&4"#,#8#89W#X #,#:#:;#G r   c                    V P                  R \        \        P                  ! R4      4      4       V P                  R\        \        P                  ! R4      4      4       V P                  R\        \        P                  ! R4      4      4       R# )zIPv4Interface('1.2.3.4/32')ry  zIPv6Interface('::1/128')r  zIPv6Interface('::1%scope/128')r  N)r(   rE   r   r  r  r	   s   &r   testReprIpaddrUnitTest.testReprM  sp    6i55i@A	C3i55e<=	?9i55kBC	Er   c                X   \         P                  ! R 4      p\         P                  ! R4      pV P                  \         P                  ! R
4      V4       V P                  \         P                  ! V^ 34      V4       V P                  \         P                  ! R4      V4       V P                  \         P                  ! R4      V4       V P                  \         P                  ! VR34      V4       V P                  \         P                  ! R4      V4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! V^34       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! VR34       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       \         P                  ! R4      pV P                  \         P                  ! RRR7      V4       V P                  \         P                  ! V^3RR7      V4       V P                  \         P                  ! RRR7      V4       V P                  \         P                  ! RRR7      V4       V P                  \         P                  ! VR3RR7      V4       V P                  \         P                  ! RRR7      V4       \         P                  ! R4      p\         P                  ! R4      pV P                  \         P                  ! R4      V4       V P                  \         P                  ! VR34      V4       V P                  \         P                  ! R4      V4       V P                  \         P                  ! R4      V4       V P                  \         P                  ! V^34      V4       V P                  \         P                  ! R4      V4       V P                  \         P                  ! R4      \         P                  ! R	4      4       V P                  \         P                  ! R4      \         P                  ! R	4      4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       R#   + '       g   i     ELM; i  + '       g   i     EL#; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     R# ; i)r  z192.0.2.1/32r  Nr  r  Fstrictr  z192.0.2.1/24)r  r  )      r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  r  )       r  r  )r  r  )r  z255.255.255.255.0)r   r   r  r(   rL   r*  r  r:  )r
   ipr  s   &  r   testIPv4TupleIpaddrUnitTest.testIPv4TupleV  s   "";/##N3../@A3G..Bx8#>../?@#F.. 0C DEH	J..0A0C DEH	J.. 0C DEH	J z**!!"34 +z**!!2r(+ +z**!!"23 +z**!!"@A +z**!!2"78 +z**!!"?@ + ##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**!!"DE + z**  !CD +*k +*****************N +* +**s`   2V.V!,V5(W	$W"W10X,XV	!V2	5W		W	W.	1X	X	X)	c                v	   \         P                  ! R 4      p\         P                  ! R4      pV P                  \         P                  ! R4      V4       V P                  \         P                  ! R4      V4       V P                  \         P                  ! VR34      V4       \         P                  ! R 4      p\         P                  ! R4      pV P                  \         P                  ! R4      V4       V P                  \         P                  ! R4      V4       V P                  \         P                  ! VR34      V4       \         P                  ! R4      p\         P                  ! R4      pV P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! V^`34       RRR4       \         P                  ! R4      pV P                  \         P                  ! RRR	7      V4       V P                  \         P                  ! RRR	7      V4       V P                  \         P                  ! V^`3RR	7      V4       V P                  \         P                  ! R4      \         P                  ! R
4      4       V P                  \         P                  ! R4      \         P                  ! R
4      4       \         P                  ! R4      pV P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! V^`34       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       V P	                  \
        4      ;_uu_ 4        \         P                  ! R4       RRR4       R#   + '       g   i     EL; i  + '       g   i     ELq; i  + '       g   i     ELG; i  + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)r  z2001:db8::/128128z2001:db8::/9696r  2001:db8::1NFr  z2001:db8::1/962001:db8::1%scope)r  r  )	                n      )r  r  )r  `   )r  r  )	               n   r  )r  r  )r  r  )r  r  )r  r  )r   r  r  r(   rL   r*  r  r:  )r
   r  r  	ip_scopeds   &   r   testIPv6TupleIpaddrUnitTest.testIPv6Tuple  s   ""<0##$45../DE	..=?	 	..E{;	""<0##O4../CD	..<>	 	..Dz:	 ))*<=	 ""=1z**!!"56 +z**!! #< = + z**!!2r(+ + ##O4../B6;=	 	..I$)+ 	 	..BxF	 	001FG"001AB	D00>@"001AB	D ))*=>	z**!!";< +z**!!9b/2 +
 z**!!"BC + z**  !AB +*M +***** +**, +****
 +* +**sT   
P1QQQ-RRR'1Q	Q	Q*	-Q>	R	R$	'R8	c                   V P                  \        P                  ! R 4      ^,           \        P                  ! R4      4       V P                  \        P                  ! R 4      R,
          \        P                  ! R4      4       V P                  \        P                  ! R4      R	,           \        P                  ! R4      4       V P                  \        P                  ! R4      R	,
          \        P                  ! R4      4       V P	                  \        P                  ! R4      R	,           \        P                  ! R4      4       V P	                  \        P                  ! R4      R	,
          \        P                  ! R4      4       R# )
r  z1.1.2.0   z1.1.0.1r  z::ffffr  z::ffff%scopeNi  )r(   r   r   r  rC  r	   s   &r   testAddressIntMath!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                   V P                  \        \        P                  R4       V P                  \        \        P                  ^\        P                  ,          4       V P                  \        \        P
                  R4       V P                  \        \        P
                  ^\        P                  ,          4       R# rK   Nrx   )rL   r*  r   v4_int_to_packed
IPV4LENGTHv6_int_to_packed
IPV6LENGTHr	   s   &r   testInvalidIntToBytes$IpaddrUnitTest.testInvalidIntToBytes  s~    *i&@&@"E*i&@&@y333	5*i&@&@"E*i&@&@y333	5r   c           	     T   \         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      pV P                  \        \         P                  ! V.4      4      W3.4       V P                  \        \         P                  ! W.4      4      W3W33.4       V P                  \        \         P                  ! WV.4      4      W3.4       V P                  ^\         P
                  ! ^ ^4      4       V P                  R\        V P                  4      4       R# )z10.10.10.10z10.10.10.11z10.10.10.12zIPv4Network('1.2.3.0/24')N)r   r   r(   list_find_address_range_count_righthand_zero_bitsrE   r  )r
   ip1ip2ip3s   &   r   testInternalsIpaddrUnitTest.testInternals  s    ##M2##M2##M2i;;SEBC*	'i;;SJGH*sj1	3i;;SsOLM*	'iBB1cJK4d4;L;L6MNr   c                   V P                  \        V P                  P                  4      R 4       V P                  \	        V P                  P                  4      R4       V P                  \        V P
                  P                  4      R4       V P                  \	        V P
                  P                  4      R4       V P                  \	        V P
                  P                  4      R4       V P                  \        V P                  P                  4      R4       V P                  \	        V P                  P                  4      R4       V P                  \	        V P                  P                  4      R4       R# )i 1.2.3.0l	           /YE    2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scopeN)r(   intr  network_addressr  r  r  r  r	   s   &r   testGetNetwork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                   V P                  V P                  P                  \        P                  ! R 4      P                  4       \        P
                  ! R4      p\        P
                  ! R4      p\        P
                  ! R4      pV P                  V\        P
                  ! \        VP                  4      4      4       V P                  V\        P
                  ! \        VP                  4      4      4       V P                  V\        P
                  ! \        VP                  4      4      4       RpV P                  V P                  P                  \        P                  ! V4      P                  4       V P                  V P                  P                  \        P                  ! V4      P                  4       V P                  \        P
                  ! V P                  P                  4      P                  ^4       V P                  \        P
                  ! V P                  P                  4      P                  ^4       V P                  \        P
                  ! V P                  P                  4      P                  ^4       R# )r  ry  r  r  	         /YE    N)r(   r  _ipr   r  r:  r  r  rC  r  r  r  r  versionr  r  )r
   ipv4ipv6ipv6_scopedv6_ints   &    r   testIpFromInt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                   \         P                  pV P                  V P                  P                  \         P
                  ! R 4      P                  4       V P                  V! R4      V! R4      4       V P                  V P                  P                  \         P
                  ! R4      P                  4       V P                  V! R4      V! R4      4       V P                  V! R4      V! R4      4       R# )	r  255.254.253.252       X*      ffff:2:3:4:ffff::r   N            s                   )r   r/  r(   r  r  r5  r  r  r   s   & r   testIpFromPackedIpaddrUnitTest.testIpFromPacked,  s    &&,,00"//0CDHH	J!23 !45	7,,//"//899;	= 	!45  "6 7	8 	 .	0r   c                :   V P                  \        V P                  P                  4      R 4       V P                  \	        V P                  P                  4      R4       V P                  \        V P
                  P                  4      R4       V P                  \	        V P
                  P                  4      R4       V P                  \        V P                  P                  4      R4       V P                  \	        V P                  P                  4      R4       R# )r  ry  r  2001:658:22a:cafe:200::1N)r(   r  r  r  r  r  r  r	   s   &r   	testGetIp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                >   R pRpRpW#,           p\         P                  ! V4      p\         P                  ! V4      pV P                  \	        V4      V4       V P                  VP
                  W,           4       V P                  \	        VP                  4      V4       R# )z0000:0000:0000:0000:0000:ffff:::ffff:ry  N)r   r  r  r(   r  explodedr  )r
   long_prefixshort_prefixr  ipv6_ipv4_stripv6_ipv4_addripv6_ipv4_ifaces   &      r   &testIPv6IPv4MappedStringRepresentation5IpaddrUnitTest.testIPv6IPv4MappedStringRepresentationI  s    6 $+"..}=#11-@^,m<00+2DE_//0-@r   c                ,   V P                  V P                  P                  R 4       V P                  \        V P                  P                  4      R4       V P                  V P
                  P                  R 4       V P                  \        V P                  P                  4      R4       V P                  V P                  P                  P                  R 4       V P                  \        V P                  P                  P                  4      R4       R # )Nscope)
r(   r  scope_idr  r  r  r  r  r  r  r	   s   &r   testGetScopeIdIpaddrUnitTest.testGetScopeIdT  s    **33	T55>>? 	",,55	T77@@A 	"**::CC	T55EENNO 	"r   c                   V P                  \        V P                  P                  4      R 4       V P                  \	        V P                  P                  4      R4       V P                  \        V P
                  P                  4      R4       V P                  V P
                  P                  ^@4       V P                  \        V P                  P                  4      R4       V P                  V P                  P                  ^@4       R# )l     r  l	            N)r(   r  r  r  r  r  	prefixlenr  r	   s   &r   testGetNetmaskIpaddrUnitTest.testGetNetmaskb  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                j   \         P                  ! R 4      pV P                  \        VP                  P
                  4      ^ 4       V P                  VP                  R4      ^ 4       \         P                  ! R4      pV P                  \        VP                  P
                  4      ^ 4       V P                  VP                  R4      ^ 4       \         P                  ! R4      pV P                  \        VP                  P
                  4      ^ 4       V P                  VP                  R4      ^ 4       R# )	1.2.3.4/0rM  z::1/0z::1%scope/0N)r   r  r(   r  r9  r  _prefix_from_prefix_stringr  )r
   ipv4_zero_netmaskipv6_zero_netmaskipv6_scoped_zero_netmasks   &   r   testZeroNetmaskIpaddrUnitTest.testZeroNetmaskl  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                j    \         P                  ! R 4      pV P                  VP                  ^4       R# )z127.0.0.0/0.0.0.255N)r   r  r(   r  r
   r  s   & r   testIPv4NetIpaddrUnitTest.testIPv4Nety  s'    ##$9:+r   c                :   V P                  \        V P                  P                  4      R 4       V P                  \	        V P                  P                  4      R4       V P                  \        V P
                  P                  4      R4       V P                  \	        V P
                  P                  4      R4       V P                  \        V P                  P                  4      R4       V P                  \	        V P                  P                  4      R4       R# )i	1.2.3.255l	   /YE    %2001:658:22a:cafe:ffff:ffff:ffff:ffffN)r(   r  r  broadcast_addressr  r  r  r	   s   &r   testGetBroadcast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                &   V P                  V P                  P                  P                  ^4       V P                  V P                  P                  P                  ^@4       V P                  V P
                  P                  P                  ^@4       R# )r  N)r(   r  r9  r  r  r  r	   s   &r   testGetPrefixlenIpaddrUnitTest.testGetPrefixlen  sh    ,,44>>C,,44>>C33;;EErJr   c                   V P                  V P                  P                  4       P                  ^4       V P                  \	        V P                  P                  4       P
                  4      R4       V P                  \        P                  ! R4      P                  P                  4       \        P                  ! R4      4       V P                  V P                  P                  4       P                  ^?4       V P                  \	        V P                  P                  4       P
                  4      R4       V P                  \        P                  ! R4      P                  P                  4       \        P                  ! R4      4       V P                  V P                  P                  4       P                  ^?4       V P                  \	        V P                  P                  4       P
                  4      R4       R# )   z1.2.2.0	0.0.0.0/0r  z::0/0N)r(   r  supernetr  r  r  r   r  r9  r  r  r  r  r  r	   s   &r   testGetSupernetIpaddrUnitTest.testGetSupernet  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                   V P                  V P                  P                  ^4      P                  ^4       V P                  \	        V P                  P                  ^4      P
                  4      R4       V P                  V P                  P                  ^4      P                  ^=4       V P                  \	        V P                  P                  ^4      P
                  4      R4       V P                  V P                  P                  ^4      P                  ^=4       V P                  \	        V P                  P                  ^4      P
                  4      R4       R# )   z1.2.0.0z2001:658:22a:caf8::N)r(   r  r'  r  r  r  r  r  r	   s   &r   testGetSupernet3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                   V P                  \        V P                  P                  ^^R7       V P                  \        V P                  P                  ^R7       V P	                  V P                  P                  ^R7      V P                  P                  ^R7      4       V P                  \        V P
                  P                  ^^R7       V P                  \        V P
                  P                  ^AR7       V P	                  V P
                  P                  ^R7      V P
                  P                  ^>R7      4       V P                  \        V P                  P                  ^^R7       V P                  \        V P                  P                  ^AR7       V P	                  V P                  P                  ^R7      V P                  P                  ^>R7      4       R# )   prefixlen_diff
new_prefixr2  r1  N)rL   r*  r  r'  r(   r  r  r	   s   &r   testGetSupernet4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                   \        V P                  P                  4       4      pV P                  ^\	        V4      4       V P                  \
        P                  ! R4      V^ ,          4       V P                  \
        P                  ! R4      VR,          4       \
        P                  ! R4      p\        VP                  4       4      pV P                  ^\	        V4      4       V P                  \
        P                  ! R4      V^ ,          4       V P                  \
        P                  ! R4      VR,          4       \
        P                  ! R4      p\        VP                  4       4      pV P                  ^\	        V4      4       V P                  \
        P                  ! R4      V^ ,          4       V P                  \
        P                  ! R4      VR,          4       \
        P                  ! R4      \
        P                  ! R4      .pR	pRpV P                  V\        \
        P                  ! V4      P                  4       4      4       V P                  V\        \
        P                  ! V4      P                  4       4      4       V P                  \        \
        P                  ! V4      P                  4       4      \        \
        P                  ! V4      P                  4       4      4       \
        P                  ! R
4      .pRpRpV P                  V\        \
        P                  ! V4      P                  4       4      4       V P                  V\        \
        P                  ! V4      P                  4       4      4       V P                  \        \
        P                  ! V4      P                  4       4      \        \
        P                  ! V4      P                  4       4      4       \
        P                  ! R4      \
        P                  ! R4      .pRpRpV P                  V\        \
        P                  ! V4      P                  4       4      4       V P                  V\        \
        P                  ! V4      P                  4       4      4       V P                  \        \
        P                  ! V4      P                  4       4      \        \
        P                  ! V4      P                  4       4      4       \
        P                  ! R4      .pRpRpV P                  V\        \
        P                  ! V4      P                  4       4      4       V P                  V\        \
        P                  ! V4      P                  4       4      4       V P                  \        \
        P                  ! V4      P                  4       4      \        \
        P                  ! V4      P                  4       4      4       R# )   z1.2.3.1z	1.2.3.2542001:658:22a:cafe::/120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/31ry  r  r  z2001:658:22a:cafe::/1272001:658:22a:cafe::1/128Nrx   )r;     )ry  r  )r     )r:  r  )
r  r  hostsr(   lenr   r   r  r  r:  )r
   r?  r  r  addrsstr_argstpl_argss   &      r   	testHosts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           	        V P                  \        V P                  P                  ^R7      4      \        V P                  P                  ^R7      4      4       V P	                  \
        \        V P                  P                  ^R7      4       V P	                  \
        \        V P                  P                  ^^R7      4       V P                  \        V P                  P                  ^R7      4      \        V P                  P                  ^DR7      4      4       V P	                  \
        \        V P                  P                  ^?R7      4       V P	                  \
        \        V P                  P                  ^^DR7      4       V P                  \        V P                  P                  ^R7      4      \        V P                  P                  ^DR7      4      4       V P	                  \
        \        V P                  P                  ^?R7      4       V P	                  \
        \        V P                  P                  ^^DR7      4       R# )r+  r4  r3  r0  N)	r(   r  r  subnetsrL   r*  r  r  r  r	   s   &r   testFancySubnetting"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                   V P                  \        V P                  P                  4       4      ^ ,          P                  ^4       V P                  \        \        V P                  P                  4       4      ^ ,          P                  4      R4       V P                  \        \        V P                  P                  4       4      ^,          P                  4      R4       V P                  \        V P                  P                  4       4      ^ ,          P                  ^A4       V P                  \        V P                  P                  4       4      ^ ,          P                  ^A4       R# )rj   r  z	1.2.3.128N)	r(   r  r  rG  r  r  r  r  r  r	   s   &r   testGetSubnets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                0   \         P                  ! R 4      pVP                  4        Uu. uF  p\        V4      NK  	  ppVP                  ^4       Uu. uF  p\        V4      NK  	  ppV P	                  VR .4       V P	                  W44       R# u upi u upi )r  N)r   r  rG  r  r(   )r
   r  r]   subnets1subnets2s   &    r   testGetSubnetForSingle32'IpaddrUnitTest.testGetSubnetForSingle32  sx    ""<0$&JJL1LqCFL1$&JJqM2MqCFM2L>2, 22s   BBc                Z   \         P                  ! R 4      pVP                  4        Uu. uF  p\        V4      NK  	  ppVP                  ^4       Uu. uF  p\        V4      NK  	  ppV P	                  VR .4       V P	                  W44       \         P                  ! R4      pVP                  4        Uu. uF  p\        V4      NK  	  ppVP                  ^4       Uu. uF  p\        V4      NK  	  ppV P	                  VR.4       V P	                  W44       R# u upi u upi u upi u upi r  r  N)r   r  rG  r  r(   )r
   r  r]   rN  rO  r  s   &     r   testGetSubnetForSingle128(IpaddrUnitTest.testGetSubnetForSingle128"  s    ""9-$&JJL1LqCFL1$&JJqM2MqCFM2I;/,))/:	$-$5$5$78$7qCF$78$-$5$5a$89$8qCF$89O#45, 22
 99s   DD4D#D(c                6   V P                   P                  ^4       Uu. uF  p\        V4      NK  	  ppV P                  V. RO4       V P                  P                  ^4       Uu. uF  p\        V4      NK  	  ppV P                  V. RO4       R# u upi u upi )r/  N)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  rG  r  r(   r  )r
   r]   ipsipsv6s   &   r   testSubnet2IpaddrUnitTest.testSubnet2/  s    #0088;<;!s1v;<I	K "&!2!2!:!:1!=>!=AQ!=>,	- =
 ?s   B%Bc                2   V P                   P                  ^4       Uu. uF  p\        V4      NK  	  ppV P                  VR,          . RO4       V P                  VRR . RO4       V P                  \	        V4      R4       \
        P                  ! R4      pVP                  ^4       Uu. uF  p\        V4      NK  	  ppV P                  VR,          . RO4       V P                  VRR . R	O4       V P                  \	        V4      R4       R# u upi u upi )
   :Nr+  NNr  r9  )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/32)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  rG  r  r(   r@  r   r  )r
   r]   rG  r  s   &   r   testGetSubnets3IpaddrUnitTest.testGetSubnets3=  s    #'#4#4#<#<Q#?@#?a3q6#?@6	8<	>Ws+ ,,-FG#/#7#7#:;#:a3q6#:;)	* 	*	+ 	Ws+# A <s   D*Dc                   V P                  \        \        V P                  P                  P                  ^	4      4       V P                  \        \        V P                  P                  ^	4      4       V P                  \        \        V P                  P                  P                  ^A4      4       V P                  \        \        V P                  P                  ^A4      4       V P                  \        \        V P                  P                  P                  ^A4      4       V P                  \        \        V P                  P                  ^A4      4       R# )	   NrL   r*  r  r  r9  rG  r  r  r  r  r  r	   s   &r   testSubnetFailsForLargeCidrDiff.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffQ  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                D   V P                  \        V P                  P                  P                  ^4       V P                  \        V P
                  P                  P                  ^A4       V P                  \        V P                  P                  P                  ^A4       R# )   N)rL   r*  r  r9  r'  r  r  r	   s   &r   !testSupernetFailsForLargeCidrDiff0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff_  sz    *--55>>	D*--55>>	D*44<<EEr	Kr   c                   V P                  \        \        V P                  P                  P                  R4      4       V P                  \        \        V P                  P                  R4      4       V P                  \        \        V P                  P                  P                  R4      4       V P                  \        \        V P                  P                  R4      4       V P                  \        \        V P                  P                  P                  R4      4       V P                  \        \        V P                  P                  R4      4       R# r  rc  r	   s   &r   "testSubnetFailsForNegativeCidrDiff1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffg  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                   V P                  V P                  P                  R 4       V P                  \        V P                  P	                  4       4      ^ ,          P                  ^4       V P                  V P                  P                  4       P                  R4       V P                  V P                  P                  R4       V P                  \        V P                  P	                  4       4      ^ ,          P                  R4       V P                  V P                  P                  4       P                  R4       V P                  V P                  P                  R4       V P                  \        V P                  P	                  4       4      ^ ,          P                  R4       V P                  V P                  P                  4       P                  R4       R# )r  i               l            l             N)r(   r  num_addressesr  rG  r'  r  r  r	   s   &r   testGetNum_Addresses#IpaddrUnitTest.testGetNum_Addressesu  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                   V P                  \        P                  ! R 4      V P                  4       V P	                  \        P                  ! R4      V P                  4       \        P
                  ! R4      pV P                  WP                  4       V P                  \        P                  ! R4      P                  \        P                  ! R4      4      4       R# )z1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15N)	ry  r   r  r  r|  r   r  r  __contains__)r
   addr1s   & r   testContainsIpaddrUnitTest.testContains  s    i--n=''	)00>**	, %%j1e../ 	..|<II%%l35 	6r   c                   V P                  \        V P                  ^,          4      R4       V P                  \        V P                  P
                  R4       V P                  \        V P                  ^,          4      R4       V P                  \        V P                  P
                  R4       V P                  \        V P                  ^,          4      R4       V P                  \        V P                  P
                  R4       R# )   1.2.3.5r  z2001:658:22a:cafe::5Nrn  )r(   r  r  rL   
IndexError__getitem__r  r  r	   s   &r   testNthIpaddrUnitTest.testNth  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                   \         P                  ! R 4      pV P                  ^VP                  4       \	        V4      pV P                  R\        V^ ,          4      4       V P                  R\        V^ ,          4      4       V P                  R\        VR,          4      4       V P                  R\        VR,          4      4       V P                  VR,          VR,          4       R# )z172.31.255.128/255.255.255.240z172.31.255.128z172.31.255.143Nrx   )r   r  r(   r  r  r  )r
   r\   	addr_lists   &  r   testGetitemIpaddrUnitTest.testGetitem  s    $$%EFT^^,J	)3y|+<=)3tAw<8)3y}+=>)3tBx=92R1r   c                6   V P                  V P                  \        P                  ! R 4      8H  4       V P	                  V P                  \        P                  ! R4      8H  4       V P	                  V P                  \        P
                  ! R4      8H  4       V P	                  V P                  \        P
                  ! R4      8H  4       V P	                  V P                  R8H  4       V P	                  V P                  . 8H  4       V P	                  V P                  ^8H  4       V P                  V P                  \        P
                  ! R4      8H  4       V P	                  V P                  \        P
                  ! R4      8H  4       V P	                  V P                  \        P                  ! R4      8H  4       V P	                  V P                  R8H  4       V P	                  V P                  . 8H  4       V P	                  V P                  ^8H  4       V P                  V P                  \        P
                  ! R4      8H  4       V P                  V P                  \        P
                  ! R4      8H  4       V P	                  V P                  \        P
                  ! R	4      8H  4       V P	                  V P                  \        P
                  ! R4      8H  4       V P	                  V P                  \        P
                  ! R4      8H  4       V P	                  V P                  \        P                  ! R4      8H  4       V P	                  V P                  R8H  4       V P	                  V P                  . 8H  4       V P	                  V P                  ^8H  4       R
# )r  
1.2.3.4/23::1.2.3.4/24::1.2.3.4%scope/24r>   2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64z'0000:0000:0000:0000:0000:0000:0102:0304!2001:658:22a:cafe:200::1%scope/63N)	r   r  r   r  r  r  r  r  r  r	   s   &r   	testEqual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00##$MNO 	P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                
   V P                  V P                  \        P                  ! R 4      8g  4       V P	                  V P                  \        P                  ! R4      8g  4       V P	                  V P                  \        P
                  ! R4      8g  4       V P	                  V P                  \        P
                  ! R4      8g  4       V P	                  V P                  R8g  4       V P	                  V P                  . 8g  4       V P	                  V P                  ^8g  4       V P	                  V P                  \        P                  ! R4      8g  4       V P	                  V P                  R8g  4       V P	                  V P                  . 8g  4       V P	                  V P                  ^8g  4       V P                  V P                  \        P
                  ! R4      8g  4       V P	                  V P                  \        P
                  ! R4      8g  4       V P	                  V P                  \        P                  ! R4      8g  4       V P	                  V P                  R8g  4       V P	                  V P                  . 8g  4       V P	                  V P                  ^8g  4       V P	                  V P                  \        P                  ! R4      8g  4       V P	                  V P                  R8g  4       V P	                  V P                  . 8g  4       V P	                  V P                  ^8g  4       V P                  V P                  \        P
                  ! R	4      8g  4       V P	                  V P                  \        P
                  ! R
4      8g  4       V P	                  V P                  \        P
                  ! R4      8g  4       V P	                  V P                  \        P
                  ! R4      8g  4       V P	                  V P                  \        P                  ! R4      8g  4       V P	                  V P                  R8g  4       V P	                  V P                  . 8g  4       V P	                  V P                  ^8g  4       V P	                  V P                  \        P                  ! R4      8g  4       V P	                  V P                  R8g  4       V P	                  V P                  . 8g  4       V P	                  V P                  ^8g  4       R# )r  r  r  r  r>   ry  r  r  ry  r  r  N)r  r  r   r  r   r  r  r   r  r  r  r  r	   s   &r   testNotEqual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                d    V P                  \        \        P                  ! R 4      4      R4       R# )z1.2.3.4/255.255.255.255r  Nr(   r  r   r  r	   s   &r   testSlash32Constructor%IpaddrUnitTest.testSlash32Constructor  s*    Y44-/ 01=	?r   c                    V P                  \        \        P                  ! R 4      4      R 4       V P                  \        \        P                  ! R4      4      R4       R# rS  )r(   r  r   r  r	   s   &r   testSlash128Constructor&IpaddrUnitTest.testSlash128Constructor  sH    Y44Y?@"+	-Y44_EF"1	3r   c                d    V P                  \        \        P                  ! R 4      4      R4       R# )z1.2.3.4/0.0.0.0r  Nr  r	   s   &r   testSlash0Constructor$IpaddrUnitTest.testSlash0Constructor  s&    Y445FGH%	'r   c                N   \         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R 4      p\         P                  ! WW4WV.4      pV P                  \	        V4      \         P
                  ! R4      \         P
                  ! R4      .4       \         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! WW4.4      pV P                  \	        V4      \         P
                  ! R4      .4       \         P
                  ! R4      p\         P
                  ! R4      p\         P
                  ! R	4      p\         P
                  ! R
4      p\         P
                  ! R4      p\         P
                  ! R4      p\         P                  ! WW4VV.4      pV P                  \	        V4      \         P
                  ! R4      \         P
                  ! R4      .4       \         P                  ! W.4      pV P                  \	        V4      \         P
                  ! R4      .4       \         P
                  ! R4      ;rV P                  \	        \         P                  ! W.4      4      V.4       \         P                  ! R4      ;rV P                  \	        \         P                  ! W.4      4      \         P                  ! R4      .4       \         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! WV.4      pV P                  \	        V4      V.4       \         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! WV.4      pV P                  \	        V4      V.4       \         P                  ! R4      \         P                  ! R4      3\         P
                  ! R4      \         P                  ! R4      3\         P
                  ! R4      \         P                  ! R4      3.p
V
 F+  w  rV P                  \        \         P                  W.4       K-  	  \         P                  ! R4      \         P                  ! R4      3\         P
                  ! R4      \         P                  ! R4      3\         P
                  ! R4      \         P                  ! R4      3.p
V
 F+  w  rV P                  \        \         P                  W.4       K-  	  R# )1.1.1.0r  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/128N)r   r   collapse_addressesr(   r  r  r:  r  r/  rL   rM   )r
   r  r  r  ip4ip5ip6	collapsedip_same1ip_same2addr_tupless   &          r   testCollapsingIpaddrUnitTest.testCollapsing  s   ##I.##I.##I.##I.##I.##I.00s*,	i&&|4&&|46	7
 ##I.##I.##I.##I. 00#C1EF	i#//=>	@ ##L1##L1##L1##L1##L1 ##L100#Cc582: ;	i#//=#//=?	@
 00#<	i#//=>	@ (33LAAi::(* +"	%
 (33I>>i::(* +#..|<=	? ##L1##L1##K000#CA	i3%0##$67##$67##$5600#CA	i3%0 %%i0%%e,.&&|4&&|46&&|4&&|46
 $HCi)E)E"j* $
 %%i0%%k24&&|4&&'9:<&&|4&&'9:<
 $HCi)E)E"j* $r   c           
     	   \         P                  p\         P                  ! R 4      p\         P                  ! R4      p ! R R\         P                  4      pV! R4      pV! R4      pV P	                  \
        \        V! WV4      4       V P	                  \        \        V! V\         P                  ! R4      4      4       V P	                  \        \        V! V\         P                  ! R4      4      4       V P                  \        V! W#4      4      ^ ,          \         P                  ! R4      4       \         P                  ! R4      pV P                  \        V! W#4      4      \         P                  ! R4      \         P                  ! R4      .4       \         P                  ! ^ 4      p\         P                  ! \         P                  P                  4      pV P                  \         P                  ! R	4      .\        V! W#4      4      4       \         P                  ! R
4      p\         P                  ! R4      pV P                  \        V! W#4      4      ^ ,          \         P                  ! R4      4       \         P                  ! R4      pV P                  \        V! W#4      4      \         P                  ! R4      \         P                  ! R4      .4       \         P                  ! R4      p\         P                  ! R4      pV P                  \        V! W#4      4      ^ ,          \         P                  ! R4      4       \         P                  ! R4      pV P                  \        V! W#4      4      \         P                  ! R4      \         P                  ! R4      .4       V P	                  \
        \        V! \         P                  ! R 4      \         P                  ! R4      4      4       V P	                  \        \        V! \         P                  ! R 4      \         P                  ! R4      4      4       V P	                  \        \        V! \         P                  ! R 4      \         P                  ! R4      4      4       V P	                  \        \        V! \         P                  ! R4      \         P                  ! R4      4      4       R# )r  z	1.1.1.255c                   0   a  ] tR tRt o ]R 4       tRtV tR# )3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addressi  c                    ^# )   r.   r	   s   &r   r  ;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.version  s    r   r.   N)r/   r0   r1   r2   r3   r  r6   r7   r8   s   @r   IPv7Addressr    s      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.0r   N)r   summarize_address_ranger/  r  rL   r*  r  rM   r(   r:  r   	_ALL_ONESr  )r
   	summarizer  r  r  ip_invalid1ip_invalid2s   &      r   testSummarizingIpaddrUnitTest.testSummarizingw  s    55	""9-"";/	)// 	 "%(!%(*d#K=	? 	)T#C)>)>u)EF	H)T#C)>)>{)KL	N 	i1215"--l;	= ""9-i12#..|<#..y9;	< ##A&##I$9$9$C$CD)//<=i12	4 ""5)""#IJi1215"--h7	9 ""5)i12#..x8#..y9;	< "";/""#OPi1215"--h7	9 "";/i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                   V P                  \        P                  ! R 4      \        P                  ! R 4      8*  4       V P                  \        P                  ! R 4      \        P                  ! R4      8*  4       V P                  \        P                  ! R4      \        P                  ! R4      8*  4       V P                  \        P                  ! R4      \        P                  ! R4      8*  4       V P                  \        P                  ! R4      \        P                  ! R4      8*  4       V P                  \        P                  ! R4      \        P                  ! R4      8*  4       R# )r  r  r  ::2r  r?  N)r   r   r/  r	   s   &r   testAddressComparison$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                n   V P                  \        P                  ! R 4      \        P                  ! R 4      8H  4       V P                  \        P                  ! R4      \        P                  ! R 4      8  4       V P                  \        P                  ! R 4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R 4      8  4       V P                  \        P                  ! R 4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R 4      8  4       V P                  \        P                  ! R 4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8H  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8H  4       V P                  \        P                  ! R4      \        P                  ! R	4      8  4       V P                  \        P                  ! R4      \        P                  ! R
4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R	4      \        P                  ! R4      8  4       V P                  \        P                  ! R
4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8H  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R	4      \        P                  ! R4      8  4       V P                  \        P                  ! R
4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8H  4       V P                  \        P                  ! R4      \        P                  ! R	4      8  4       V P                  \        P                  ! R4      \        P                  ! R
4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       V P                  \        P                  ! R4      \        P                  ! R4      8  4       R# )z
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/48N)r   r   r5  r  r	   s   &r   testInterfaceComparison&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                   \         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      pV P                  W8  4       V P                  W28  4       V P                  VP	                  V4      ^ 4       V P                  VP	                  V4      R4       V P                  VP	                  V4      ^4       V P                  VP	                  V4      R4       V P                  VP	                  V4      ^4       V P                  VP                  4       VP                  4       8  4       \         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      pV P                  W8  4       V P                  W28  4       V P                  VP	                  V4      R4       V P                  VP                  4       VP                  4       8  4       V P                  \        V P                  P                  V P                  4       \         P                  ! R4      p\         P                  ! R4      pV P                  \        VP                  V4       V P                  \        VP                  V4       V P                  \        VP                  V4       V P                  \        VP                  V4       \         P                  ! R4      pV P!                  W8  4       V P!                  W8  4       \         P                  ! R	4      pV P                  W8  4       V P!                  W!8  4       V P!                  W8  4       V P                  W!8  4       \         P                  ! R
4      pV P                  W#8  4       V P!                  W28  4       V P!                  W#8  4       V P                  W28  4       \         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      pWW6.pW&W.pVP#                  4        V P                  Wx4       WaW2.pVP#                  4        V P                  Wx4       V P%                  VP                  \         P&                  ! R4      4      \(        4       V P%                  VP                  \         P&                  ! R4      4      \(        4       V P                  \         P                  ! R4      \         P                  ! R4      8*  4       V P                  \         P                  ! R4      \         P                  ! R4      8*  4       V P!                  \         P                  ! R4      \         P                  ! R4      8*  4       V P                  \         P                  ! R4      \         P                  ! R4      8*  4       V P                  \         P                  ! R4      \         P                  ! R4      8*  4       V P!                  \         P                  ! R4      \         P                  ! R4      8*  4       R# )r  z
1.1.1.0/32r  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.2r  r  r  r  Nrx   )r   r  r   r(   compare_networks_get_networks_keyr  rL   rM   r  r  r  r  r  r  r:  r  sortassertIsr/  rE  )	r
   r  r  r  r  r  r  r  unsorteds	   &        r   testNetworkComparison$IpaddrUnitTest.testNetworkComparison  s   ##L1##L1##L1	"	"--c2A6 	--c2B7--c2A6--c2B7--c2A6--/#2G2G2IIJ##$45##$45##$9:	"	"--c2B7--/#2G2G2IIJ 	)++<<++	- &&v.&&{3)T[[$7)T[[$7)T[[$7)T[[$7 ""?3##""=1	"##	"""=1	"##	" ""?3""<0""?3""<0C%c'*c'*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                    V P                  \        \        P                  R 4       V P                  \        \        P                  R4       V P                  \        \        P                  R4       R# )z192.168.1.1/24z::1/120z::1%scope/120N)rL   r*  r   r:  r	   s   &r   testStrictNetworks!IpaddrUnitTest.testStrictNetworksr  sK    *i&:&:<LM*i&:&:IF*i&:&:OLr   c                r   \         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      pV P                  V P                  P	                  V4      4       V P                  V P                  P	                  V4      4       V P                  VP	                  V4      4       R# )z
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26N)r   r  r   r  overlapsr  )r
   rH  other2other3s   &   r   testOverlapsIpaddrUnitTest.testOverlapsw  s    %%l3&&|4&&}5))2259:**33F;</0r   c                   R p\         P                  ! V4      p\         P                  ! RV,          4      pV P                  \	        VP
                  4      \	        VP
                  4      4       \         P                  ! RV,          4      pV P                  VP
                  VP
                  4       V P                  \         P                  \         P                  R4       R# )rm   z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1N)	r   r  r  r(   r  r  rC  rL   r   )r
   ipv4_stringr  v4compat_ipv6v4mapped_ipv6s   &    r   testEmbeddedIpv4IpaddrUnitTest.testEmbeddedIpv4  s    #&&{3!//0DE]--.DGG=!//k0IJM,,dgg6)55y7N7N0	2r   c                v   V P                  \        P                  ! R 4      \        P                  ! R4      4       V P                  \        P                  ! R4      \        P                  ! R4      4       V P                  \        P                  ! R4      \        P                  ! R4      4       V P                  \        P                  ! R4      \        P                  ! R4      4       V P                  \        P                  ! R4      \        P                  ! R	4      4       V P                  \        P                  ! R
4      \        P                  ! R4      4       V P                  \        P                  ! R4      \        P                  ! R4      4       V P                  \        P                  ! R
4      \        P                  ! R4      4       V P                  \        P                  ! R 4      \        P                  ! R	4      4       V P                  \        P                  ! R4      \        P                  ! R4      4       V P                  \        P                  ! R4      \        P                  ! R4      4       V P                  \        P                  ! R4      \        P                  ! R4      4       R# )z::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z-0000:0000:0000:0000:0000:FFFF:192.168.255.255z::ffff:c0a8:ffffz-FFFF:0000:0000:0000:0000:0000:192.168.255.255zffff::c0a8:ffffz::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scopez30000:0000:0000:0000:0000:FFFF:192.168.255.255%scopez::ffff:c0a8:ffff%scopez3FFFF:0000:0000:0000:0000:0000:192.168.255.255%scopezffff::c0a8:ffff%scopeN)r(   r   r/  rC  r	   s   &r   testIPv6AddressTooLarge&IpaddrUnitTest.testIPv6AddressTooLarge  s   --.@A#../@A	C 	--.?@#../?@	B 	--.]^#../AB	D--.]^#../@A	C 	--.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--.cd#../GH	J--.cd#../FG	Ir   c                   V P                  \        P                  P                  ^4       V P                  \        P                  P                  ^4       V P                  V P
                  P                  ^4       V P                  V P                  P                  ^4       V P                  V P                  P                  ^4       V P                  V P                  P                  ^4       R# )   N)	r(   r   r   r  r  r  r  r  r  r	   s   &r   testIPVersionIpaddrUnitTest.testIPVersion  s    ..66:..66:**22A6**22A611991=11991=r   c                   V P                  \        P                  P                  ^ 4       V P                  \        P                  P                  ^4       V P                  V P
                  P                  ^ 4       V P                  V P                  P                  ^4       V P                  V P                  P                  ^4       R# )r  N)r(   r   r   max_prefixlenr  r  r  r  r	   s   &r   testMaxPrefixLength"IpaddrUnitTest.testMaxPrefixLength  s    ..<<bA..<<cB,,::B?,,::C@33AA3Gr   c                   V P                  V P                  P                  R 4       V P                  \        P                  ! R4      P                  R4       V P                  V P
                  P                  R4       V P                  \        P                  ! R4      P                  R	4       V P                  \        P                  ! R4      P                  R
4       V P                  V P                  P                  R4       V P                  \        P                  ! R4      P                  R	4       V P                  \        P                  ! R4      P                  R
4       R# )r  r  r  r  r  z::1:0:0:0:0zffff:2:3:4:ffff::%scopez::1:0:0:0:0%scopeNr  s                  )r(   r  packedr   r  r  r  r  r	   s   &r   
testPacked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                   \         P                  ! R 4      p\         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      pV P                  \         P                  \        V4      4       V P                  \         P                  \        V4      4       V P                  \         P                  \        V4      4       V P                  \         P                  \        V4      4       R# )ry  r  N)	r   r:  r/  r(   r  r  r   r  r  )r
   ipv4netipv4addripv6netipv6addrs   &    r   
testIpTypeIpaddrUnitTest.testIpType  s    &&y1''	2&&{3''4..W>..X?..W>..X?r   c                   V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P
                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P
                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R	4      P                  4       V P                  R \        P                  ! R
4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P
                  4       V P                  R\        P                  ! R4      P
                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R	4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  R \        P                  ! R 4      P                  4       V P                  R \        P                  ! R!4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       R"# )#Tz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/24rk   z	224.1.1.1z	240.0.0.1z239.255.255.255r  z	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.0N)r(   r   r5  is_multicastr:  is_reserved
is_privateis_link_localis_loopback	is_globalr/  is_unspecifiedr  r   r	   s   &r   testReservedIpv4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                
   V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R	4      P                  4       V P                  R \        P                  ! R
4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       R# ) Fr&  z	1.0.0.0/8Tz	0.0.0.0/8
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/31r  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::/10N)r(   r   r:  r  r	   s   &r   testPrivateNetworks"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                b   V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! ^^,          ^,
          4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P
                  4       V P                  R \        P                  ! R	4      P
                  4       V P                  R\        P                  ! R
4      P
                  4       V P                  R\        P                  ! R4      P
                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P
                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! ^^,          ^,
          4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P
                  4       V P                  R \        P                  ! R	4      P
                  4       V P                  R\        P                  ! R
4      P
                  4       V P                  R\        P                  ! R4      P
                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R4      P                  4       V P                  \        P                  ! R 4      P                  4       V P                  \        P                  ! R!4      P                  4       V P                  \        P                  ! R"4      P                  4       V P                  \        P                  ! R#4      P                  4       V P                  \        P                  ! R$4      P                  4       V P                  \        P                  ! R%4      P                  4       V P                  \        P                  ! R&4      P                  4       V P                  R \        P                  ! R'4      P                  4       V P                  R \        P                  ! R(4      P                  4       R)# )*Tzffff::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/127r   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3fff::z100::z4000::1/128N)r(   r   r:  r  is_site_localr  r  r5  r  r  r  r/  r  r   r  r	   s   &r   testReservedIpv6IpaddrUnitTest.testReservedIpv6H	  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--h7AAB 	y33G<HHIy33MBNNOr   c                v   V P                  \        P                  ! R 4      P                  \        P                  ! R4      4       V P                  \        P                  ! R4      P                  R4       V P                  \        P                  ! R4      P                  \        P                  ! R4      4       R# )r  r  z
::c0a8:101Nr  )r(   r   r/  r  r	   s   &r   testIpv4MappedIpaddrUnitTest.testIpv4Mapped	  s    $$%9:FF$$]3	5 	--l;GGN--.?@LL"--m<	>r   c                   R EF_  pV P                  V4      ;_uu_ 4        \        P                  ! V4      p\        P                  ! RV 24      pV P	                  VP
                  VP
                  4       V P	                  VP                  VP                  4       V P	                  VP                  VP                  4       V P	                  VP                  VP                  4       V P	                  VP                  VP                  4       V P	                  VP                  VP                  4       V P	                  VP                  VP                  4       RRR4       EKb  	  R#   + '       g   i     EKx  ; i)178.62.3.251r  N)r  z169.254.169.254	127.0.0.1z	224.0.0.1rm   rk   z
100.64.0.1)rY   r   r   r  r(   r  r  r  r  r  r  r  )r
   addr4r  r  s   &   r   testIpv4MappedProperties'IpaddrUnitTest.testIpv4MappedProperties	  s   
E e$$ ,,U3 ,,wug->?  @  $//B  !1!143C3CD  !2!2D4E4EF  !4!4d6I6IJ  !3!3T5G5GH  !1!143C3CD %$
 %$$s   D:E))E;c                    V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       R# )Tr  Fz::ffff:172.32.0.0N)r(   r   r/  r  r	   s   &r   testIpv4MappedPrivateCheck)IpaddrUnitTest.testIpv4MappedPrivateCheck	  sN    i**+?@KK	My++,?@KK	Mr   c                F   V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R \        P                  ! R4      P                  4       V P                  R\        P                  ! R4      P                  4       R# )Tz::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.0N)r(   r   r:  r  r/  r	   s   &r   testIpv4MappedLoopbackCheck*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                   \         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      pV P                  \	        \        VP                  V4      4      4      \         P                  ! R4      \         P                  ! R4      .4       V P                  \        \
        VP                  V4      4       V P                  \        \
        VP                  V4      4       V P                  \        \
        VP                  V4      4       V P                  \        VP                  V4      4      . 4       V P                  \	        \        VP                  V4      4      4      \         P                  ! R4      \         P                  ! R	4      \         P                  ! R
4      \         P                  ! R4      \         P                  ! R4      \         P                  ! R4      \         P                  ! R4      \         P                  ! R4      .4       R# )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/27N)
r   r:  r/  r(   r  r  address_excluderL   r*  rM   r
   rt  addr2addr3r  addr5addr6s   &      r   testAddrExclude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                   V P                  \        \        P                  ! R 4      4      \        \        P                  ! R 4      4      4       V P                  \        \        P                  ! R 4      4      \        \        P                  ! R 4      4      4       V P                  \        \        P
                  ! R4      4      \        \        P
                  ! R4      4      4       V P                  \        \        P
                  ! R4      4      \        \        P
                  ! \        \        P
                  ! R4      P                  4      4      4      4       \        P
                  ! R4      p\        P
                  ! R4      p/ pRW0P                  &   RW0P                  &   RW1&   RW2&   V P                  V P                  V4       V P                  W#4       R# )r  r  ry  r  N)r(   hashr   r5  r:  r/  r  r  r  r  ry  )r
   r  r  dummys   &   r   testHashIpaddrUnitTest.testHash	  s`   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''/c!r   c                    V P                   pV P                  R VP                  4       V P                  pV P	                  \
        VP                  ^^,          ^,           4       R# )r  N)r  r(   
compressedr  rL   r*  _string_from_ip_intr  s   & r   testIPBasesIpaddrUnitTest.testIPBases
  sL    s~~6*c&=&=q#vzJr   c                    V P                   pV P                  R VP                  4       V P                  RVP                  4       V P                  RVP                  4       V P                  R \        V4      4       R# )r  z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffffN)r  r(   with_prefixlenwith_netmaskwith_hostmaskr  r  s   & r   testIPv6NetworkHelpers%IpaddrUnitTest.testIPv6NetworkHelpers
  sm    133E3EFD))	+D**	,13s8<r   c                    V P                   pV P                  R VP                  4       V P                  RVP                  4       V P                  RVP                  4       V P                  R \        V4      4       R# )r  z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255N)r  r(   r$  r%  r&  r  r  s   & r   testIPv4NetworkHelpers%IpaddrUnitTest.testIPv4NetworkHelpers
  se    s'9'9:0#2B2BC,c.?.?@s3x0r   c                   \         P                  ! R 4      p\         P                  ! V4      p\         P                  ! R4      p\         P                  ! V4      p\         P                  ! R4      p\         P                  ! R4      pV P                  W4       V P                  W44       V P                  V\         P                  ! V4      4       V P                  V\         P                  ! V4      4       R# )r  r  r  r  N)r   r:  r5  r   r  r(   r  s   &      r   testCopyConstructor"IpaddrUnitTest.testCopyConstructor
  s    $$]3$$U+&&'DE&&u-%%i0%%&@A&&	 5 5e <=	 5 5e <=r   c           	     &   / R RbRRbRRbRRbRR	bR
RbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbR R!bR"R#R$R%R&R'R(R)/Cp\        VP                  4       4       F4  w  r#V P                  V\        \        P
                  ! V4      4      4       K6  	  R*# )+z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:0r  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/66rW  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/128z-0000:0000:0000:0000:0000:0000:255.255.255.255z::ffff:ffff/128z-0000:0000:0000:0000:0000:ffff:255.255.255.255z::ffff:255.255.255.255/128z-ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255z+ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128N)r  itemsr(   r  r   r  )r
   test_addressesuncompressedr  s   &   r   testCompressIPv6Address&IpaddrUnitTest.testCompressIPv6Address+
  sB   4 "5 !"7 !":	
 !"3 !"6 !"4 1 x   y 9$  %&B  4!" 4#$ 4%& 4;=N;=Y;=/2 )-^-A-A-C(D$LZY-D-D. *   )Er   c                   \         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      p\         P                  ! R4      pV P                  RVP                  4       V P                  R\         P                  ! R4      P                  4       V P                  RVP                  4       V P                  RVP                  4       V P                  RVP                  4       R	# )
z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/96N)r   r  r  r  r   r(   r  )r
   rt  r  r  r  s   &    r   testExplodeShortHandIpStr(IpaddrUnitTest.testExplodeShortHandIpStrI
  s    ''	2%%&GH%%k2%%o6F	)F"00;DD	F 	B	)E	)%..9r   c                   R F[  w  rV P                  RVR7      ;_uu_ 4        \        P                  ! V4      pV P                  VP                  V4       RRR4       K]  	  R F[  w  rBV P                  RVR7      ;_uu_ 4        \        P
                  ! V4      pV P                  VP                  V4       RRR4       K]  	  R#   + '       g   i     K  ; i  + '       g   i     K  ; i)r  ipv4_reverse_pointer)r\   Nipv6_reverse_pointer))r  z1.0.0.127.in-addr.arpa)z	10.2.0.52z52.0.2.10.in-addr.arpa))r  zH1.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)z::FFFF:192.168.1.35zH3.2.1.0.8.a.0.c.f.f.f.f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa)z4321:0:1:2:3:4:567:89abzHb.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ip6.arpa)rY   r   r   r(   reverse_pointerr  )r
   addr_v4expectedr\   addr_v6s   &    r   testReversePointer!IpaddrUnitTest.testReversePointerY
  s    "
G
 47CC ,,W5  !5!5x@ DC"
"
G0 47CC ,,W5  !5!5x@ DC1"
	 DCC8 DCCs   3C3CCC*c                    V P                  R \        V P                  4      4       V P                  R\        V P                  4      4       R# )r  r  N)r(   r  r  r  r	   s   &r   testIntRepresentation$IpaddrUnitTest.testIntRepresentation
  s<    3t'8'8#9:?T../	1r   c                    V P                  \        P                  ! ^4      P                  ^4       V P                  \        P                  ! ^4      P                  ^4       R# rJ   )r(   r   r:  r  r  r	   s   &r   testForceVersionIpaddrUnitTest.testForceVersion
  sD    --a088!<..q1991=r   c                   V P                  V P                  P                  R 4       V P                  V P                  P                  R4       V P                  V P                  P                  R4       V P                  V P
                  P                  R4       V P                  V P
                  P                  R4       V P                  V P
                  P                  R4       R# )r  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:ffffN)r(   r  r$  r%  r&  r  r	   s   &r   testWithStarIpaddrUnitTest.testWithStar
  s    ,,;;\J,,990	2,,::,	. 	,,;;6	8,,99I	K 	,,::I	Kr   c                   V P                  R V P                  P                  4       V P                  RV P                  P                  4       V P                  V P                  P                  \
        P                  ! R4      4       V P                  V P                  P                  \
        P                  ! R4      4       V P                  R V P                  P                  4       V P                  RV P                  P                  4       V P                  R V P                  P                  4       V P                  RV P                  P                  4       V P                  V P                  P                  \
        P                  ! R4      4       V P                  V P                  P                  P                  \
        P                  ! R4      4       V P                  V P                  P                  \
        P                  ! R4      4       V P                  V P                  P                  \
        P                  ! R4      4       V P                  V P                  P                  P                  \
        P                  ! R4      4       V P                  V P                  P                  P                  \
        P                  ! R4      4       V P                  R V P                  P                  4       V P                  RV P                  P                  4       V P                  R V P                  P                  P                  4       V P                  RV P                  P                  P                  4       R# )r  r  r  z	0.0.0.255r  r  r  N)r|  r  __dict__r(   r  r   r   r  ry  r  r  r  r  r9  r	   s   &r   testNetworkElementCaching(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                @   \         P                  ! R 4      p\         P                  ! R4      pRpV P                  W3\         P                  ! V4      P                  4       RpV P                  \         P                  ! V4      P                  4       RpV P                  \         P                  ! V4      P                  4       \         P                  ! R4      pV P                  \         P                  ! R4      \         P                  ! R4      3VP                  4       R# )	z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:fdd2r6  z94.245.121.253z95.26.244.94N)r   r   r(   r/  teredor  r  )r
   serverclientteredo_addrbad_addrs   &    r   
testTeredoIpaddrUnitTest.testTeredo
  s    &&7&&|4?&)"--k:AA	C8--h7>>?<--h7>>?  ++,MN)//0@A#//?A$++	-r   c                    \         P                  ! R 4      p\         P                  ! R4      pV P                  \         P                  ! R4      VP                  4       V P                  VP                  4       R# )z2002:ac1d:2d64::1z2000:ac1d:2d64::1z172.29.45.100N)r   r/  r(   r   	sixtofourr  )r
   sixtofouraddrrT  s   &  r   testsixtofourIpaddrUnitTest.testsixtofour
  s\    !,,-@A''(;<..?&00	2++,r   c                    \         P                  ! R 4      p\         P                  ! R4      pV P                  VP                  4       VP                  4       4       R# )ry  z2.3.4.5N)r   r  rC  __hash__)r
   ipv4_address1ipv4_address2s   &  r   testV4HashIsNotConstant&IpaddrUnitTest.testV4HashIsNotConstant
  sD    !//	:!//	:M224m6L6L6NOr   c                    \         P                  ! R 4      p\         P                  ! R4      pV P                  VP                  4       VP                  4       4       R# )r  z2001:658:22a:cafe:200:0:0:2N)r   r  rC  r]  )r
   ipv6_address1ipv6_address2s   &  r   testV6HashIsNotConstant&IpaddrUnitTest.testV6HashIsNotConstant
  sF    !//0MN!//0MNM224m6L6L6NOr   c                
   V P                  \        P                  ! R 4      P                  4       \        P                  ! R4      P                  4       4       V P                  \        P                  ! R4      P                  4       \        P                  ! R4      P                  4       4       V P                  \        P                  ! R4      P                  4       \        P                  ! R4      P                  4       4       R# )z192.168.1.255/32z192.168.1.0/24z172.24.255.0/24z172.24.0.0/16z192.168.1.87/32z192.168.1.86/31N)rC  r   r  r]  r	   s   &r   testNetworkV4HashCollisions*IpaddrUnitTest.testNetworkV4HashCollisions
  s    !!"45>>@!!"23<<>	
 	!!"34==?!!/2;;=	
 	!!"34==?!!"34==?	
r   c                ^   V P                  \        P                  ! R 4      P                  4       \        P                  ! R4      P                  4       4       V P                  \        P                  ! R4      P                  4       \        P                  ! R4      P                  4       4       R# )z	fe80::/64zfe80::ffff:ffff:ffff:0/112r  z'ffff:ffff:ffff:ffff:ffff:ffff:aff:0/112N)rC  r   r  r]  r  r	   s   &r   testNetworkV6HashCollisions*IpaddrUnitTest.testNetworkV6HashCollisions
  s~    !!+.779!!">?HHJ	
 	!!,/88:!!9hj		
r   )
r  r  r  r  r  r  r  r  r  r  N)Ur/   r0   r1   r2   r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r"  r(  r,  r5  rD  rH  rK  rP  rT  rZ  r_  rd  rh  rk  rp  ru  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-  r3  r7  r@  rC  rF  rI  rM  rU  rZ  r`  re  rh  rk  r6   r7   r8   s   @r   r  r  :  s    H"EDEN@CF@5O2"00 5	A"AV,BK
0"
0K*4GlK.
T---,(@K@/"6	U	2%:N57n?3'`*DGFR;K@ZU6nM
12I<>HB,@KOZ MD[Pz>E0M1 B0"*K=1> <: $AL1
>K (HT-$-PP


 

r   r  __main__)r  r  unittestrC   r4   rN   rW   r   r  test.supportr   r   TestCaser   r;   rb   r   r   r"  r  r  r  r  r  r  r'  r>  r  r/   mainr.   r   r   <module>rr     s2   %   	      *3?8$$ 3?l' '2. .b/" /"bu?'9 u?pE4'9 E4PV&, V&r&<)< &36': 36lf1, f1R&<)< &,0': ,0^AL A&rAh'' rAjG
X&& G
T6 zMMO r   