@@ -1845,6 +1845,9 @@ def testSlash0Constructor(self):
18451845 '1.2.3.4/0' )
18461846
18471847 def testCollapsing (self ):
1848+ collapsed = ipaddress .collapse_addresses ([])
1849+ self .assertEqual (list (collapsed ), [])
1850+
18481851 # test only IP addresses including some duplicates
18491852 ip1 = ipaddress .IPv4Address ('1.1.1.0' )
18501853 ip2 = ipaddress .IPv4Address ('1.1.1.1' )
@@ -1858,27 +1861,21 @@ def testCollapsing(self):
18581861 self .assertEqual (list (collapsed ),
18591862 [ipaddress .IPv4Network ('1.1.1.0/30' ),
18601863 ipaddress .IPv4Network ('1.1.1.4/32' )])
1861-
1862- # test a mix of IP addresses and networks including some duplicates
1863- ip1 = ipaddress .IPv4Address ('1.1.1.0' )
1864- ip2 = ipaddress .IPv4Address ('1.1.1.1' )
1865- ip3 = ipaddress .IPv4Address ('1.1.1.2' )
1866- ip4 = ipaddress .IPv4Address ('1.1.1.3' )
1867- #ip5 = ipaddress.IPv4Interface('1.1.1.4/30')
1868- #ip6 = ipaddress.IPv4Interface('1.1.1.4/30')
1869- # check that addresses are subsumed properly.
1870- collapsed = ipaddress .collapse_addresses ([ip1 , ip2 , ip3 , ip4 ])
1864+ collapsed = ipaddress .collapse_addresses ([ip1 ])
18711865 self .assertEqual (list (collapsed ),
1872- [ipaddress .IPv4Network ('1.1.1.0/30' )])
1866+ [ipaddress .IPv4Network ('1.1.1.0/32' )])
1867+ # test same IP addresses
1868+ self .assertEqual (list (ipaddress .collapse_addresses ([ip1 , ip1 , ip6 ])),
1869+ [ipaddress .ip_network ('1.1.1.0/32' )])
18731870
18741871 # test only IP networks
18751872 ip1 = ipaddress .IPv4Network ('1.1.0.0/24' )
18761873 ip2 = ipaddress .IPv4Network ('1.1.1.0/24' )
18771874 ip3 = ipaddress .IPv4Network ('1.1.2.0/24' )
18781875 ip4 = ipaddress .IPv4Network ('1.1.3.0/24' )
18791876 ip5 = ipaddress .IPv4Network ('1.1.4.0/24' )
1880- # stored in no particular order b/c we want CollapseAddr to call
1881- # [].sort
1877+ # stored in no particular order b/c we want collapse_addresses()
1878+ # to call sorted()
18821879 ip6 = ipaddress .IPv4Network ('1.1.0.0/22' )
18831880 # check that addresses are subsumed properly.
18841881 collapsed = ipaddress .collapse_addresses ([ip1 , ip2 , ip3 , ip4 , ip5 ,
@@ -1893,16 +1890,9 @@ def testCollapsing(self):
18931890 [ipaddress .IPv4Network ('1.1.0.0/23' )])
18941891
18951892 # test same IP networks
1896- ip_same1 = ip_same2 = ipaddress .IPv4Network ('1.1.1.1/32' )
1897- self .assertEqual (list (ipaddress .collapse_addresses (
1898- [ip_same1 , ip_same2 ])),
1899- [ip_same1 ])
1893+ self .assertEqual (list (ipaddress .collapse_addresses ([ip1 , ip1 ])),
1894+ [ip1 ])
19001895
1901- # test same IP addresses
1902- ip_same1 = ip_same2 = ipaddress .IPv4Address ('1.1.1.1' )
1903- self .assertEqual (list (ipaddress .collapse_addresses (
1904- [ip_same1 , ip_same2 ])),
1905- [ipaddress .ip_network ('1.1.1.1/32' )])
19061896 ip1 = ipaddress .IPv6Network ('2001::/100' )
19071897 ip2 = ipaddress .IPv6Network ('2001::/120' )
19081898 ip3 = ipaddress .IPv6Network ('2001::/96' )
@@ -1917,6 +1907,21 @@ def testCollapsing(self):
19171907 collapsed = ipaddress .collapse_addresses ([ip1 , ip2 , ip3 ])
19181908 self .assertEqual (list (collapsed ), [ip3 ])
19191909
1910+ # test a mix of IP addresses and networks
1911+ ip1 = ipaddress .IPv4Address ('1.1.1.0' )
1912+ ip2 = ipaddress .IPv4Address ('1.1.1.1' )
1913+ ip3 = ipaddress .IPv4Network ('1.1.1.2/31' )
1914+ # check that addresses are subsumed properly.
1915+ collapsed = ipaddress .collapse_addresses ([ip1 , ip2 , ip3 ])
1916+ self .assertEqual (list (collapsed ),
1917+ [ipaddress .IPv4Network ('1.1.1.0/30' )])
1918+
1919+ # unsupported types
1920+ self .assertRaises (TypeError , ipaddress .collapse_addresses , [42 ])
1921+ self .assertRaises (TypeError , ipaddress .collapse_addresses , [None ])
1922+ self .assertRaises (TypeError , ipaddress .collapse_addresses ,
1923+ [ipaddress .IPv4Interface ('1.1.1.4/30' )])
1924+
19201925 # the toejam test
19211926 addr_tuples = [
19221927 (ipaddress .ip_address ('1.1.1.1' ),
@@ -1941,6 +1946,24 @@ def testCollapsing(self):
19411946 for ip1 , ip2 in addr_tuples :
19421947 self .assertRaises (TypeError , ipaddress .collapse_addresses ,
19431948 [ip1 , ip2 ])
1949+ for ip1 in [
1950+ ipaddress .ip_address ('1.1.1.1' ),
1951+ ipaddress .IPv4Network ('1.1.0.0/24' ),
1952+ ipaddress .IPv4Network ('1.1.0.0/32' ),
1953+ ]:
1954+ for ip2 in [
1955+ ipaddress .ip_address ('::1' ),
1956+ ipaddress .IPv6Network ('2001::/120' ),
1957+ ipaddress .IPv6Network ('2001::/128' ),
1958+ ipaddress .ip_address ('::1%scope' ),
1959+ ipaddress .IPv6Network ('2001::%scope/120' ),
1960+ ipaddress .IPv6Network ('2001::%scope/128' ),
1961+ ]:
1962+ with self .subTest (ip1 = ip1 , ip2 = ip2 ):
1963+ with self .assertRaises (TypeError ):
1964+ list (ipaddress .collapse_addresses ([ip1 , ip2 ]))
1965+ with self .assertRaises (TypeError ):
1966+ list (ipaddress .collapse_addresses ([ip2 , ip1 ]))
19441967
19451968 def testSummarizing (self ):
19461969 #ip = ipaddress.ip_address
0 commit comments