import sys from pathlib import Path import unittest sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from c01_views import swap_map class ProvisionMaps(unittest.TestCase): def test_sparse_parent_preserves_every_available_principal(self): extents = ((0, 1001), (60000, 2000)) rows = swap_map(1000, 61002, extents) actual = {inside+i:outside+i for inside,outside,count in rows for i in range(count)} expected = {n:n for start,count in extents for n in range(start,start+count)} expected[1000], expected[61002] = 61002, 1000 self.assertEqual(actual, expected) self.assertEqual(set(actual), set(actual.values())) def test_cannot_appoint_an_unmapped_or_overlapping_identity(self): for extents in (((0,1001),), ((0,62000),(100,10)), ((0,2**32),)): with self.assertRaises(ValueError): swap_map(1000,61002,extents) def test_initial_namespace_retains_full_original_contract(self): self.assertEqual(swap_map(1000,61002), [(0,0,1000),(1000,61002,1), (1001,1001,60001),(61002,1000,1),(61003,61003,2**32-61004)])