25 lines
1.1 KiB
Python
25 lines
1.1 KiB
Python
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)])
|