blob: bef3c354d41d62109174a28552d0a1a5cd1c6a1b [file] [log] [blame] [edit]
#!/usr/bin/env python3
# Run `python3 -m unittest utils.lib.rr_graph.tests.test_channel`
import unittest
from ..grid import Site, Tile, Grid, check_grid_loc, EAST
class TestGrid(unittest.TestCase):
def test_good_grids(self):
check_grid_loc({
(0, 0): None,
})
check_grid_loc({
(0, 0): None,
(0, 1): None,
})
check_grid_loc({
(0, 0): None,
(1, 0): None,
})
check_grid_loc(
{
(0, 0): None,
(1, 0): None,
(1, 1): None,
(0, 1): None,
}
)
def test_bad_grids(self):
self.assertRaises(ValueError, lambda: check_grid_loc({}))
self.assertRaises(
AssertionError, lambda: check_grid_loc({(0, 1): None})
)
self.assertRaises(
AssertionError, lambda:
check_grid_loc({
(0, 0): None,
(1, 0): None,
(0, 1): None,
})
)
def test_round_trip(self):
grid_loc_map = {}
NUM_X = 5
NUM_Y = 8
for x in range(NUM_X):
for y in range(NUM_Y):
coord_idx = x + y * NUM_X
grid_loc_map[(x, y)] = Tile(
root_phy_tile_pkeys=[coord_idx],
phy_tile_pkeys=[coord_idx],
tile_type_pkey=coord_idx,
sites=[],
)
empty_tile_type_pkey = NUM_X * NUM_Y
grid = Grid(grid_loc_map, empty_tile_type_pkey)
output_grid_loc_map = grid.output_grid()
for x in range(NUM_X):
for y in range(NUM_Y):
coord_idx = x + y * NUM_X
self.assertEqual(
coord_idx, output_grid_loc_map[(x, y)].tile_type_pkey
)
def test_tile_split(self):
grid_loc_map = {}
NUM_X = 5
NUM_Y = 8
for x in range(NUM_X):
for y in range(NUM_Y):
coord_idx = x + y * NUM_X
sites = [
Site(
name='{}, {}'.format(x, y),
phy_tile_pkey=coord_idx,
tile_type_pkey=x,
site_type_pkey=x,
site_pkey=2 * x,
x=0,
y=0,
),
Site(
name='{}, {}'.format(x, y),
phy_tile_pkey=coord_idx,
tile_type_pkey=x,
site_type_pkey=x,
site_pkey=2 * x + 1,
x=0,
y=1,
),
]
grid_loc_map[(x, y)] = Tile(
root_phy_tile_pkeys=[coord_idx],
phy_tile_pkeys=[coord_idx],
tile_type_pkey=x,
sites=sites,
)
empty_tile_type_pkey = NUM_X * NUM_Y
grid = Grid(grid_loc_map, empty_tile_type_pkey)
grid.split_tile_type(
tile_type_pkey=3,
tile_type_pkeys=[
NUM_X,
NUM_X + 1,
],
split_direction=EAST,
split_map={
(0, 0): 0,
(0, 1): 1,
},
)
output_grid_loc_map = grid.output_grid()
assert (NUM_X, NUM_Y - 1) in output_grid_loc_map
assert (NUM_X + 1, NUM_Y - 1) not in output_grid_loc_map
assert (NUM_X, NUM_Y) not in output_grid_loc_map
for y in range(NUM_Y):
self.assertFalse(output_grid_loc_map[(0, y)].split_sites)
self.assertFalse(output_grid_loc_map[(2, y)].split_sites)
self.assertListEqual(
output_grid_loc_map[(3, y)].root_phy_tile_pkeys,
[3 + y * NUM_X],
)
self.assertListEqual(
output_grid_loc_map[(3, y)].phy_tile_pkeys,
[3 + y * NUM_X],
)
self.assertTrue(output_grid_loc_map[(3, y)].split_sites, y)
self.assertEqual(1, len(output_grid_loc_map[(3, y)].sites))
self.assertListEqual(
output_grid_loc_map[(4, y)].root_phy_tile_pkeys,
[],
)
self.assertListEqual(
output_grid_loc_map[(4, y)].phy_tile_pkeys,
[3 + y * NUM_X],
)
self.assertTrue(output_grid_loc_map[(4, y)].split_sites)
self.assertEqual(1, len(output_grid_loc_map[(4, y)].sites))
self.assertFalse(output_grid_loc_map[(NUM_X, y)].split_sites)
def test_tile_split_progressive(self):
grid_loc_map = {}
NUM_X = 5
NUM_Y = 8
for x in range(NUM_X):
for y in range(NUM_Y):
coord_idx = x + y * NUM_X
sites = [
Site(
name='{}, {}'.format(x, y),
phy_tile_pkey=coord_idx,
tile_type_pkey=x,
site_type_pkey=x,
site_pkey=2 * x,
x=0,
y=0,
),
Site(
name='{}, {}'.format(x, y),
phy_tile_pkey=coord_idx,
tile_type_pkey=x,
site_type_pkey=x,
site_pkey=2 * x + 1,
x=0,
y=1,
),
]
grid_loc_map[(x, y)] = Tile(
root_phy_tile_pkeys=[coord_idx],
phy_tile_pkeys=[coord_idx],
tile_type_pkey=coord_idx,
sites=sites,
)
empty_tile_type_pkey = NUM_X * NUM_Y
grid = Grid(grid_loc_map, empty_tile_type_pkey)
for y in range(NUM_Y):
grid.split_tile_type(
tile_type_pkey=3 + y * NUM_X,
tile_type_pkeys=[
NUM_X * NUM_Y + 1,
NUM_X * NUM_Y + 2,
],
split_direction=EAST,
split_map={
(0, 0): 0,
(0, 1): 1,
},
)
output_grid_loc_map = grid.output_grid()
assert (NUM_X, NUM_Y - 1) in output_grid_loc_map
assert (NUM_X + 1, NUM_Y - 1) not in output_grid_loc_map
assert (NUM_X, NUM_Y) not in output_grid_loc_map
for y in range(NUM_Y):
self.assertFalse(output_grid_loc_map[(0, y)].split_sites)
self.assertFalse(output_grid_loc_map[(2, y)].split_sites)
self.assertListEqual(
output_grid_loc_map[(3, y)].root_phy_tile_pkeys,
[3 + y * NUM_X],
)
self.assertListEqual(
output_grid_loc_map[(3, y)].phy_tile_pkeys,
[3 + y * NUM_X],
)
self.assertTrue(output_grid_loc_map[(3, y)].split_sites, y)
self.assertEqual(1, len(output_grid_loc_map[(3, y)].sites))
self.assertListEqual(
output_grid_loc_map[(4, y)].root_phy_tile_pkeys,
[],
)
self.assertListEqual(
output_grid_loc_map[(4, y)].phy_tile_pkeys,
[3 + y * NUM_X],
)
self.assertTrue(output_grid_loc_map[(4, y)].split_sites)
self.assertEqual(1, len(output_grid_loc_map[(4, y)].sites))
self.assertFalse(output_grid_loc_map[(NUM_X, y)].split_sites)