def test_addrlist(self):
        alist = AddrList()
        self.assertSetEqual(set(alist.ranges.keys()), {IPv4, IPv6})

        alist.add_ip('127.0.0.1')
        self.assertIn('127.0.0.1', alist)
        self.assertNotIn('127.0.0.0', alist)
        alist.add_range('127.0.0.2-127.0.0.255')
        self.assertListEqual(
            alist.ranges[IPv4],
            [AddressRange.from_string('127.0.0.1-127.0.0.255')])
        alist.add_ip('127.0.0.0')
        self.assertListEqual(alist.ranges[IPv4],
                             [Subnet.from_string('127.0.0.0/24')])
        alist.add_subnet('127.0.2.0/23')
        self.assertListEqual(alist.ranges[IPv4], [
            Subnet.from_string('127.0.0.0/24'),
            Subnet.from_string('127.0.2.0/23')
        ])
        # Unify disjoint ranges with single addition
        sub = Subnet.from_string('127.0.1.0/24')
        self.assertNotIn(sub.start, alist)
        self.assertNotIn(sub.end, alist)
        alist.add_addressrange(sub)
        self.assertListEqual(alist.ranges[IPv4],
                             [Subnet.from_string('127.0.0.0/22')])