Sindbad~EG File Manager

Current Path : /proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/
Upload File :
Current File : //proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/test_ipaddress.cpython-312.opt-1.pyc

�

'Μg[����dZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZGd�dej�Z
Gd�d�ZGd�d	e�ZGd
�de�ZGd�d
e
e�ZGd�de
e�ZGd�de�ZGd�de
e�ZGd�de
e�ZGd�de�ZGd�de
e�ZGd�de
e�ZGd�de
�ZGd�dej�ZGd �d!ej�Zed"k(rej:�yy)#zUnittest for ipaddress module.�N)�LARGEST�SMALLESTc�R�eZdZed��Zejd��Zd�Zd�Z	d�Z
y)�BaseTestCasec��t��N)�NotImplementedError��selfs �0/usr/local/lib/python3.12/test/test_ipaddress.py�factoryzBaseTestCase.factory%s��!�!�c'��K�|r||z}|j||�}|5}|��ddd�jj�&|j|jj�yy#1swY�FxYw�w)z{
        Ensure exception does not display a context by default

        Wraps unittest.TestCase.assertRaisesRegex
        N)�assertRaisesRegex�	exception�__context__�
assertTrue�__suppress_context__)r�exc_type�details�args�cm�excs      r�assertCleanErrorzBaseTestCase.assertCleanError)si�������n�G�
�
#�
#�H�g�
6��
�3��I���=�=�$�$�0��O�O�C�M�M�>�>�?�1��R�s�A4�A(�AA4�(A1�-A4c�F�|jtj|g|���S)z Ensure a clean AddressValueError)r�	ipaddress�AddressValueError�rrrs   r�assertAddressErrorzBaseTestCase.assertAddressError9�*��$�t�$�$�Y�%@�%@�%,�5�/3�5�	5rc�F�|jtj|g|���S)z Ensure a clean NetmaskValueError)rr�NetmaskValueErrorrs   r�assertNetmaskErrorzBaseTestCase.assertNetmaskError>r rc�d�|j|j|�|j|��y)z8Check constructor arguments produce equivalent instancesN)�assertEqualr
�r�lhs�rhss   r�assertInstancesEqualz!BaseTestCase.assertInstancesEqualCs$��������c�*�D�L�L��,=�>rN)�__name__�
__module__�__qualname__�propertyr
�
contextlib�contextmanagerrrr#r)�rrrrsA��&�"��"����
@��
@�5�
5�
?rrc�$�eZdZd�Zd�Zd�Zd�Zy)�CommonTestMixinc�r�|jd�5|jd�ddd�y#1swYyxYw)N�Address cannot be empty��rr
r
s r�test_empty_addressz"CommonTestMixin.test_empty_addressJs*��
�
$�
$�%>�
?��L�L���@�
?�
?�s�-�6c��|jtjtd���5|j	d�ddd�y#1swYyxYw)Nz1.0g�?)r�re�escape�reprr
r
s r�test_floats_rejectedz$CommonTestMixin.test_floats_rejectedNs5��
�
$�
$�R�Y�Y�t�E�{�%;�
<��L�L���=�
<�
<�s�A	�	Ac��|jttj|j	d��|jtt
|j	d��|jtt|j	d��y)N�)�assertRaises�	TypeError�operator�indexr
�hex�bytesr
s r�test_not_an_index_issue15559z,CommonTestMixin.test_not_an_index_issue15559RsV��	
���)�X�^�^�T�\�\�!�_�E����)�S�$�,�,�q�/�:����)�U�D�L�L��O�<rc�,�ttjdz�D]i}|j|��5|j	|�}tj
tj||��}|j||�ddd��ky#1swY�vxYw)Nr>)�proto)�range�pickle�HIGHEST_PROTOCOL�subTestr
�loads�dumpsr%)r�addrrG�x�ys     r�pickle_testzCommonTestMixin.pickle_testYsp���6�2�2�Q�6�7�E����E��*��L�L��&���L�L����a��!7�8��� � ��A�&�+�*�8�*�*�s�A
B
�
B	N)r*r+r,r7r<rErQr0rrr2r2Hs����=�'rr2c�0�eZdZd�Zd�Zd�Zd�Zd�Zd�Zy)�CommonTestMixin_v4c���d}gd�}|D]H}|j|��5|j|�5|j|�ddd�ddd��Jy#1swY�xYw#1swY�axYw)Nz(Leading zeros are not permitted in '\d+')z000.000.000.000z192.168.000.001z016.016.016.016z001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)�address)rKrr
)r�msg�	addressesrUs    r�test_leading_zerosz%CommonTestMixin_v4.test_leading_zeroscs_��9��	
�	�!�G����g��.��,�,�S�1��L�L��)�2�/�.�!�1�1��/�.�s"�A!�A�A!�A�A!�!A*	c�L�|jdd�|jdd�y)Nr�0.0.0.0�P�192.168.0.1�r)r
s r�test_intzCommonTestMixin_v4.test_intus"���!�!�!�Y�/��!�!�*�m�<rc��|jtjd�d�|jtjd�d�y)N�00000000rZ�c0a80001r\)r)rD�fromhexr
s r�test_packedzCommonTestMixin_v4.test_packedys4���!�!�%�-�-�
�";�Y�G��!�!�%�-�-�
�";�]�Krc��d}|jtj|��5|jd�ddd�y#1swYyxYw)Nz,-1 (< 0) is not permitted as an IPv4 address����rr9r:r
�rrVs  r�test_negative_ints_rejectedz.CommonTestMixin_v4.test_negative_ints_rejected}�5��<��
�
$�
$�R�Y�Y�s�^�
4��L�L���5�
4�
4���A�Ac��d}|jtj|dz��5|jd�ddd�y#1swYyxYw)Nz1%d (>= 2**32) is not permitted as an IPv4 addresslrfrgs  r�test_large_ints_rejectedz+CommonTestMixin_v4.test_large_ints_rejected�s:��A��
�
$�
$�R�Y�Y�s�U�{�%;�
<��L�L���=�
<�
<�s�A�Ac�0���fd�}|d�|d�y)Nc���d|z}d}�jtj|||fz��5�j|�ddd�y#1swYyxYw)N�z4%r (len %d != 4) is not permitted as an IPv4 addressrf��lengthrNrVrs   �r�assertBadLengthzBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength�sJ����6�>�D�H�C��(�(����3�$���3G�)H�I����T�"�J�I�I�s�A
�
A��r0�rrrs` r�test_bad_packed_lengthz)CommonTestMixin_v4.test_bad_packed_length�s���	#�	�����rN)	r*r+r,rXr^rcrhrlrvr0rrrSrSas!��*�$=�L��
 �
rrSc�<�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�CommonTestMixin_v6c�L�|jdd�|jdd�y)Nz
0000::0000�::z000::c0a8:0001�::c0a8:1r]r
s rrXz%CommonTestMixin_v6.test_leading_zeros�s#���!�!�,��5��!�!�"2�J�?rc�L�|jdd�|jdd�y)Nrrzr[r{r]r
s rr^zCommonTestMixin_v6.test_int�s"���!�!�!�T�*��!�!�*�j�9rc��dtjd�z}|j|d�dtjd�z}|j|d�tjd�dz}|j|d�y)Nsr`rzrar{zc0a8:1::)rDrbr)�rrNs  rrczCommonTestMixin_v6.test_packed�sk���%�-�-�
�3�3���!�!�$��-��%�-�-�
�3�3���!�!�$�
�3��}�}�Z�(�8�3���!�!�$�
�3rc��d}|jtj|��5|jd�ddd�y#1swYyxYw)Nz,-1 (< 0) is not permitted as an IPv6 addressrerfrgs  rrhz.CommonTestMixin_v6.test_negative_ints_rejected�rirjc��d}|jtj|ddzz��5|jddz�ddd�y#1swYyxYw)Nz2%d (>= 2**128) is not permitted as an IPv6 address��rfrgs  rrlz+CommonTestMixin_v6.test_large_ints_rejected�sB��B��
�
$�
$�R�Y�Y�s�Q��V�|�%<�
=��L�L��C�� �>�
=�
=�s�A�Ac�0���fd�}|d�|d�y)Nc����d|z}d}�jtj|||fz��5�j|��j|�ddd�y#1swYyxYw)Nroz5%r (len %d != 16) is not permitted as an IPv6 addressrfrps   �rrrzBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength�sV����6�>�D�I�C��(�(����3�$���3G�)H�I����T�"����T�"�J�I�I�s�#A�A'��r0rus` rrvz)CommonTestMixin_v6.test_bad_packed_length�s���	#�	�����rc�x�d}|jd|�5|j|�ddd�y#1swYyxYw)Nz::1%�Invalid IPv6 address: "%r"r6�rrUs  r�test_blank_scope_idz&CommonTestMixin_v6.test_blank_scope_id�s1����
�
$�
$�%A�7�
K��L�L��!�L�
K�
K���0�9c�x�d}|jd|�5|j|�ddd�y#1swYyxYw)Nz
::1%scope%r�r6r�s  r�"test_invalid_scope_id_with_percentz5CommonTestMixin_v6.test_invalid_scope_id_with_percent�s1����
�
$�
$�%A�7�
K��L�L��!�L�
K�
K�r�N)r*r+r,rXr^rcrhrlrvr�r�r0rrrxrx�s+��@�:�4��
!�
	�"�
"rrxc�Z�eZdZejZd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd�Z
d	�Zy
)�AddressTestCase_v4c��tjd�}gd�}|D]!\}}|j|t||���#y)N�1.2.3.42))�b� 00000001000000100000001100101010)�nr�)rO�0102032a)�X�0102032A)�_b�'0000_0001_0000_0010_0000_0011_0010_1010)�_nr�)�_x�	0102_032a)�_X�	0102_032A)�#b�"0b00000001000000100000001100101010)�#nr�)�#x�
0x0102032a)�#X�
0X0102032A)�#_b�)0b0000_0001_0000_0010_0000_0011_0010_1010)�#_nr�)�#_x�0x0102_032a)�#_X�0X0102_032A)�sr�)r5r�)r�IPv4Addressr%�format)r�v4�v4_pairs�fmt�txts     r�test_formatzAddressTestCase_v4.test_format�s?��
�
"�
"�:�
.��
��(#�J�S�#����S�&��S�/�2�#rc��d}|jd|�5tj|�ddd�y#1swYyxYw)Nz127.0.0.1/24�Unexpected '/' in %r�rrr�r~s  r�test_network_passed_as_addressz1AddressTestCase_v4.test_network_passed_as_address�s3����
�
$�
$�%;�T�
B��!�!�$�'�C�
B�
B�s�4�=c����fd�}|d�|d�|d�|d�|d�|d�|d�|d	�|d
�|d�|d�|d
�|d�|d�|d�|d�|d�|d�|d�|d�|d�|d�|d�y)Nc�~���jd|�5tj|�ddd�y#1swYyxYw)NzExpected 4 octets in %rr��rNrs �r�assertBadSplitzAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplit�s/����(�(�)B�D�I��%�%�d�+�J�I�I���3�<z127.0.1z42.42.42.42.42z42.42.42z42.42�42z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016�016�000z0x0a.0x0a.0x0az	0x0a.0x0a�0x0a�.�bogusz	bogus.com�1000�1000000000000000z192.168.0.1.comr0�rr�s` r�test_bad_address_splitz)AddressTestCase_v4.test_bad_address_split�s����	,�	�y�!��'�(��z�"��w���t���~�&��~�&��'�(��~�&��'�(��}�%��y�!��u���u���'�(��{�#��v���s���w���{�#��v���)�*��(�)rc�0���fd�}|d�|d�y)Nc�~���jd|�5tj|�ddd�y#1swYyxYw)NzEmpty octet not permitted in %rr�r�s �r�assertBadOctetz;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctets5����(�(�)J�)-�/��%�%�d�+�/�/�/�r�z	42..42.42z...r0�rr�s` r�test_empty_octetz#AddressTestCase_v4.test_empty_octets���	,�
	�{�#��u�rc����fd�}|dd�|dd�|dd�|dd	�|d
d�|dd
�|dd�|dd�|dd�y)Nc���d|�d|��}�jtj|��5tj|�ddd�y#1swYyxYw)Nz!Only decimal digits permitted in � in �rr9r:rr��rN�octetrVrs   �rr�zBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctets=���AF��M�C��(�(����3��8��%�%�d�+�9�8�8�s�A
�
Az0x0a.0x0a.0x0a.0x0ar�z0xa.0x0a.0x0a.0x0a�0xaz42.42.42.-0�-0z42.42.42.+0�+0z42.42.42.-42z-42z
+1.+2.+3.4�+1z	1.2.3.4e0�4e0�	1.2.3.4::z4::�1.a.2.3�ar0r�s` r�test_invalid_charactersz*AddressTestCase_v4.test_invalid_characters
sf���	,�
	�,�f�5��+�U�3��}�d�+��}�d�+��~�u�-��|�T�*��{�E�*��{�E�*��y�#�&rc�4���fd�}|dd�|dd�y)Nc���d}�jtj|||fz��5tj|�ddd�y#1swYyxYw)Nz*At most 3 characters permitted in %r in %rr�r�s   �rr�z<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctetsC���>�C��(�(����3�%���3F�)G�H��%�%�d�+�I�H�H���A�Az0000.000.000.000�0000z12345.67899.-54321.-98765�12345r0r�s` r�test_octet_lengthz$AddressTestCase_v4.test_octet_lengths ���	,�
	�)�6�2��2�G�<rc�4���fd�}|dd�|dd�y)Nc���d||fz}�jtj|��5tj|�ddd�y#1swYyxYw)Nz$Octet %d (> 255) not permitted in %rr�r�s   �rr�z;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet$sA���8�E�4�=�H�C��(�(����3��8��%�%�d�+�9�8�8�r�z	257.0.0.0iz
192.168.0.999i�r0r�s` r�test_octet_limitz#AddressTestCase_v4.test_octet_limit#s���	,�
	�{�C�(����,rc�&�|jd�y�N�	192.0.2.1�rQr
s r�test_picklezAddressTestCase_v4.test_pickle,s������%rc�L�tj|jd��yr���weakref�refr
r
s r�test_weakrefzAddressTestCase_v4.test_weakref/s�����D�L�L��-�.rN)r*r+r,rr�r
r�r�r�r�r�r�r�r�r�r0rrr�r��s:���#�#�G�3�2(�
*�:�'� =�-�&�/rr�c�~�eZdZejZd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Zd�Zd�Zd
�Zd�Zd�Zy)�AddressTestCase_v6c��tjd�}gd�}|D]!\}}|j|t||���#y)Nz
::1.2.3.42))r�ڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r�� 0000000000000000000000000102032a)rOr�)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)r5r�)r�IPv6Addressr%r�)r�v6�v6_pairsr�r�s     rr�zAddressTestCase_v6.test_format6s@��
�
"�
"�<�
0��!
��F#�J�S�#����S�&��S�/�2�#rc�0���fd�}|d�|d�y)Nc���d}�j||�5tj|�ddd�y#1swYyxYw)Nr�)rrr��rNrVrs  �rr�zIAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplit`s2���(�C��(�(��d�3��%�%�d�+�4�3�3�s�5�>z::1/24z::1%scope_id/24r0r�s` rr�z1AddressTestCase_v6.test_network_passed_as_address_s���	,�	�x� ��(�)rc�p���fd�}|d�|d�|d�|d�|d�|d�y)Nc���d}�j||jd�d�5tj|�ddd�y#1swYyxYw)NzAt least 3 parts expected in %r�%r�r�splitrr�rs  �rr�zUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSpliths@���3�C��(�(��d�j�j��o�a�.@�A��%�%�d�+�B�A�A���A�A�:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper0r�s` r�*test_bad_address_split_v6_not_enough_partsz=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsgs;���	,�
	�s���t���{�#��y�!��z�"��(�)rc����fd�}|d�|d�|d�|d�|d�|d�|d�|d	�|d
�|d�y)Nc���d}�j||jd�d�5tj|�ddd�y#1swYyxYw)Nz At most 8 colons permitted in %rrrrrs  �rr�zTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplitu�@���4�C��(�(��d�j�j��o�a�.@�A��%�%�d�+�B�A�A�r
z9:8:7:6:5:4:3::2:1z10:9:8:7:6:5:4:3:2:1z::8:7:6:5:4:3:2:1z8:7:6:5:4:3:2:1::z10:9:8:7:6:5:4:3:42.42.42.42z9:8:7:6:5:4:3::2:1%scopez10:9:8:7:6:5:4:3:2:1%scopez::8:7:6:5:4:3:2:1%scopez8:7:6:5:4:3:2:1::%scopez"10:9:8:7:6:5:4:3:42.42.42.42%scoper0r�s` r�)test_bad_address_split_v6_too_many_colonsz<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonstsd���	,�
	�+�,��-�.��*�+��*�+��5�6��1�2��3�4��0�1��0�1��;�<rc����fd�}|d�|d�|d�|d�|d�|d�|d�|d	�|d
�|d�y)Nc���d}�j||jd�d�5tj|�ddd�y#1swYyxYw)Nz+Exactly 8 parts expected without '::' in %rrrrrs  �rr�zSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplit�s@���?�C��(�(��d�j�j��o�a�.@�A��%�%�d�+�B�A�A�r
z3ffe:0:0:0:0:0:0:0:1z9:8:7:6:5:4:3:2:1z
7:6:5:4:3:2:1z9:8:7:6:5:4:3:42.42.42.42z7:6:5:4:3:42.42.42.42z3ffe:0:0:0:0:0:0:0:1%scopez9:8:7:6:5:4:3:2:1%scopez7:6:5:4:3:2:1%scopez9:8:7:6:5:4:3:42.42.42.42%scopez7:6:5:4:3:42.42.42.42%scoper0r�s` r�(test_bad_address_split_v6_too_many_partsz;AddressTestCase_v6.test_bad_address_split_v6_too_many_parts�sc���	,�
	�-�.��*�+���'��2�3��.�/��3�4��0�1��,�-��8�9��4�5rc�0���fd�}|d�|d�y)Nc���d}�j||jd�d�5tj|�ddd�y#1swYyxYw)Nz.Expected at most 7 other parts with '::' in %rrrrrs  �rr�zeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplit�s@���B�C��(�(��d�j�j��o�a�.@�A��%�%�d�+�B�A�A�r
z1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper0r�s` r�:test_bad_address_split_v6_too_many_parts_with_double_colonzMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon�s���	,�
	�)�*��/�0rc�P���fd�}|d�|d�|d�|d�|d�|d�|d�|d	�|d
�|d�|d�|d
�|d�|d�|d�|d�|d�|d�|d�|d�y)Nc���d}�j||jd�d�5tj|�ddd�y#1swYyxYw)Nz At most one '::' permitted in %rrrrrs  �rr�zZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplit�rr
z
3ffe::1::1z1::2::3::4:5z2001::db:::1z	3ffe::1::z	::3ffe::1z:3ffe::1::1z3ffe::1::1:z:3ffe::1::1:z:::z2001:db8:::1z3ffe::1::1%scopez1::2::3::4:5%scopez2001::db:::1%scopez3ffe::1::%scopez::3ffe::1%scopez:3ffe::1::1%scopez3ffe::1::1:%scopez:3ffe::1::1:%scopez	:::%scopez2001:db8:::1%scoper0r�s` r�/test_bad_address_split_v6_repeated_double_colonzBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon�s����	,�
	�|�$��~�&��~�&��{�#��{�#��}�%��}�%��~�&��u���~�&��)�*��+�,��+�,��(�)��(�)��*�+��*�+��+�,��{�#��+�,rc����fd�}|d�|d�|d�|d�|d�|d�|d�|d	�y)
Nc���d}�j||jd�d�5tj|�ddd�y#1swYyxYw)Nz0Leading ':' only permitted as part of '::' in %rrrrrs  �rr�zRAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplit�s@���D�C��(�(��d�j�j��o�a�.@�A��%�%�d�+�B�A�A�r
z:2001:db8::1z:1:2:3:4:5:6:7z
:1:2:3:4:5:6:z:6:5:4:3:2:1::z:2001:db8::1%scopez:1:2:3:4:5:6:7%scopez:1:2:3:4:5:6:%scopez:6:5:4:3:2:1::%scoper0r�s` r�'test_bad_address_split_v6_leading_colonz:AddressTestCase_v6.test_bad_address_split_v6_leading_colon�sP���	,�
	�~�&��'�(���'��'�(��+�,��-�.��,�-��-�.rc����fd�}|d�|d�|d�|d�|d�|d�|d�|d	�y)
Nc���d}�j||jd�d�5tj|�ddd�y#1swYyxYw)Nz1Trailing ':' only permitted as part of '::' in %rrrrrs  �rr�zSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplit�s@���E�C��(�(��d�j�j��o�a�.@�A��%�%�d�+�B�A�A�r
z2001:db8::1:z1:2:3:4:5:6:7:z
::1.2.3.4:z::7:6:5:4:3:2:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper0r�s` r�(test_bad_address_split_v6_trailing_colonz;AddressTestCase_v6.test_bad_address_split_v6_trailing_colon�sP���	,�
	�~�&��'�(��|�$��'�(��+�,��-�.��)�*��-�.rc�����fd�}|dd�|dd�|dd�|dd	�|d
d�|dd�|d
d�|dd�|dd	�|dd�y)Nc����jd||jd�d�5tj|�ddd�y#1swYyxYw)Nz%s in %rrrr)rN�v4_errorrs  �r�assertBadAddressPartzDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPart�s=����(�(��X�t�z�z�#��q�?Q�R��%�%�d�+�S�R�R�s�A�Az3ffe::1.netzExpected 4 octets in '1.net'z
3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez
::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper0)rr#s` r�test_bad_v4_part_inz&AddressTestCase_v6.test_bad_v4_part_in�s����	,�	�]�,J�K��_�=�	?��Y�;�	=��]�?�	A��.�.�	/�	�0�2P�Q��2�=�	?��_�;�	=��0�?�	A��4�.�	/rc�����fd�}|dd�|dd�|dd�|dd	�|d
d�|dd
�|dd�|dd�|dd�|dd	�|dd�|dd
�y)Nc����d|�d|jd�d��}�jtj|��5t	j
|�ddd�y#1swYyxYw)NzOnly hex digits permitted in r�rr)r	rr9r:rr��rN�partrVrs   �r�
assertBadPartzAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPart�sK���=A�4�:�:�c�?�ST�CU�V�C��(�(����3��8��%�%�d�+�9�8�8�s�A�A(z
3ffe::goog�googz3ffe::-0r�z3ffe::+0r�z3ffe::-1�-1r��1.2.3.4�1234:axy::b�axyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope�1234:axy::b%scoper0�rr)s` rr�z*AddressTestCase_v6.test_invalid_characters�s����	,�
	�l�F�+��j�$�'��j�$�'��j�$�'��k�9�-��m�U�+��(�&�1��&��-��&��-��&��-��'��3��)�5�1rc����fd�}|dd�|dd�|dd�|dd	�|d
d�|dd�|dd�|d
d	�y)Nc���d}�j|||jd�d�5tj|�ddd�y#1swYyxYw)Nz*At most 4 characters permitted in %r in %rrrrr's   �rr)z:AddressTestCase_v6.test_part_length.<locals>.assertBadPartsB���>�C��(�(��d�D�J�J�s�O�A�4F�G��%�%�d�+�H�G�G�s�A�Az::00000�00000z3ffe::10000�10000z02001:db8::�02001z2001:888888::1�888888z
::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper0r0s` r�test_part_lengthz#AddressTestCase_v6.test_part_lengths^���	,�
	�i��)��m�W�-��m�W�-��&��1��o�w�/��)�7�3��)�7�3��,�h�7rc�H�|jd�|jd�y�N�
2001:db8::�2001:db8::%scoper�r
s rr�zAddressTestCase_v6.test_pickle s������&����+�,rc��tj|jd��tj|jd��yr9r�r
s rr�zAddressTestCase_v6.test_weakref$s-�����D�L�L��.�/����D�L�L�!3�4�5rc��|jd�}|j|tj|��|j|tj|��y)Nr;)r
r%�copy�deepcopyr~s  r�	test_copyzAddressTestCase_v6.test_copy(sB���|�|�.�/������t�y�y���/�����t�}�}�T�2�3rN)r*r+r,rr�r
r�r�rrrrrrrr$r�r7r�r�r@r0rrr�r�3sY���#�#�G�'3�R*�*�=�(6�(1�-�8/� /� /�62�(8� -�6�4rr�c�:�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�NetmaskTestMixin_v4�;Input validation on interfaces and networks is very similarc��dD]x}|j|�}|jt|�d�|jt|j�d�|jt|j�d��zy)N)r,���
1.2.3.4/32�255.255.255.255rZ�r
r%�str�netmask�hostmask)rrU�nets   r�test_no_maskz NetmaskTestMixin_v4.test_no_mask1sb��C�G��,�,�w�'�C����S��X�|�4����S����-�/@�A����S����.�	�:�	Drc�|�d}|jd|z�5|j|�ddd�y#1swYyxYw)Nz
1.2.3.4/32/24�Only one '/' permitted in %rr6r~s  r�test_split_netmaskz&NetmaskTestMixin_v4.test_split_netmask:s4����
�
$�
$�%C�d�%J�
K��L�L���L�
K�
K�s�2�;c����fd�}|dd�|dd�|dd�|dd�|dd�|d	d
�|dtjd��y)
Nc�t���j|�5�j|�ddd�y#1swYyxYwrr6�rNrrs  �r�assertBadAddresszANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress@�)����(�(��1����T�"�2�1�1���.�7�/r4�/8r�zExpected 4 octets�
google.com�10/8�	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r9r:�rrUs` r�test_address_errorsz'NetmaskTestMixin_v4.test_address_errors?s_���	#�	��7�8���8�9���"5�6���':�;���!4�5���&;�<���b�i�i�
�&>�?rc	�&�|jt|jd��d�|jt|jd��d�|jt|jd��d�|jt|jd��d�tdd�D]�}d|z}|j|�}|jt|�|�|jt|jd	|jz��|�|jt|jd
|z��|�|dvrdd|z
z}|jt|jd	|j
z��|���y)
N��	192.0.2.0��192.0.2.0/24)ra�24�ra�
255.255.255.0z192.0.2.0/255.255.255.0r�!z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%d)� rrh)r%rJr
rHrKrL)r�i�net_strrMs    r�test_valid_netmaskz&NetmaskTestMixin_v4.test_valid_netmaskLsR������T�\�\�*;�<�=�~�N�����T�\�\�*=�>�?��P�����T�\�\�*H�I�J�'�	)�����T�\�\�*C�D�E�'�	)��q�"��A�"�Q�&�G��,�,�w�'�C����S��X�w�/�����D�L�L�����!;�<�=�w�
H�
���S����m�a�.?�!@�A�7�K��G�|�&�"�q�&�1������D�L�L�����!<�=�>��
I�rc����fd�}|dd�|dd�|dd�|dd�|dd�|dd�|dd	�|dd
�|dd�|dd
�|dd�|dd�|dd�|dd�y)Nc���d|z}�jtj|��5�j|�d|���ddd�y#1swYyxYw�N�%r is not a valid netmaskrX�r#r9r:r
�rNrKrVrs   �r�assertBadNetmaskzANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmaske�@���-��7�C��(�(����3��8�����g�6�7�9�8�8���A�Ar,r5r+r�� 1 �0x1�33z254.254.255.256r��1.1.1.1z254.xyz.2.3z240.255.0.0z
255.254.128.0z0.1.127.255�puddingrzr0�rrrs` r�test_netmask_errorsz'NetmaskTestMixin_v4.test_netmask_errorsds����	8�
	��B�'���D�)���D�)���E�*���E�*���D�)���$5�6���I�.���M�2���M�2���O�4���M�2���I�.���D�)rc�4���fd�}|dd�|dd�y)Nc���d|z}�jtj|��5�j||f�ddd�y#1swYyxYw�Nrorprqs   �rrrzJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskz�?���-��7�C��(�(����3��8����d�G�_�-�9�8�8���A�Arxrergr0rzs` r�test_netmask_in_tuple_errorsz0NetmaskTestMixin_v4.test_netmask_in_tuple_errorsys���	.�	��B�'���B�'rc�j�|jd�|jd�|jd�y)Nz192.0.2.0/27z192.0.2.0/31rar�r
s rr�zNetmaskTestMixin_v4.test_pickle�s,������(�����(�����%rN�r*r+r,�__doc__rNrQr^rkr{r�r�r0rrrBrB.s*��E�;��
@�I�0*�*(�&rrBc�$�eZdZejZy)�InterfaceTestCase_v4N)r*r+r,r�
IPv4Interfacer
r0rrr�r���
���%�%�Grr�c�6�eZdZejZd�Zd�Zd�Zy)�NetworkTestCase_v4c���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���y�N�10.0.0.0/30z10.0.1.0/24z10.0.0.0/24��assertFalser
�	subnet_ofrr
s r�test_subnet_ofz!NetworkTestCase_v4.test_subnet_of�s�������L�L��'�1�1����]�+�
-�	.�	
����L�L��'�1�1����]�+�
-�	.�	
����L�L��'�1�1����]�+�
-�	.�	
����L�L��'�1�1����]�+�
-�	.rc���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���yr��r�r
�supernet_ofrr
s r�test_supernet_ofz#NetworkTestCase_v4.test_supernet_of�s�������L�L��'�3�3����]�+�
-�	.�	
����L�L��'�3�3����]�+�
-�	.�	
����L�L��'�3�3����]�+�
-�	.�	
����L�L��'�3�3����]�+�
-�	.rc��|jt�5tjd�j	tj
d��ddd�|jt�5tj
d�j	tjd��ddd�|jt�5tjd�j
tj
d��ddd�|jt�5tj
d�j
tjd��ddd�y#1swY��
xYw#1swY��xYw#1swY�xxYw#1swYyxYw)Nr��::1/128)r?r@r�IPv4Networkr��IPv6Networkr�r
s r�test_subnet_of_mixed_typesz-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/�8E�+8E#�8E/�8E;�E �#E,�/E8�;FN)	r*r+r,rr�r
r�r�r�r0rrr�r��s���#�#�G�.�$.�$6rr�c�:�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�NetmaskTestMixin_v6rCc���dD]x}|j|�}|jt|�d�|jt|j�d�|jt|j�d��z|jd�}|jt|�d�|jt|j�d�|jt|j�d�y)N)�::1r>sr�z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffrz�	::1%scope�
::1%scope/128rI)rrUrM�
scoped_nets    rrNz NetmaskTestMixin_v6.test_no_mask�s���7�G��,�,�w�'�C����S��X�y�1����S����-�/X�Y����S����.��5�	8��\�\�+�.�
�����Z��/�:�����Z�/�/�0�2[�\�����Z�0�0�1�4�8rc���d}|jd|z�5|j|�ddd�d}|jd|z�5|j|�ddd�y#1swY�:xYw#1swYyxYw)Nzcafe:cafe::/128/190rPzcafe:cafe::%scope/128/190r6)rrN�scoped_addrs   rrQz&NetmaskTestMixin_v6.test_split_netmask�sq��$��
�
$�
$�%C�d�%J�
K��L�L���L�2��
�
$�
$�%C�k�%Q�
R��L�L��%�S�
R�	L�
K��S�
R�s�A"�A.�"A+�.A7c�����fd�}|dd�|dd�|dd�|dd�|dd�|d	d
�|dd�|dd�|d
d�|dd�|dd�|dd
�y)Nc�t���j|�5�j|�ddd�y#1swYyxYwrr6rTs  �rrUzANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddress�rVrWrXr4rYrZzAt least 3 partsr,r[r-zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez
1.2.3.4%scopez
10%scope/8r/r0r]s` rr^z'NetmaskTestMixin_v6.test_address_errors�s����	#�	��7�8���8�9���'9�:���$6�7���!3�4���(9�:���$=�>���%>�?��+�-?�@���*<�=���'9�:��,�.?�@rc	��|jt|jd��d�|jt|jd��d�|jt|jd��d�tdd�D]^}d|z}|jt|j|��|�|jt|jd|z��|��`|jt|jd��d�tdd�D]^}d|z}|jt|j|��|�|jt|jd|z��|��`y)	N)r:rh�
2001:db8::/32)r:�32r�z::/%dz::/0%dz2001:db8::%scope/32)r%rJr
rH)rrirjs   rrkz&NetmaskTestMixin_v6.test_valid_netmask�s:��	
����T�\�\�*<�=�>�(�	*�����T�\�\�*>�?�@�(�	*�����T�\�\�/�:�;�_�M��q�#��A���k�G����S����g�!6�7��A����S����h��l�!;�<�g�F��	
����T�\�\�*?�@�A�CX�Y��q�#��A���k�G����S����g�!6�7��A����S����h��l�!;�<�g�F�rc�����fd�}|dd�|dd�|dd�|dd�|dd�|dd�|dd�|dd	�|dd
�|dd�|dd�|d
d�y)Nc���d|z}�jtj|��5�j|�d|���ddd�y#1swYyxYwrnrprqs   �rrrzANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskrsrtr�r5�1::r+r�rurv�129r,ryrzr�r0rzs` rr{z'NetmaskTestMixin_v6.test_netmask_errorss����	8�
	���#����&����&����%����%����&����&����&���	�*���	�*���t�$���i�0rc�F���fd�}|dd�|dd�|dd�y)Nc���d|z}�jtj|��5�j||f�ddd�y#1swYyxYwr~rprqs   �rrrzJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskrr�r�rer�r�r0rzs` rr�z0NetmaskTestMixin_v6.test_netmask_in_tuple_errorss(���	.�	���#����$���c�*rc��|jd�|jd�|jd�|jd�y)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoper�r
s rr�zNetmaskTestMixin_v6.test_pickle"s>�����-�.����-�.����)�*����/�0rNr�r0rrr�r��s*��E�9�&�A�&G�.1�(+�1rr�c�$�eZdZejZy)�InterfaceTestCase_v6N)r*r+r,r�
IPv6Interfacer
r0rrr�r�*r�rr�c�0�eZdZejZd�Zd�Zy)�NetworkTestCase_v6c���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���y)N�
2000:999::/56�
2000:aaa::/48�
2000:aaa::/56�
2000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56r�r
s rr�z!NetworkTestCase_v6.test_subnet_of1s2������L�L��)�3�3����_�-�
/�	0�	
����L�L��)�3�3����_�-�
/�	0�	
����L�L��)�3�3����_�-�
/�	0�	
����L�L��)�3�3����_�-�
/�	0�	
����L�L�.�/�9�9����2�3�
5�	6�	
����L�L�.�/�9�9����2�3�
5�	6rc���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���|j|jd�j|jd���y)Nr�r�r�r�r�r
s rr�z#NetworkTestCase_v6.test_supernet_ofJs�������L�L��)�5�5����_�-�
/�	0�	
����L�L��)�5�5����_�-�
/�	0�	
����L�L��)�5�5����_�-�
/�	0�	
����L�L��)�5�5����_�-�
/�	0rN)r*r+r,rr�r
r�r�r0rrr�r�.s���#�#�G�6�20rr�c�$�eZdZd�Zd�Zd�Zd�Zy)�FactoryFunctionErrorsc�v�d}d}|jt|||�5||�ddd�y#1swYyxYw)z3Ensure a clean ValueError with the expected message�camelotz+%r does not appear to be an IPv4 or IPv6 %sN)r�
ValueError)rr
�kindrNrVs     r�assertFactoryErrorz(FactoryFunctionErrors.assertFactoryError_s4����;��
�
"�
"�:�s�D�$�
?��D�M�@�
?�
?�s�	/�8c�D�|jtjd�y)NrU)r�r�
ip_addressr
s r�test_ip_addressz%FactoryFunctionErrors.test_ip_addressf������	� 4� 4�i�@rc�D�|jtjd�y)N�	interface)r�r�ip_interfacer
s r�test_ip_interfacez'FactoryFunctionErrors.test_ip_interfaceis�����	� 6� 6��Drc�D�|jtjd�y)N�network)r�r�
ip_networkr
s r�test_ip_networkz%FactoryFunctionErrors.test_ip_networklr�rN)r*r+r,r�r�r�r�r0rrr�r�]s���A�E�Arr�c�&�eZdZejd�Zejd�Zejd�Z	ejd�Zejd�Z
ejd�Zejd�Zejd�Zejd�Zee	gZeegzZeegZee
gzZeegZeegzZeezZeezZejd�Zejd�Zejd�Zejd�Zejd�Zejd�Z ejd�Z!ejd�Z"ejd�Z#d�Z$d�Z%d�Z&d�Z'd	�Z(d
�Z)d�Z*d�Z+d
�Z,d�Z-d�Z.y)�ComparisonTestsr>r�r��	::2%scopec��t�}|jD]r}|j||�|j||k(�|j	|j|�t�|j	|j|�t��tyr)�object�objects_with_scoped�assertNotEqualr�r%�__eq__�NotImplemented�__ne__�r�other�objs   r�test_foreign_type_equalityz*ComparisonTests.test_foreign_type_equality�sm������+�+�C�����U�+����S�E�\�*����S�Z�Z��.��?����S�Z�Z��.��?�	,rc�v�|jD]*}|jD]}||ur�|j||���,yr)�objectsr�r&s   r�test_mixed_type_equalityz(ComparisonTests.test_mixed_type_equality�s:���<�<�C��|�|���#�:���#�#�C��-�$� rc�x�t|j|j�D]\}}|j||��yr)�zip�
v6_objects�v6_scoped_objectsr�r&s   r�test_scoped_ipv6_equalityz)ComparisonTests.test_scoped_ipv6_equality�s2���D�O�O�T�-C�-C�D�H�C������S�)�Erc�l�|jD]%}|jD]}|j||���'yr)�
v4_objectsr�r�r&s   r�test_v4_with_v6_scoped_equalityz/ComparisonTests.test_v4_with_v6_scoped_equality�s0���?�?�C��-�-���#�#�C��-�.�#rc��|jD]8}|j||�|j||�|j||��:yr)r�r%�assertLessEqual�assertGreaterEqual�rr�s  r�test_same_type_equalityz'ComparisonTests.test_same_type_equality�sB���+�+�C����S�#�&�� � ��c�*��#�#�C��-�,rc
�
�|j|jf|j|jf|j|j
f|j|jf|j|jf|j|jf|j|jf|j|jf|j |j"ff	D]�\}}|j%||�|j'||�|j)||�|j+||�|j-||�|j/||kD�|j/||k�|j/||k\�|j/||k���yr)�v4addr�v4addr2�v4net�v4net2�v4intf�v4intf2�v6addr�v6addr2�v6net�v6net2�v6intf�v6intf2�
v6addr_scoped�v6addr2_scoped�v6net_scoped�
v6net2_scoped�
v6intf_scoped�v6intf2_scopedr��
assertLessr��
assertGreaterr�r�r&s   r�test_same_type_orderingz'ComparisonTests.test_same_type_ordering�sF��
�[�[�$�,�,�'�
�Z�Z����%�
�[�[�$�,�,�'�
�[�[�$�,�,�'�
�Z�Z����%�
�[�[�$�,�,�'�
�
�
��!4�!4�5�
�
�
�� 2� 2�3�
�
�
��!4�!4�5�

�H�C��
����S�)��O�O�C��%�� � ��c�*����s�C�(��#�#�C��-����S�3�Y�'����S�3�Y�'����S�C�Z�(����S�C�Z�(�'

rc���|jD]}|j||j�� |j|jzD]}|j||j
�� |j|jzD]}|j||j�� |j|j
|jgzD]}|j||j
�� |j|j
|jgzD]}|j||j�� |j|jz|jgzD]}|j||j�� yr)�v4_addresses�assertInr��v6_addresses�v6_scoped_addressesr�r�r��assertNotInr�r�r�s  r�test_containmentz ComparisonTests.test_containment�s-���$�$�C��M�M�#�t�z�z�*�%��$�$�t�'?�'?�?�C��M�M�#�t�z�z�*�@��$�$�t�'?�'?�?�C��M�M�#�t�0�0�1�@��?�?�d�j�j�$�2C�2C�%D�D�C����S�$�*�*�-�E��?�?�d�j�j�$�2C�2C�%D�D�C����S�$�"3�"3�4�E��?�?�T�%;�%;�;�t�z�z�l�J�C����S�$�*�*�-�Krc�r���|jD]��|jD]��t�t���st�t���r�.|jt��fd��|jt��fd��|jt��fd��|jt��fd������y)Nc�����kSrr0�r'r(s��r�<lambda>z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>��	���S�3�Yrc�����kDSrr0rs��rr
z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>�rrc�����kSrr0rs��rr
z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>��	���S�C�Zrc�����k\Srr0rs��rr
z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>�rr)r��
isinstance�typer?r@r&s @@r�test_mixed_type_orderingz(ComparisonTests.test_mixed_type_ordering�s�����+�+�C��/�/���c�4��9�-��C��c��1K���!�!�)�->�?��!�!�)�->�?��!�!�)�-?�@��!�!�)�-?�@�
0�,rc�<�t�}|jD�]O}|jt�5||kddd�|jt�5||kDddd�|jt�5||kddd�|jt�5||k\ddd�|j	|t
k�|j
|t
kD�|j	|t
k�|j
|t
k\�|j
|tk�|j	|tkD�|j
|tk�|j	|tk\���Ry#1swY��7xYw#1swY��!xYw#1swY��xYw#1swY��xYwr)r�r�r?r@rrr�rr�s   r�test_foreign_type_orderingz*ComparisonTests.test_foreign_type_ordering�s%������+�+�C��"�"�9�-��e��.��"�"�9�-��e��.��"�"�9�-��u��.��"�"�9�-��u��.��O�O�C�'�M�*����S�7�]�+��O�O�C�7�N�+����S�G�^�,����S�8�^�,��O�O�C�(�N�+����S�H�_�-��O�O�C�8�O�,�!,�-�-��-�-��-�-��-�-�s/�E+�E8�6F�F�+E5	�8F	�F	�F	c��|j|j|jg}|j|j|j
g}|j|j|jg}|j|t|jtj���|j|t|jtj���|j|t|jtj���|j||zt|j|jztj���|jt tjt"��y)N)�key)r�r�r�r�r�r�r�r�r�r%�sortedr�r�get_mixed_type_keyr�r�r�r�)r�
v4_ordered�
v6_ordered�v6_scoped_ordereds    r�test_mixed_type_keyz#ComparisonTests.test_mixed_type_key�s,���k�k�4�:�:�t�{�{�;�
��k�k�4�:�:�t�{�{�;�
�!�/�/��1B�1B�D�DV�DV�W����������$-�$@�$@�B�	C�	
��������$-�$@�$@�B�	C�	
���*��� 6� 6�$-�$@�$@�B�	C�	
����&7�7�����$�2H�2H� H�$-�$@�$@�B�	C�	
�����)E�)E�f�)M�Nrc� �tjd�}tjd�}tjd�}tjd�}tjd�}tjd�}|jt|j
|�|jt|j|�|jt|j
|�|jt|j|�|jt|j
|�|jt|j|�|jt|j
|�|jt|j|�|jt|j
|�|jt|j|�|jt|j
|�|jt|j|�|jt|j
|�|jt|j|�|jt|j
|�|jt|j|�y)Nrxr�r�)rr�r�r?r@�__lt__�__gt__)rr�r�r�r�r�r�s       r�test_incompatible_versionsz*ComparisonTests.test_incompatible_versionss����%�%�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�%9�6�B����)�]�%9�%9�6�B����)�\�%8�%8�%�@����)�\�%8�%8�%�@rN)/r*r+r,rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�rr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr	rrrr#r0rrr�r�ps���
"�Y�
"�
"�1�
%�F�!�I�!�!�!�$�E�
$�Y�
$�
$�Q�
'�F�
"�Y�
"�
"�1�
%�F�!�I�!�!�!�$�E�
$�Y�
$�
$�Q�
'�F�)�I�)�)�+�6�M�'�)�'�'��4�L�*�9�*�*�;�7�M��F�#�L����'�J��F�#�L����'�J�(�-�8��+�|�n�<���:�%�G�!�$5�5��#�i�#�#�A�&�G�
"�Y�
"�
"�1�
%�F�%�i�%�%�a�(�G�#�i�#�#�A�&�G�
"�Y�
"�
"�1�
%�F�%�i�%�%�a�(�G�*�Y�*�*�;�7�N�)�I�)�)�+�6�M�,�Y�,�,�[�9�N�@�.�*�.�
.�)�,
.�A�-�(O�&Arr�c���eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#�Z%d$�Z&d%�Z'd&�Z(d'�Z)d(�Z*d)�Z+d*�Z,d+�Z-d,�Z.d-�Z/d.�Z0d/�Z1d0�Z2d1�Z3d2�Z4d3�Z5d4�Z6d5�Z7d6�Z8d7�Z9d8�Z:d9�Z;d:�Z<d;�Z=d<�Z>d=�Z?d>�Z@d?�ZAd@�ZBdA�ZCdB�ZDdC�ZEdD�ZFdE�ZGdF�ZHdG�ZIdH�ZJdI�ZKdJ�ZLdK�ZMdL�ZNyM)N�IpaddrUnitTestc���tjd�|_tjd�|_tj
d�|_tjd�|_tjd�|_	tjd�|_tjd�|_tjd�|_
tjd	�|_y)
Nr,�
1.2.3.4/24�
1.2.3.0/24�2001:658:22a:cafe:200:0:0:1z2001: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/64z2001:658:22a:cafe::%scope/64)rr��ipv4_addressr��ipv4_interfacer��ipv4_networkr��ipv6_address�ipv6_interfacer��ipv6_network�ipv6_scoped_address�ipv6_scoped_interface�ipv6_scoped_networkr
s r�setUpzIpaddrUnitTest.setUp's���%�1�1�)�<���'�5�5�l�C���%�1�1�,�?���%�3�3�)�+���'�5�5�,�.���%�1�1�2J�K���#,�#:�#:�/�$1�� �%.�%<�%<�2�&4��"�#,�#8�#8�9W�#X�� rc��|jdttjd���|jdttjd���|jdttjd���y)NzIPv4Interface('1.2.3.4/32')r,zIPv6Interface('::1/128')r�zIPv6Interface('::1%scope/128')r�)r%r;rr�r�r
s r�testReprzIpaddrUnitTest.testRepr7sp�����6��i�5�5�i�@�A�	C����3��i�5�5�e�<�=�	?����9��i�5�5�k�B�C�	Erc��tjd�}tjd�}|jtjd�|�|jtj|df�|�|jtjd�|�|jtjd�|�|jtj|df�|�|jtjd�|�|j	t
�5tjd	�ddd�|j	t
�5tj|d
f�ddd�|j	t
�5tjd�ddd�|j	t
�5tjd�ddd�|j	t
�5tj|d
f�ddd�|j	t
�5tjd�ddd�tjd�}|jtjd	d��|�|jtj|d
fd��|�|jtjdd��|�|jtjdd��|�|jtj|d
fd��|�|jtjdd��|�tjd�}tjd�}|jtjd�|�|jtj|d
f�|�|jtjd�|�|jtjd�|�|jtj|d
f�|�|jtjd�|�|jtjd	�tjd��|jtjd�tjd��|j	t
�5tjd�ddd�|j	t
�5tjd�ddd�y#1swY���xYw#1swY���xYw#1swY���xYw#1swY��xYw#1swY��WxYw#1swY��1xYw#1swY��xYw#1swYyxYw)Nr�z192.0.2.1/32)r�rhrh)�rh)r�rHrH)r9rH)r�rbrb)r9rb)r�rfrf)r9rfrcF��strictrare)�rfr`)r<rbz192.0.2.1/24)r�z255.255.255.255.0)rr�r�r%r?r�r�r�)r�iprMs   r�
testIPv4TuplezIpaddrUnitTest.testIPv4Tuple@s���
�
"�
"�;�
/���#�#�N�3������.�.�/@�A�3�G�����.�.��B�x�8�#�>�����.�.�/?�@�#�F�����.�.�0C�D�EH�	J�����.�.��0A�0C�D�EH�	J�����.�.�0C�D�EH�	J��
�
�z�
*��!�!�"3�4�+�
�
�
�z�
*��!�!�2�r�(�+�+�
�
�
�z�
*��!�!�"2�3�+�
�
�
�z�
*��!�!�"@�A�+�
�
�
�z�
*��!�!�2��"7�8�+�
�
�
�z�
*��!�!�"?�@�+��#�#�N�3������.�.�/@�6;�=�>A�	C�����.�.��B�x�6;�=�>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�����.�.�/@�A�3�G�����.�.��B�x�8�#�>�����.�.�/?�@�#�F�����0�0�1B�C�"�0�0��@�	B�����0�0�1A�B�"�0�0��@�	B��
�
�z�
*��!�!�"D�E�+��
�
�z�
*�� � �!C�D�+�
*�k+�
*��
*�
*��
*�
*��
*�
*��
*�
*��
*�
*��N+�
*��+�
*�s`�"T)�T6�
U�=U�0U�%U*�U7�
V�)T3�6U�U
�U�U'�*U4�7V�Vc�f�tjd�}tjd�}|jtjd�|�|jtjd�|�|jtj|df�|�tjd�}tjd�}|jtjd�|�|jtjd�|�|jtj|d	f�|�tjd
�}tjd�}|j	t
�5tjd�ddd�|j	t
�5tjd
�ddd�|j	t
�5tj|df�ddd�tjd�}|jtjdd��|�|jtjd
d��|�|jtj|dfd��|�|jtjd�tjd��|jtjd�tjd��tjd�}|j	t
�5tjd�ddd�|j	t
�5tj|df�ddd�|j	t
�5tjd�ddd�|j	t
�5tjd�ddd�y#1swY��RxYw#1swY��,xYw#1swY��xYw#1swY��xYw#1swY��xYw#1swY�|xYw#1swYyxYw)Nr:z2001:db8::/128)r:�128)�	n� r�r@z
2001:db8::/96)r:�96)rA�`rBr;�2001:db8::1)rDrC)�	n� rCrCFr:)rDrBz2001:db8::1/96)rErB�2001:db8::1%scope)rFrC)rDrf)rr�r�r%r?r�r�r�)rr=rM�	ip_scopeds    r�
testIPv6TuplezIpaddrUnitTest.testIPv6Tuple�sa��
�
"�
"�<�
0���#�#�$4�5������.�.�/D�E��	�����.�.�=�?��	�	
����.�.��E�{�;��	�
�
"�
"�<�
0���#�#�O�4������.�.�/C�D��	�����.�.�<�>��	�	
����.�.��D�z�:��	��)�)�*<�=�	��
"�
"�=�
1��
�
�
�z�
*��!�!�"5�6�+�
�
�
�z�
*��!�!�#<�
=�+��
�
�z�
*��!�!�2�r�(�+�+��#�#�O�4������.�.�/B�6;�=��	�	
����.�.�I�$)�+��	�	
����.�.��B�x��F��	�	
����0�0�1F�G�"�0�0�1A�B�	D�����0�0�>�@�"�0�0�1A�B�	D��)�)�*=�>�	�
�
�
�z�
*��!�!�";�<�+�
�
�
�z�
*��!�!�9�b�/�2�+�
�
�
�z�
*��!�!�"B�C�+��
�
�z�
*�� � �!A�B�+�
*�M+�
*��
*�
*��+�
*��,+�
*��
*�
*��
+�
*��+�
*�sT�6O�)O)�O6�"P�P�
P�=P'�O&�)O3�6P�P�P�P$�'P0c���|jtjd�dztjd��|jtjd�dz
tjd��|jtjd�dztjd��|jtjd�dz
tjd��|j	tjd	�dztjd
��|j	tjd
�dz
tjd	��y)Nrx�z1.1.2.0�z1.1.0.1r�i��z::ffffr�z::ffff%scope)r%rr�r�r�r
s r�testAddressIntMathz!IpaddrUnitTest.testAddressIntMath�s������.�.�y�9�C�?�"�.�.�y�9�	;�����.�.�y�9�C�?�"�.�.�y�9�	;�����.�.�u�5��C�"�.�.�x�8�	:�����.�.�x�8�I�F�"�.�.�u�5�	7����I�1�1�+�>�)�L�%�1�1�.�A�	C����I�1�1�.�A�Y�O�%�1�1�+�>�	@rc�p�|jttjd�|jttjdtjz�|jttj
d�|jttj
dtjz�y)Nrer�)r?r�r�v4_int_to_packed�
IPV4LENGTH�v6_int_to_packed�
IPV6LENGTHr
s r�testInvalidIntToBytesz$IpaddrUnitTest.testInvalidIntToBytes�s~�����*�i�&@�&@�"�E����*�i�&@�&@��y�3�3�3�	5����*�i�&@�&@�"�E����*�i�&@�&@��y�3�3�3�	5rc	�P�tjd�}tjd�}tjd�}|jttj|g��||fg�|jttj||g��||f||fg�|jttj|||g��||fg�|jdtj
dd��|jdt
|j��y)Nz10.10.10.10z10.10.10.11z10.10.10.12r�rzIPv4Network('1.2.3.0/24'))rr�r%�list�_find_address_range�_count_righthand_zero_bitsr;r.)r�ip1�ip2�ip3s    r�
testInternalszIpaddrUnitTest.testInternals�s����#�#�M�2���#�#�M�2���#�#�M�2������i�;�;�S�E�B�C���*��	'�����i�;�;�S�#�J�G�H���*�s�C�j�1�	3�����i�;�;�S�#�s�O�L�M���*��	'�����i�B�B�1�c�J�K����4�d�4�;L�;L�6M�Nrc���|jt|jj�d�|jt	|jj�d�|jt|j
j�d�|jt	|j
j�d�|jt	|j
j�d�|jt|jj�d�|jt	|jj�d�|jt	|jj�d�y)Ni�1.2.3.0l	�/YE� �2001:658:22a:cafe::�::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r%�intr.�network_addressrJr1rLr4r
s r�testGetNetworkzIpaddrUnitTest.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�	2rc��|j|jjtjd�j�tj
d�}tj
d�}tj
d�}|j|tj
t
|j���|j|tj
t
|j���|j|tj
t
|j���d}|j|jjtj|�j�|j|jjtj|�j�|jtj
|jj�jd�|jtj
|jj�jd�|jtj
|jj�jd�y)NrEr,r)r+�	�/YE� ��)r%r-�_iprr�r�r_r`r�r0r�r3r,�versionr/r2)r�ipv4�ipv6�ipv6_scoped�v6_ints     r�
testIpFromIntzIpaddrUnitTest.testIpFromInt�s�������,�,�0�0�"�0�0��:�>�>�	@��#�#�I�.���#�#�$A�B���*�*�+N�O������y�3�3�C��8L�8L�4M�N�O�����y�3�3�C��8L�8L�4M�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��	rc���tj}|j|jjtj
d�j�|j|d�|d��|j|jjtj
d�j�|j|d�|d��|j|d�|d��y)	NrF�255.254.253.252������ X*��ffff:2:3:4:ffff::�����rzs)rr�r%r-rfr�r0r=r�s  r�testIpFromPackedzIpaddrUnitTest.testIpFromPackeds����&�&������,�,�0�0�"�/�/�0C�D�H�H�	J�����!2�3� �!4�5�	7�����,�,�/�/�"�/�/�8�9�9;��	=�	
����!4�5� �"6�7�	8�	
������ ��.�	0rc�8�|jt|jj�d�|jt	|jj�d�|jt|j
j�d�|jt	|j
j�d�|jt|jj�d�|jt	|jj�d�y)NrEr,rc�2001:658:22a:cafe:200::1)r%r_r-r=rJr0r3r
s r�	testGetIpzIpaddrUnitTest.testGetIp&s�������T�0�0�3�3�4�h�?�����T�0�0�3�3�4�i�@�����T�0�0�3�3�4�?�	A�����T�0�0�3�3�4�3�	5�����T�7�7�:�:�;�?�	A�����T�7�7�:�:�;�3�	5rc�*�|j|jjd�|jt|jj�d�|j|j
jd�|jt|jj�d�|j|jjjd�|jt|jjj�d�y)N�scope)
r%r/�scope_idrJr2r0r3r1r`r4r
s r�testGetScopeIdzIpaddrUnitTest.testGetScopeId3s�������*�*�3�3��	�����T�5�5�>�>�?� �	"�����,�,�5�5��	�����T�7�7�@�@�A� �	"�����*�*�:�:�C�C��	�����T�5�5�E�E�N�N�O� �	"rc��|jt|jj�d�|jt	|jj�d�|jt|j
j�d�|j|j
jd�|jt|jj�d�|j|jjd�y)Nl�rfl	������@)r%r_r.rKrJr1�	prefixlenr4r
s r�testGetNetmaskzIpaddrUnitTest.testGetNetmaskAs�������T�.�.�6�6�7��D�����T�.�.�6�6�7��I�����T�.�.�6�6�7�@�	B�����*�*�4�4�b�9�����T�5�5�=�=�>�@�	B�����1�1�;�;�R�@rc�b�tjd�}|jt|jj
�d�|j|j
d�d�tjd�}|jt|jj
�d�|j|j
d�d�tjd�}|jt|jj
�d�|j|j
d�d�y)N�	1.2.3.4/0r�0z::1/0z::1%scope/0)rr�r%r_r�rK�_prefix_from_prefix_stringr�)r�ipv4_zero_netmask�ipv6_zero_netmask�ipv6_scoped_zero_netmasks    r�testZeroNetmaskzIpaddrUnitTest.testZeroNetmaskKs���%�3�3�K�@������.�6�6�>�>�?��C����*�E�E�c�J�A�N�%�3�3�G�<������.�6�6�>�>�?��C����*�E�E�c�J�A�N�#,�#:�#:�=�#I� �����5�=�=�E�E�F��J����1�L�L�S�Q�ST�Urc�f�tjd�}|j|jd�y)Nz127.0.0.0/0.0.0.255rb)rr�r%r}�rrMs  r�testIPv4NetzIpaddrUnitTest.testIPv4NetXs'���#�#�$9�:���������+rc�8�|jt|jj�d�|jt	|jj�d�|jt|j
j�d�|jt	|j
j�d�|jt|jj�d�|jt	|jj�d�y)Ni��	1.2.3.255l	�����/YE� �%2001:658:22a:cafe:ffff:ffff:ffff:ffff)r%r_r.�broadcast_addressrJr1r4r
s r�testGetBroadcastzIpaddrUnitTest.testGetBroadcast\s�������T�.�.�@�@�A�8�L�����T�.�.�@�@�A�;�O�����T�.�.�@�@�A�?�	A�����T�.�.�@�@�A�@�	B�	
����T�5�5�G�G�H�?�	A�����T�5�5�G�G�H�@�	Brc�$�|j|jjjd�|j|jjjd�|j|j
jjd�y)Nrbr|)r%r-r�r}r0r3r
s r�testGetPrefixlenzIpaddrUnitTest.testGetPrefixlenjsh������,�,�4�4�>�>��C�����,�,�4�4�>�>��C�����3�3�;�;�E�E�r�Jrc���|j|jj�jd�|jt	|jj�j
�d�|jt
jd�jj�t
jd��|j|jj�jd�|jt	|jj�j
�d�|jt
jd�jj�t
jd��|j|jj�jd�|jt	|jj�j
�d�y)N�z1.2.2.0�	0.0.0.0/0�?r]z::0/0)r%r.�supernetr}rJr`rr�r�r�r1r�r�r4r
s r�testGetSupernetzIpaddrUnitTest.testGetSupernetosk������*�*�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�.�	0rc��|j|jjd�jd�|jt	|jjd�j
�d�|j|jjd�jd�|jt	|jjd�j
�d�|j|jjd�jd�|jt	|jjd�j
�d�y)Nrs�z1.2.0.0�=z2001:658:22a:caf8::)r%r.r�r}rJr`r1r4r
s r�testGetSupernet3zIpaddrUnitTest.testGetSupernet3�s������*�*�3�3�A�6�@�@�"�E�����T�.�.�7�7��:�J�J�K�"�	$�	
����*�*�3�3�A�6�@�@�"�E�����T�.�.�7�7��:�J�J�K�.�	0�����1�1�:�:�1�=�G�G��L�����T�5�5�>�>�q�A�Q�Q�R�.�	0rc��|jt|jjdd��|jt|jjd��|j	|jjd��|jjd���|jt|j
jdd��|jt|j
jd��|j	|j
jd��|j
jd	���|jt|jjdd��|jt|jjd��|j	|jjd��|jjd	���y)
Nr�r>��prefixlen_diff�
new_prefix��r��r���A�>)r?r�r.r�r%r1r4r
s r�testGetSupernet4zIpaddrUnitTest.testGetSupernet4�s������*�d�&7�&7�&@�&@�)*�q�	�	:����*�d�&7�&7�&@�&@�%'�	�	)�����*�*�3�3�1�3�E��*�*�3�3�r�3�B�	D�	
���*�d�&7�&7�&@�&@�)*�q�	�	:����*�d�&7�&7�&@�&@�%'�	�	)�����*�*�3�3�1�3�E��*�*�3�3�r�3�B�	D����*�d�&>�&>�&G�&G�)*�q�	�	:����*�d�&>�&>�&G�&G�%'�	�	)�����1�1�:�:�!�:�L��1�1�:�:�b�:�I�	Krc��t|jj��}|jdt	|��|jtjd�|d�|jtjd�|d�tjd�}t|j��}|jdt	|��|jtjd�|d�|jtjd	�|d�tjd
�}t|j��}|jdt	|��|jtjd�|d�|jtjd	�|d�tjd�tjd�g}d
}d}|j|ttj|�j���|j|ttj|�j���|jttj|�j��ttj|�j���tjd�g}d}d}|j|ttj|�j���|j|ttj|�j���|jttj|�j��ttj|�j���tjd�tjd�g}d}d}|j|ttj|�j���|j|ttj|�j���|jttj|�j��ttj|�j���tjd�g}d}d}|j|ttj|�j���|j|ttj|�j���|jttj|�j��ttj|�j���y)N�z1.2.3.1rz	1.2.3.254re�2001:658:22a:cafe::/120rJ�2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/120�2.0.0.0z2.0.0.1z
2.0.0.0/31)r��r,rG)r,rhr]z2001:658:22a:cafe::/127)r]��2001:658:22a:cafe::1/128)r�r�)
rTr.�hostsr%�lenrr�r�r�r�)rr�r1r4�addrs�str_args�tpl_argss       r�	testHostszIpaddrUnitTest.testHosts�s_���T�&�&�,�,�.�/������c�%�j�)�����.�.�y�9�5��8�D�����.�.�{�;�U�2�Y�G� �,�,�-F�G���\�'�'�)�*������c�%�j�)�����.�.�/E�F��a��Q�����.�.�/F�G��r��S�'�3�3�4S�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�2�8�<�B�B�D�E��i�2�2�8�<�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�2�8�<�B�B�D�E��i�2�2�8�<�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�2�8�<�B�B�D�E��i�2�2�8�<�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�2�8�<�B�B�D�E��i�2�2�8�<�B�B�D�E�	Grc��|jt|jjd���t|jjd����|j	t
t|jjd���|j	t
t|jjdd���|jt|jjd���t|jjd����|j	t
t|jjd	���|j	t
t|jjdd���|jt|jjd���t|jjd����|j	t
t|jjd	���|j	t
t|jjdd���y)
Nrsr��r�r�r�rd�Dr�)	r%rr.�subnetsr?r�rTr1r4r
s r�testFancySubnettingz"IpaddrUnitTest.testFancySubnetting�s�������� 1� 1� 9� 9�� 9� K�L��� 1� 1� 9� 9�R� 9� H�I�	K����*�d��+�+�3�3�r�3�B�	D����*�d��+�+�3�3�1�>@�4�B�	C�	
����� 1� 1� 9� 9�� 9� K�L��� 1� 1� 9� 9�R� 9� H�I�	K����*�d��+�+�3�3�r�3�B�	D����*�d��+�+�3�3�1�>@�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�	Krc��|jt|jj��djd�|jtt|jj��dj�d�|jtt|jj��dj�d�|jt|jj��djd�|jt|jj��djd�y)Nrr�r\r>z	1.2.3.128r�)	r%rTr.r�r}rJr`r1r4r
s r�testGetSubnetszIpaddrUnitTest.testGetSubnets�s������d�/�/�7�7�9�:�1�=�G�G��L�����T��%�%�-�-�/�1�12�4�4C�O�E�"�	$�	
����T��%�%�-�-�/�1�12�4�4C�O�E�$�	&�	
����d�/�/�7�7�9�:�1�=�G�G��L�����d�6�6�>�>�@�A�!�D�N�N�PR�Src�&�tjd�}|j�D�cgc]
}t|���}}|jd�D�cgc]
}t|���}}|j	|dg�|j	||�ycc}wcc}w)NrGr�)rr�r�rJr%)rr=rO�subnets1�subnets2s     r�testGetSubnetForSingle32z'IpaddrUnitTest.testGetSubnetForSingle32�sz��
�
"�
"�<�
0��$&�J�J�L�1�L�q�C��F�L��1�$&�J�J�q�M�2�M�q�C��F�M��2�����L�>�2�����8�,��2��2s�B	�Bc�H�tjd�}|j�D�cgc]
}t|���}}|jd�D�cgc]
}t|���}}|j	|dg�|j	||�tjd�}|j�D�cgc]
}t|���}}|jd�D�cgc]
}t|���}}|j	|dg�|j	||�ycc}wcc}wcc}wcc}w)Nr�r�r�)rr�r�rJr%)rr=rOr�r�rGs      r�testGetSubnetForSingle128z(IpaddrUnitTest.testGetSubnetForSingle128s���
�
"�
"�9�
-��$&�J�J�L�1�L�q�C��F�L��1�$&�J�J�q�M�2�M�q�C��F�M��2�����I�;�/�����8�,��)�)�/�:�	�$-�$5�$5�$7�8�$7�q�C��F�$7��8�$-�$5�$5�a�$8�9�$8�q�C��F�$8��9�����O�#4�5�����8�,��2��2��
9��9s�D�D�/D�Dc�,�|jjd�D�cgc]
}t|���}}|j|gd��|jjd�D�cgc]
}t|���}}|j|gd��ycc}wcc}w)Nr�)z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26)�2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r.r�rJr%r1)rrO�ips�ipsv6s    r�testSubnet2zIpaddrUnitTest.testSubnet2s���#�0�0�8�8��;�<�;�!�s�1�v�;��<�����I�	K�"&�!2�!2�!:�!:�1�!=�>�!=�A��Q��!=��>�����
,�	-��
=��
?s�B�#Bc��|jjd�D�cgc]
}t|���}}|j|ddgd��|j|ddgd��|jt	|�d�tjd�}|jd�D�cgc]
}t|���}}|j|ddgd��|j|ddgd	��|jt	|�d�ycc}wcc}w)
N�rs)z
1.2.3.0/32z
1.2.3.1/32z
1.2.3.2/32���)z1.2.3.253/32z1.2.3.254/32z1.2.3.255/32rKr�)z2001:658:22a:cafe::/128r�z2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)r.r�rJr%r�rr�)rrOr�r1s    r�testGetSubnets3zIpaddrUnitTest.testGetSubnets3s��#'�#4�#4�#<�#<�Q�#?�@�#?�a�3�q�6�#?��@������!��6�	8��������<�	>�����W��s�+� �,�,�-F�G��#/�#7�#7��#:�;�#:�a�3�q�6�#:��;������!��
)�	*�	
�������
*�	+�	
����W��s�+��#A��<s�D�#Dc��|jtt|jjjd��|jtt|jjd��|jtt|jjjd��|jtt|jjd��|jtt|jjjd��|jtt|jjd��y)N�	r��r?r�rTr-r�r�r.r0r1r3r4r
s r�testSubnetFailsForLargeCidrDiffz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiff0s������*�d��-�-�5�5�=�=�a�@�	B����*�d��+�+�3�3�A�6�	8����*�d��-�-�5�5�=�=�b�A�	C����*�d��+�+�3�3�B�7�	9����*�d��4�4�<�<�D�D�R�H�	J����*�d��2�2�:�:�2�>�	@rc�B�|jt|jjjd�|jt|j
jjd�|jt|jjjd�y)Nr�r�)r?r�r-r�r�r0r3r
s r�!testSupernetFailsForLargeCidrDiffz0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff>sz�����*��-�-�5�5�>�>��	D����*��-�-�5�5�>�>��	D����*��4�4�<�<�E�E�r�	Krc��|jtt|jjjd��|jtt|jjd��|jtt|jjjd��|jtt|jjd��|jtt|jjjd��|jtt|jjd��y)Nrer�r
s r�"testSubnetFailsForNegativeCidrDiffz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffFs������*�d��-�-�5�5�=�=�b�A�	C����*�d��+�+�3�3�B�7�	9����*�d��-�-�5�5�=�=�b�A�	C����*�d��+�+�3�3�B�7�	9����*�d��4�4�<�<�D�D�R�H�	J����*�d��2�2�:�:�2�>�	@rc��|j|jjd�|jt|jj	��djd�|j|jj�jd�|j|jjd�|jt|jj	��djd�|j|jj�jd�|j|jjd�|jt|jj	��djd�|j|jj�jd�y)NrKrr�i�ll )r%r.�
num_addressesrTr�r�r1r4r
s r�testGetNum_Addressesz#IpaddrUnitTest.testGetNum_AddressesTsc������*�*�8�8�#�>�����d�/�/�7�7�9�:�1�=�K�K��	�����*�*�3�3�5�C�C�S�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�-�	/rc��|jtjd�|j�|j	tjd�|j�tj
d�}|j||j�|j
tjd�jtjd���y)Nz1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15)	rrr�r.rr�r�r��__contains__)r�addr1s  r�testContainszIpaddrUnitTest.testContainses����
�
�i�-�-�n�=��'�'�	)�����0�0��>��*�*�	,��%�%�j�1���
�
�e�T�.�.�/�	
����.�.�|�<�I�I��%�%�l�3�5�	6rc��|jt|jd�d�|jt|jj
d�|jt|jd�d�|jt|jj
d�|jt|jd�d�|jt|jj
d�y)Nrt�1.2.3.5rKz2001:658:22a:cafe::5r�)r%rJr.r?�
IndexError�__getitem__r1r4r
s r�testNthzIpaddrUnitTest.testNthrs�������T�.�.�q�1�2�I�>����*�d�&7�&7�&C�&C�S�I�����T�.�.�q�1�2�/�	1����*�d�&7�&7�&C�&C�W�M�����T�5�5�a�8�9�/�	1����*�d�&>�&>�&J�&J�G�Trc��tjd�}|jd|j�t	|�}|jdt|d��|jdt|d��|jdt|d��|jdt|d��|j|d|d�y)Nz172.31.255.128/255.255.255.240�z172.31.255.128rz172.31.255.143re)rr�r%r}rTrJ)rrN�	addr_lists   r�testGetitemzIpaddrUnitTest.testGetitem}s����$�$�%E�F������T�^�^�,���J�	����)�3�y��|�+<�=����)�3�t�A�w�<�8����)�3�y��}�+=�>����)�3�t�B�x�=�9�����2���R��1rc��|j|jtjd�k(�|j	|jtjd�k(�|j	|jtj
d�k(�|j	|jtj
d�k(�|j	|jdk(�|j	|jgk(�|j	|jdk(�|j|jtj
d�k(�|j	|jtj
d�k(�|j	|jtjd�k(�|j	|jdk(�|j	|jgk(�|j	|jdk(�|j|jtj
d	�k(�|j	|jtj
d
�k(�|j	|jtj
d�k(�|j	|jtj
d�k(�|j	|jtjd�k(�|j	|jdk(�|j	|jgk(�|j	|jdk(�y)Nr'�
1.2.3.4/23�::1.2.3.4/24�::1.2.3.4%scope/24r5r��2001:658:22a:cafe:200::1/64�2001:658:22a:cafe:200::1/63�!2001:658:22a:cafe:200::1%scope/64�!2001:658:22a:cafe:200::1%scope/63)rr-rr�r�r�r0r3r
s r�	testEqualzIpaddrUnitTest.testEqual�s�������+�+�!�/�/��=�>�	?�����,�,�"�0�0��>�?�	@�����,�,�"�0�0��@�A�	B�����,�,�"�0�0�1E�F�G�	H�����,�,��2�3�����,�,��2�3�����,�,��1�2�����+�+��#�#�$A�B�C�	D�����,�,��#�#�$A�B�C�	D�����,�,�"�0�0��>�?�	@�����,�,��2�3�����,�,��2�3�����,�,��1�2�����2�2��#�#�$G�H�I�	J�����3�3��#�#�$G�H�I�	J�����3�3��#�#�$A�B�C�	D�����3�3��#�#�$A�B�C�	D�����3�3�"�0�0��>�?�	@�����3�3�r�9�:�����3�3�r�9�:�����3�3�q�8�9rc�	�|j|jtjd�k7�|j	|jtjd�k7�|j	|jtj
d�k7�|j	|jtj
d�k7�|j	|jdk7�|j	|jgk7�|j	|jdk7�|j	|jtjd�k7�|j	|jdk7�|j	|jgk7�|j	|jdk7�|j|jtj
d�k7�|j	|jtj
d	�k7�|j	|jtjd�k7�|j	|jdk7�|j	|jgk7�|j	|jdk7�|j	|jtjd
�k7�|j	|jdk7�|j	|jgk7�|j	|jdk7�|j|jtj
d�k7�|j	|jtj
d�k7�|j	|jtj
d�k7�|j	|jtj
d	�k7�|j	|jtjd�k7�|j	|jdk7�|j	|jgk7�|j	|jdk7�|j	|jtjd
�k7�|j	|jdk7�|j	|jgk7�|j	|jdk7�y)
Nr'r�r�r�r5r�r�r�r�r,r�r�)r�r-rr�rr�r,r�r0r/r3r2r
s r�testNotEqualzIpaddrUnitTest.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�2�b�8�9�����2�2�b�8�9�����2�2�a�7�8�����0�0�!�-�-�i�8�9�	:�����0�0�B�6�7�����0�0�B�6�7�����0�0�A�5�6rc�`�|jttjd��d�y)Nz1.2.3.4/255.255.255.255rG�r%rJrr�r
s r�testSlash32Constructorz%IpaddrUnitTest.testSlash32Constructor�s*������Y�4�4�-�/�0�1=�	?rc��|jttjd��d�|jttjd��d�y)Nr�r�)r%rJrr�r
s r�testSlash128Constructorz&IpaddrUnitTest.testSlash128Constructor�sH������Y�4�4�Y�?�@�"+�	-�����Y�4�4�_�E�F�"1�	3rc�`�|jttjd��d�y)Nz1.2.3.4/0.0.0.0r�r�r
s r�testSlash0Constructorz$IpaddrUnitTest.testSlash0Constructor�s&������Y�4�4�5F�G�H�%�	'rc��tjd�}tjd�}tjd�}tjd�}tjd�}tjd�}tj||||||g�}|jt	|�tj
d�tj
d�g�tjd�}tjd�}tjd�}tjd�}tj||||g�}|jt	|�tj
d�g�tj
d�}tj
d	�}tj
d
�}tj
d�}tj
d�}tj
d
�}tj||||||g�}|jt	|�tj
d
�tj
d�g�tj||g�}|jt	|�tj
d�g�tj
d�x}}	|jt	tj||	g��|g�tjd�x}}	|jt	tj||	g��tjd�g�tjd�}tjd�}tjd�}tj|||g�}|jt	|�|g�tjd�}tjd�}tjd�}tj|||g�}|jt	|�|g�tjd�tjd�ftj
d�tjd�ftj
d�tjd�fg}
|
D],\}}|jttj||g��.tjd�tjd�ftj
d�tjd�ftj
d�tjd�fg}
|
D],\}}|jttj||g��.y)N�1.1.1.0rx�1.1.1.2z1.1.1.3z1.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::/96z2001::%scope/100z2001::%scope/120z2001::%scope/96r�z
1.1.0.0/32z
2001::/128r�z2001::%scope/128)rr��collapse_addressesr%rTr�r�r�r�r?r@)rrWrXrY�ip4�ip5�ip6�	collapsed�ip_same1�ip_same2�addr_tupless           r�testCollapsingzIpaddrUnitTest.testCollapsing�s����#�#�I�.���#�#�I�.���#�#�I�.���#�#�I�.���#�#�I�.���#�#�I�.���0�0�
�#�s�C��c�*�,�	�����i���&�&�|�4��&�&�|�4�6�	7�
�#�#�I�.���#�#�I�.���#�#�I�.���#�#�I�.���0�0�#�s�C��1E�F�	�����i��#�/�/��=�>�	@��#�#�L�1���#�#�L�1���#�#�L�1���#�#�L�1���#�#�L�1���#�#�L�1���0�0�#�s�C��c�58�2:�;�	�����i��#�/�/��=�#�/�/��=�?�	@�
�0�0�#�s��<�	�����i��#�/�/��=�>�	@�(�3�3�L�A�A��8�����i�:�:��x�(�*�+�"��	%�
(�3�3�I�>�>��8�����i�:�:��x�(�*�+�#�.�.�|�<�=�	?��#�#�L�1���#�#�L�1���#�#�K�0���0�0�#�s�C��A�	�����i��3�%�0��#�#�$6�7���#�#�$6�7���#�#�$5�6���0�0�#�s�C��A�	�����i��3�%�0��%�%�i�0��%�%�e�,�.��&�&�|�4��&�&�|�4�6��&�&�|�4��&�&�|�4�6�
��$�H�C�����i��)E�)E�"�C�j�
*�$�
�%�%�i�0��%�%�k�2�4��&�&�|�4��&�&�'9�:�<��&�&�|�4��&�&�'9�:�<�
��$�H�C�����i��)E�)E�"�C�j�
*�$rc
�D	�tj}tjd�}tjd�}Gd�dtj�}|d�}|d�}|j	t
t|||��|j	tt||tjd���|j	tt||tjd���|jt
|||��dtjd��tjd	�}|jt
|||��tjd
�tjd	�g�tjd�}tjtjj�}|jtjd�gt
|||���tjd�}tjd
�}|jt
|||��dtjd��tjd�}|jt
|||��tjd�tjd�g�tjd�}tjd�}|jt
|||��dtjd��tjd�}|jt
|||��tjd�tjd�g�|j	t
t|tjd�tjd���|j	tt|tjd�tjd���|j	tt|tjd�tjd���|j	tt|tjd�tjd���y)Nr�z	1.1.1.255c��eZdZed��Zy)�3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addressc��y)N�r0r
s rrgz;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.version]s��rN)r*r+r,r-rgr0rr�IPv7Addressr\s��
�
��
rr	r�r�rr�z1.1.1.8z
1.1.1.0/29r�r�z$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z	1::%scopez*1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scopez	2::%scopez1.1.0.0rz)
r�summarize_address_ranger�r�r?r�rTr@r%r�r��	_ALL_ONESr�)r�	summarizerWrXr	�ip_invalid1�ip_invalid2s       r�testSummarizingzIpaddrUnitTest.testSummarizingTs����5�5�	��"�"�9�-���"�"�;�/��	�)�/�/�	�"�%�(��!�%�(�����*�d�#�K��=�	?�	
���)�T�#�C��)>�)>�u�)E�F�	H����)�T�#�C��)>�)>�{�)K�L�	N�	
����i��S�1�2�1�5�"�-�-�l�;�	=��"�"�9�-������i��S�1�2�#�.�.�|�<�#�.�.�y�9�;�	<��#�#�A�&���#�#�I�$9�$9�$C�$C�D�����)�/�/��<�=��i��S�1�2�	4��"�"�5�)���"�"�#I�J������i��S�1�2�1�5�"�-�-�h�7�	9��"�"�5�)������i��S�1�2�#�.�.�x�8�#�.�.�y�9�;�	<��"�"�;�/���"�"�#O�P������i��S�1�2�1�5�"�-�-�h�7�	9��"�"�;�/������i��S�1�2�#�.�.�x�8�#�.�.�y�9�;�	<�
	
���*�d�#�I�$8�$8��$C�$-�$8�$8��$C�E�	F�	
���)�T�#�I�$8�$8��$C�$-�$8�$8��$C�E�	F�	
���)�T�#�I�$8�$8��$C�$-�$8�$8��$C�E�	F�	
���)�T�#�I�$8�$8��$>�$-�$8�$8��$C�E�	Frc��|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�y)Nrxr�r��::2r�r�)rrr�r
s r�testAddressComparisonz$IpaddrUnitTest.testAddressComparison�s
�����	�,�,�Y�7�!�,�,�Y�7�8�	9����	�,�,�Y�7�!�,�,�Y�7�8�	9����	�,�,�U�3�!�,�,�U�3�4�	5����	�,�,�U�3�!�,�,�U�3�4�	5����	�,�,�[�9�!�,�,�[�9�:�	;����	�,�,�[�9�!�,�,�[�9�:�	;rc���|jtjd�tjd�k(�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�kD�|jtjd�tjd�kD�|jtjd�tjd�kD�|jtjd�tjd�k(�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�kD�|jtjd�tjd�kD�|jtjd�tjd�kD�|jtjd	�tjd	�k(�|jtjd	�tjd
�k�|jtjd	�tjd�k�|jtjd�tjd	�k�|jtjd
�tjd	�kD�|jtjd�tjd	�kD�|jtjd	�tjd�kD�|jtjd	�tjd�k(�|jtjd	�tjd�k�|jtjd	�tjd�k�|jtjd�tjd�k�|jtjd
�tjd�kD�|jtjd�tjd�kD�|jtjd	�tjd�kD�|jtjd�tjd	�k(�|jtjd�tjd
�k�|jtjd�tjd�k�|jtjd�tjd	�k�|jtjd�tjd	�kD�|jtjd�tjd	�kD�|jtjd�tjd�kD�y)
Nz
1.1.1.1/24z
1.1.1.1/16z
1.1.1.2/24z
1.1.1.2/16z::1/64z::1/80z::2/64z::2/48z::1%scope/64z::1%scope/80z::2%scope/64z::2%scope/48)rrr�r�r
s r�testInterfaceComparisonz&IpaddrUnitTest.testInterfaceComparison�s �����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>�	
���	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:�	
���	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@�	
����/�/��?�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:�	
����/�/��9�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@rc��tjd�}tjd�}tjd�}|j||k�|j||kD�|j|j	|�d�|j|j	|�d�|j|j	|�d�|j|j	|�d�|j|j	|�d�|j|j�|j�k�tjd�}tjd�}tjd	�}|j||k�|j||kD�|j|j	|�d�|j|j�|j�k�|jt|jj|j�tjd
�}tjd�}|jt|j|�|jt|j|�|jt|j|�|jt|j|�tjd�}|j!||k�|j!||kD�tjd
�}|j||k�|j!||k�|j!||kD�|j||kD�tjd�}|j||k�|j!||k�|j!||kD�|j||kD�tjd�}tjd�}tjd�}tjd�}||||g}||||g}|j#�|j||�||||g}|j#�|j||�|j%|jtj&d��t(�|j%|jtj&d��t(�|jtjd�tjd�k�|jtjd�tjd�k�|j!tjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|j!tjd�tjd�k�y)Nr�z
1.1.1.0/32r�rrer>z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96�::/0r�z
10.1.2.128/25z10.1.3.0/24z10.1.3.0/25z
10.10.10.0/31z
10.10.10.0z
10.10.10.2/31z
10.10.10.2rxr�r�r)rr�rr%�compare_networks�_get_networks_keyr�r?r@r.r1r�r�r!r"r�r��sort�assertIsr�r�)	rrWrXrYrirhr�r�unsorteds	         r�testNetworkComparisonz$IpaddrUnitTest.testNetworkComparison�s	���#�#�L�1���#�#�L�1���#�#�L�1������c�	�"�����c�	�"�����-�-�c�2�A�6�	
����-�-�c�2�B�7�����-�-�c�2�A�6�����-�-�c�2�B�7�����-�-�c�2�A�6�����-�-�/�#�2G�2G�2I�I�J��#�#�$4�5���#�#�$4�5���#�#�$9�:������c�	�"�����c�	�"�����-�-�c�2�B�7�����-�-�/�#�2G�2G�2I�I�J�	
���)��+�+�<�<��+�+�	-��&�&�v�.���&�&�{�3�����)�T�[�[�$�7����)�T�[�[�$�7����)�T�[�[�$�7����)�T�[�[�$�7��"�"�?�3������s��#�����s��#��"�"�=�1������c�	�"�����s��#�����s��#�����c�	�"��"�"�=�1������c�	�"�����s��#�����s��#�����c�	�"��"�"�?�3���"�"�<�0���"�"�?�3���"�"�<�0���s�C��%����c�3�'���
�
�������*���c�3�'���
�
�������*��
�
�c�j�j��!5�!5�l�!C�D�$�	&��
�
�c�j�j��!5�!5�l�!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�	6rc���|jttjd�|jttjd�|jttjd�y)Nz192.168.1.1/24z::1/120z
::1%scope/120)r?r�rr�r
s r�testStrictNetworksz!IpaddrUnitTest.testStrictNetworksOsK�����*�i�&:�&:�<L�M����*�i�&:�&:�I�F����*�i�&:�&:�O�Lrc�j�tjd�}tjd�}tjd�}|j|jj	|��|j|jj	|��|j|j	|��y)Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)rr�rr.�overlapsr�)rr��other2�other3s    r�testOverlapszIpaddrUnitTest.testOverlapsTs����%�%�l�3���&�&�|�4���&�&�}�5������)�)�2�2�5�9�:�����*�*�3�3�F�;�<��������/�0rc��d}tj|�}tjd|z�}|jt	|j
�t	|j
��tjd|z�}|j
|j
|j
�|jtjtjd�y)Nr\z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	rr�r�r%r_r=r�r?r)r�ipv4_stringrh�
v4compat_ipv6�
v4mapped_ipv6s     r�testEmbeddedIpv4zIpaddrUnitTest.testEmbeddedIpv4\s���#���&�&�{�3��!�/�/���0D�E�
�����]�-�-�.��D�G�G��=�!�/�/��k�0I�J�
����M�,�,�d�g�g�6����)�5�5�y�7N�7N�0�	2rc��|jtjd�tjd��|jtjd�tjd��|jtjd�tjd��|jtjd�tjd��|jtjd�tjd��|jtjd�tjd��|jtjd�tjd��|jtjd�tjd��y)	Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scope)r%rr�r�r
s r�testIPv6AddressTooLargez&IpaddrUnitTest.testIPv6AddressTooLargegsf������-�-�.@�A�#�.�.�/@�A�	C�	
����-�-�.?�@�#�.�.�/?�@�	B�	
����-�-�.F�G�#�.�.�/F�G�	I�����-�-�.E�F�#�.�.�/E�F�	H����I�0�0�1I�J�%�0�0�1B�C�	E����I�0�0�1H�I�%�0�0�1A�B�	D����I�0�0�1C�D�#�.�.�/F�G�	I����I�0�0�1B�C�#�.�.�/E�F�	Hrc���|j|jjd�|j|jjd�|j|jjd�y)Nrdre)r%r,rgr/r2r
s r�
testIPVersionzIpaddrUnitTest.testIPVersion|sV������*�*�2�2�A�6�����*�*�2�2�A�6�����1�1�9�9�1�=rc���|j|jjd�|j|jjd�|j|jjd�y)Nrhr�)r%r-�
max_prefixlenr0r3r
s r�testMaxPrefixLengthz"IpaddrUnitTest.testMaxPrefixLength�sV������,�,�:�:�B�?�����,�,�:�:�C�@�����3�3�A�A�3�Grc��|j|jjd�|jtjd�jd�|j|j
jd�|jtjd�jd�|jtjd�jd�|j|jjd�|jtjd	�jd�|jtjd
�jd�y)NrFrnrorprqrrz::1:0:0:0:0szffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)r%r,�packedrr�r/r�r2r
s r�
testPackedzIpaddrUnitTest.testPacked�s)������*�*�1�1�,�	.�����0�0�1B�C�J�J�,�	.�����*�*�1�1�=�	>�	
����0�0�1D�E�L�L�*�	+�	
����0�0��?�F�F�@�	B�����1�1�8�8�=�	>�	
����0�0�1J�K�R�R�*�	+�	
����0�0�1D�E�L�L�@�	Brc���tjd�}tjd�}tjd�}tjd�}|jtjt|��|jtjt|��|jtjt|��|jtjt|��y)Nr,r\)	rr�r�r%r�rr�r�r�)r�ipv4net�ipv4addr�ipv6net�ipv6addrs     r�
testIpTypezIpaddrUnitTest.testIpType�s����&�&�y�1���'�'�	�2���&�&�{�3���'�'��4������.�.��W�
�>�����.�.��X��?�����.�.��W�
�>�����.�.��X��?rc���|jdtjd�j�|jdtjd�j�|jdtjd�j
�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j
�|jdtjd	�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j
�|jdtjd�j
�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd	�j�|jdtjd
�j�|jtjd�j�|jtjd�j�|jtjd�j�|jtjd�j�|jdtjd�j�|jdtjd�j�|jtjd�j�|jtjd �j�|jdtjd!�j�|jdtjd"�j�|jdtjd�j�|jdtjd�j�y)#NTz224.1.1.1/31Fz	240.0.0.0z192.168.1.1/17z192.169.0.0z10.255.255.255z11.0.0.0z172.31.255.255z
172.32.0.0z169.254.1.0/24z169.254.100.200/24z169.255.100.200/24z127.100.200.254/32z
127.42.0.0/16z	128.0.0.0z
100.64.0.0/10z192.0.2.128/25z192.0.3.0/24rZz	224.1.1.1z	240.0.0.1z239.255.255.255�192.168.1.1z	192.0.0.0z	192.0.0.9z
192.0.0.10z192.0.0.255z169.254.100.200z169.255.100.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)r%rr��is_multicastr��is_reserved�
is_private�
is_link_local�is_loopback�	is_globalr��is_unspecifiedr�rr
s r�testReservedIpv4zIpaddrUnitTest.testReservedIpv4�s�������y�5�5��  � ,��	.�����	� 4� 4�[� A� N� N�O�����y�3�3�K�@�L�L�M�����y�5�5� � "�",�*�	.�����	� 4� 4�]� C� N� N�O�����y�3�3� � "�",�*�	.�����	� 4� 4�Z� @� K� K�L�����	� 4� 4�Z� @� L� L�M�����y�3�3� � "�",�*�	.�����	� 4� 4�\� B� M� M�N�����"�-�-�.>�?�M�M�	O�	
����#�0�0�2�4�4A�M�	C�	
����#�0�0�2�4�4A�M�	C�	
����#�.�.�2�4�4?�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�3�I�>�M�M�N�����y�3�3�K�@�M�M�N�����	� 4� 4�[� A� N� N�O�����y�3�3�K�@�L�L�M�����"�-�-�.?�@�L�L�	N�	
����y�3�3�M�B�M�M�N�����	� 4� 4�]� C� N� N�O�����y�3�3� � "�",�*�	.�����	� 4� 4�Z� @� 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�3�L�A�M�M�N�����	� 4� 4�[� A� M� M�N�����y�3�3�I�>�M�M�Nrc�
�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd	�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�y) NFr�z	1.0.0.0/8Tz	0.0.0.0/8z
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z
172.16.0.0/12z192.0.0.0/29z192.0.0.9/32z192.0.0.170/31rcz192.168.0.0/16z
198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32rz::ff/128r��::/128z
::ffff:0:0/96z100::/64z2001:2::/48z2001:3::/48r�z2001:10::/28zfc00::/7z	fe80::/10)r%rr�r=r
s r�testPrivateNetworksz"IpaddrUnitTest.testPrivateNetworks�s�������	� 4� 4�[� A� L� L�M�����	� 4� 4�[� A� L� L�M�����y�3�3�K�@�K�K�L�����y�3�3�L�A�L�L�M�����y�3�3�M�B�M�M�N�����y�3�3�4D�E�P�P�Q�����y�3�3�O�D�O�O�P�����y�3�3�N�C�N�N�O�����	� 4� 4�^� D� O� O�P�����y�3�3�4D�E�P�P�Q�����y�3�3�N�C�N�N�O�����y�3�3�4D�E�P�P�Q�����y�3�3�O�D�O�O�P�����y�3�3�4E�F�Q�Q�R�����y�3�3�4D�E�P�P�Q�����y�3�3�M�B�M�M�N�����y�3�3�4H�I�T�T�U�����	� 4� 4�V� <� G� G�H�����	� 4� 4�Z� @� K� K�L�����y�3�3�I�>�I�I�J�����y�3�3�H�=�H�H�I�����y�3�3�O�D�O�O�P�����y�3�3�J�?�J�J�K�����y�3�3�M�B�M�M�N�����	� 4� 4�]� C� N� N�O�����y�3�3�O�D�O�O�P�����y�3�3�N�C�N�N�O�����y�3�3�J�?�J�J�K�����y�3�3�K�@�K�K�Lrc���|jdtjd�j�|jdtjddzdz
�j�|jdtjd�j�|jdtjd�j�|jdtjd	�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j
�|jdtjd
�j
�|jdtjd�j
�|jdtjd�j
�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j
�|jdtjd�j�|jdtjd�j�|jdtjddzdz
�j�|jdtjd�j�|jdtjd�j�|jdtjd	�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j
�|jdtjd
�j
�|jdtjd�j
�|jdtjd�j
�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jtjd�j�|jtjd�j�|jtjd�j�|jtjd �j�|jtjd!�j�|jtjd"�j�|jtjd#�j�|jtjd$�j�|jtjd%�j�|jtjd&�j�|jtjd'�j�|jtjd(�j�|jtjd)�j�|jtjd*�j�|jdtjd+�j�|jdtjd,�j�y)-NTzffff::r�r�r>zff00::Fzfdff::zfecf::zfeff:ffff:ffff:ffff::z
fbf:ffff::zfc00::zfc00:ffff:ffff:ffff::zfbff:ffff::zfe00::zfea0::zfebf:ffff::zfe7f:ffff::zfec0::z	0:0::0:01z::1/127rzrz0::0r�z::/127z2001::1/128z
200::1/128z64:ff9b:1::z2001::z	2001:1::1z	2001:1::2z2001:2::z2001:3::z2001:4::z2001:4:112::z	2001:10::z	2001:20::z	2001:30::z	2001:40::z2002::z3fff::z100::z4000::1/128)r%rr�r;�
is_site_localr=r>r�r?rAr@r�r�rr<r
s r�testReservedIpv6zIpaddrUnitTest.testReservedIpv6	s������y�3�3�H�=�J�J�K�����y�3�3�A�s�F�Q�J�?�L�L�M�����y�3�3�H�=�J�J�K�����	� 4� 4�X� >� K� K�L�����y�3�3�H�=�K�K�L�����y�3�3�'� )�)6��	8�����	� 4� 4��!�+�m�	-�����	� 4� 4�X� >� L� L�M�����y�3�3�H�=�H�H�I�����y�3�3�'� )�)3��	5�����	� 4� 4�]� C� N� N�O�����	� 4� 4�X� >� I� I�J�����y�3�3�H�=�K�K�L�����y�3�3�� �,�}�	.�����	� 4� 4��!�,�}�	.�����	� 4� 4�X� >� L� L�M�����y�5�5�k�B�N�N�O�����	� 6� 6�y� A� M� M�N�����	� 4� 4�T� :� F� F�G�����	� 4� 4�U� ;� G� G�H�����y�3�3�F�;�J�J�K�����	� 4� 4�U� ;� J� J�K�����	� 4� 4�X� >� M� M�N�����"�-�-�m�<�G�G�	I�����"�-�-�l�;�E�E�	G�	
����y�3�3�H�=�J�J�K�����y�3�3�A�s�F�Q�J�?�L�L�M�����y�3�3�H�=�J�J�K�����	� 4� 4�X� >� K� K�L�����y�3�3�H�=�K�K�L�����y�3�3�'� )�)6��	8�����	� 4� 4��!�+�m�	-�����	� 4� 4�X� >� L� L�M�����y�3�3�H�=�H�H�I�����y�3�3�'� )�)3��	5�����	� 4� 4�]� C� N� N�O�����	� 4� 4�X� >� I� I�J�����y�3�3�H�=�K�K�L�����y�3�3�� �,�}�	.�����	� 4� 4��!�,�}�	.�����	� 4� 4�X� >� L� L�M�����y�3�3�K�@�L�L�M�����y�3�3�E�:�F�F�G�����	� 4� 4�U� ;� G� G�H�����y�3�3�F�;�J�J�K�����	� 4� 4�U� ;� 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�3�G�<�H�H�I�����y�3�3�M�B�N�N�Orc�j�|jtjd�jtjd��|jtjd�jd�|jtjd�jtjd��y)N�::ffff:192.168.1.1r:z
::c0a8:101z::ffff:c0a8:101)r%rr��ipv4_mappedr
s r�testIpv4MappedzIpaddrUnitTest.testIpv4Mappedr	s�������$�$�%9�:�F�F��$�$�]�3�	5�	
����-�-�l�;�G�G��N�����-�-�.?�@�L�L�"�-�-�m�<�	>rc���dD�]T}|j|�5tj|�}tjd|���}|j	|j
|j
�|j	|j|j�|j	|j|j�|j	|j|j�|j	|j|j�|j	|j|j�|j	|j|j�ddd���Wy#1swY��cxYw)N)z178.62.3.251z169.254.169.254�	127.0.0.1z	224.0.0.1r\rZz
100.64.0.1z::ffff:)rKrr�r�r%r@r=r<r;rAr>r?)r�addr4rhris    r�testIpv4MappedPropertiesz'IpaddrUnitTest.testIpv4MappedPropertiesz	s��
�E����e�$� �,�,�U�3�� �,�,�w�u�g�->�?��� � �������@�� � ����$�/�/�B�� � ��!1�!1�4�3C�3C�D�� � ��!2�!2�D�4E�4E�F�� � ��!4�!4�d�6I�6I�J�� � ��!3�!3�T�5G�5G�H�� � ��!1�!1�4�3C�3C�D�%�$�
�%�$�s�D8E�E&	c��|jdtjd�j�|jdtjd�j�y)NTrJFz::ffff:172.32.0.0)r%rr�r=r
s r�testIpv4MappedPrivateCheckz)IpaddrUnitTest.testIpv4MappedPrivateCheck�	sN������i�*�*�+?�@�K�K�	M�����y�+�+�,?�@�K�K�	Mrc�8�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�y)NTz::ffff:127.100.200.254/128z::ffff:127.42.0.0/112Fz::ffff:128.0.0.0z::ffff:127.100.200.254z::ffff:127.42.0.0)r%rr�r?r�r
s r�testIpv4MappedLoopbackCheckz*IpaddrUnitTest.testIpv4MappedLoopbackCheck�	s�������y�3�3�,� .�.9�k�	;�����y�3�3�'� )�)4��	6�����	� 4� 4�"�!$�$/�K�	1�	
����y�3�3�(� *�*5�+�	7�����y�3�3�#� %�%0�[�	2�����	� 4� 4�"�!$�$/�K�	1rc
��tjd�}tjd�}tjd�}tjd�}tjd�}tjd�}|jt	t|j
|���tjd�tjd�g�|jtt
|j
|��|jtt
|j
|��|jtt
|j
|��|jt|j
|��g�|jt	t|j
|���tjd	�tjd
�tjd�tjd�tjd
�tjd�tjd�tjd�g�y)N�10.1.1.0/24z10.1.1.0/26z10.2.1.0/24�10.1.1.0z2001:db8::0/32z10.1.1.5/32z10.1.1.64/26z
10.1.1.128/25z10.1.1.0/30z10.1.1.4/32z10.1.1.6/31z10.1.1.8/29z10.1.1.16/28z10.1.1.32/27)
rr�r�r%rrT�address_excluder?r�r@�rr��addr2�addr3rO�addr5�addr6s       r�testAddrExcludezIpaddrUnitTest.testAddrExclude�	s����$�$�]�3���$�$�]�3���$�$�]�3���$�$�Z�0���$�$�%5�6���$�$�]�3�������U�%:�%:�5�%A� B�C�#�.�.�~�>�#�.�.��?�A�	B�	
���*�d�E�,A�,A�%�,H�I����)�T�5�+@�+@��+G�H����)�T�5�+@�+@��+G�H�����e�3�3�E�:�;�R�@������U�%:�%:�5�%A� B�C�#�.�.�}�=�#�.�.�}�=�#�.�.�}�=�#�.�.�}�=�#�.�.�~�>�#�.�.�~�>�#�.�.�~�>�#�.�.��?�A�	Brc��|jttjd��ttjd���|jttjd��ttjd���|jttj
d��ttj
d���|jttj
d��ttj
t
tj
d�j����tj
d�}tj
d�}i}d||j<d||j<d||<d||<|j|j|�|j||�y)NrVrWr,r�)r%�hashrr�r�r�r_rfr,r/r)rrWrX�dummys    r�testHashzIpaddrUnitTest.testHash�	sj������i�4�4�]�C�D��i�4�4�]�C�D�	F�����i�2�2�=�A�B��i�2�2�=�A�B�	D�����i�2�2�:�>�?��i�2�2�:�>�?�	A�	
����i�2�2�9�=�>��i�2�2��	�,�,�Y�7�;�;�<�>�?�	@��"�"�:�.���"�"�5�)����#'��d��� �#'��d��� ���c�
���c�
��
�
�d�'�'��/��
�
�c�5�!rc��|j}|jd|j�|j}|j	t
|jddzdz�y)Nr(r�r�r>)r.r%�
compressedr1r?r��_string_from_ip_intr�s  r�testIPBaseszIpaddrUnitTest.testIPBases�	sL����������s�~�~�6��������*�c�&=�&=�q�#�v��z�Jrc��|j}|jd|j�|jd|j�|jd|j�|jdt|��y)Nr*z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)r1r%�with_prefixlen�with_netmask�
with_hostmaskrJr�s  r�testIPv6NetworkHelpersz%IpaddrUnitTest.testIPv6NetworkHelpers�	sm���������1�3�3E�3E�F����D��)�)�	+����D��*�*�	,����1�3�s�8�<rc��|j}|jd|j�|jd|j�|jd|j�|jdt|��y)Nr(z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r.r%rhrirjrJr�s  r�testIPv4NetworkHelpersz%IpaddrUnitTest.testIPv4NetworkHelpers�	se����������s�'9�'9�:����0�#�2B�2B�C����,�c�.?�.?�@�����s�3�x�0rc���tjd�}tj|�}tjd�}tj|�}tjd�}tjd�}|j||�|j||�|j|tj|��|j|tj|��y)NrVr�rxru)rr�r�r�r�r%rYs       r�testCopyConstructorz"IpaddrUnitTest.testCopyConstructor�	s����$�$�]�3���$�$�U�+���&�&�'D�E���&�&�u�-���%�%�i�0���%�%�&@�A�������&������&�����	� 5� 5�e� <�=�����	� 5� 5�e� <�=rc	��idd�dd�dd�dd�d	d
�dd�d
d�dd�dd�dd�dd�dd�dd�dd�dd�dd �d!d"�d#d$i�}t|j��D]3\}}|j|tt	j
|����5y)%Nz1:2:3:4:5:6:7:8z1:2:3:4:5:6:7:8/128z2001:0:0:4:0:0:0:8z2001:0:0:4::8/128z2001:0:0:4:5:6:7:8z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8z2001:0:3:4:5:6:7:8/128z0:0:3:0:0:0:0:ffffz0:0:3::ffff/128z0:0:0:4:0:0:0:ffffz::4:0:0:0:ffff/128z0:0:0:0:5:0:0:ffffz::5:0:0:ffff/128z1:0:0:4:0:0:7:8z1::4:0:0:7:8/128z0:0:0:0:0:0:0:0rDz0:0:0:0:0:0:0:0/0rz0:0:0:0:0:0:0:1r�z*2001:0658:022a:cafe:0000:0000:0000:0000/66r�r\z
::102:304/128z1:2:3:4:5:ffff:1.2.3.4z1:2:3:4:5:ffff:102:304/128z::7:6:5:4:3:2:1z0:7:6:5:4:3:2:1/128z::7:6:5:4:3:2:0z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1::z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1::z0:6:5:4:3:2:1:0/128)rT�itemsr%rJrr�)r�test_addresses�uncompressedrds    r�testCompressIPv6Addressz&IpaddrUnitTest.testCompressIPv6Address�	s2����4�� �"5��
!�"7��
!�":�	�

!�"3��
!�"6�
�
!�"4��
�1��
�x��
 ���
�y��
9�$��
���
%�&B�� 
�4�!�"
�4�#�$
�4�%�&
�4�'��*)-�^�-A�-A�-C�(D�$�L�*����Z��Y�-D�-D��.�*�
 �)Erc���tjd�}tjd�}tjd�}tjd�}|jd|j�|jdtjd�j�|jd|j�|jd	|j�|jd|j�y)
Nz2001::1�2001:0:5ef5:79fd:0:59d:a0e5:ba1r�z
192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128r�z'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)rr�r�r�r�r%�exploded)rr�rZr[rOs     r�testExplodeShortHandIpStrz(IpaddrUnitTest.testExplodeShortHandIpStr
s����'�'�	�2���%�%�&G�H���%�%�k�2���%�%�o�6�����F����	)����F�"�0�0��;�D�D�	F�	
���B����	)����E����	)�����%�.�.�9rc���tjd�}tjd�}|jd|j�|jd|j�y)NrNrDz1.0.0.127.in-addr.arpazH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa)rr�r�r%�reverse_pointer)rr�rZs   r�testReversePointerz!IpaddrUnitTest.testReversePointer"
sU���%�%�k�2���%�%�m�4�����1�5�3H�3H�I����2��.�.�	0rc��|jdt|j��|jdt|j��y)NrErc)r%r_r,r/r
s r�testIntRepresentationz$IpaddrUnitTest.testIntRepresentation*
s<������3�t�'8�'8�#9�:����?��T�.�.�/�	1rc��|jtjd�jd�|jtjd�jd�y)Nr>rdre)r%rr�rgr�r
s r�testForceVersionzIpaddrUnitTest.testForceVersion/
sD������-�-�a�0�8�8�!�<�����.�.�q�1�9�9�1�=rc���|j|jjd�|j|jjd�|j|jjd�|j|j
jd�|j|j
jd�|j|j
jd�y)Nr'z1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255r�z.2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::z.2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff)r%r-rhrirjr0r
s r�testWithStarzIpaddrUnitTest.testWithStar3
s�������,�,�;�;�\�J�����,�,�9�9�0�	2�����,�,�:�:�,�	.�	
����,�,�;�;�6�	8�����,�,�9�9�I�	K�	
����,�,�:�:�I�	Krc���|jd|jj�|jd|jj�|j|jjtjd��|j|jjtjd��|jd|jj�|jd|jj�|jd|jj�|jd|jj�|j|jjtjd��|j|jjjtjd��|j|jjtjd��|j|jjtjd��|j|jjjtjd��|j|jjjtjd��|jd|jj�|jd|jj�|jd|jjj�|jd|jjj�y)Nr�rLr�z	0.0.0.255r]r�r^)rr.�__dict__r%r�rr�rLrr1r`r�r0r�r
s r�testNetworkElementCachingz(IpaddrUnitTest.testNetworkElementCachingC
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�Grc�0�tjd�}tjd�}d}|j||ftj|�j�d}|jtj|�j�d}|jtj|�j�tjd�}|jtjd�tjd�f|j�y)	Nz
65.54.227.120z
192.0.2.45z'2001:0000:4136:e378:8000:63bf:3fff:fdd2z#2000::4136:e378:8000:63bf:3fff:fdd2z'2001:0001:4136:e378:8000:63bf:3fff:fdd2rvz94.245.121.253z95.26.244.94)rr�r%r��teredor�r�)r�server�client�teredo_addr�bad_addrs     r�
testTeredozIpaddrUnitTest.testTeredom
s����&�&��7���&�&�|�4��?�����&�&�)�"�-�-�k�:�A�A�	C�8������-�-�h�7�>�>�?�<������-�-�h�7�>�>�?� �+�+�,M�N�����)�/�/�0@�A�#�/�/��?�A�$�+�+�	-rc���tjd�}tjd�}|jtjd�|j�|j|j�y)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z
172.29.45.100)rr�r%r��	sixtofourr�)r�
sixtofouraddrr�s   r�
testsixtofourzIpaddrUnitTest.testsixtofour
s\��!�,�,�-@�A�
��'�'�(;�<������.�.��?�&�0�0�	2�����+�+�,rc��tjd�}tjd�}|j|j�|j��y)Nr,z2.3.4.5)rr�r��__hash__)r�
ipv4_address1�
ipv4_address2s   r�testV4HashIsNotConstantz&IpaddrUnitTest.testV4HashIsNotConstant�
sD��!�/�/�	�:�
�!�/�/�	�:�
����M�2�2�4�m�6L�6L�6N�Orc��tjd�}tjd�}|j|j�|j��y)Nr)z2001:658:22a:cafe:200:0:0:2)rr�r�r�)r�
ipv6_address1�
ipv6_address2s   r�testV6HashIsNotConstantz&IpaddrUnitTest.testV6HashIsNotConstant�
sF��!�/�/�0M�N�
�!�/�/�0M�N�
����M�2�2�4�m�6L�6L�6N�OrN)Or*r+r,r5r7r>rHrLrRrZrarlrsrvrzr~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�rrrrrrr#r(r*r,r/r2r8rBrErHrLrPrRrTr^rbrfrkrmrortrxr{r}rr�r�r�r�r�r�r0rrr%r%%s���Y� E�DE�N@C�F@�5�O�2�"�00� 5�"�A�V�,�B�K�
0�"
0�K�*4G�lK�.
T�-�-�-�,�(@�K�@�/�"6�	U�	2�#:�J57�n?�3�'�`*�DGF�R;�K@�ZU6�nM�
1�2�H�*>�
H�
B�,@�KO�Z M�D[P�z>�E�0M�1� B�0"�*K�=�1�>� �4:� 0�1�
>�K� (H�T-�$-�P�Prr%�__main__)r�r>�unittestr9r.rArIrr��test.supportrr�TestCaserr2rSrxr�r�rBr�r�r�r�r�r�r�r%r*�mainr0rr�<module>r�s6��%���	���
���*�3?�8�$�$�3?�l'�'�2.��.�b/"��/"�bm/��'9�m/�`x4��'9�x4�vV&�,�V&�r&�<�)<�&�36��':�36�lf1�,�f1�R&�<�)<�&�,0��':�,0�^A�L�A�&rA�h�'�'�rA�jkP�X�&�&�kP�\3�z���H�M�M�O�r

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists