| #!/usr/bin/env python3 | |
| # Run `python3 -m unittest utils.lib.rr_graph.tests.test_channel` | |
| import unittest | |
| from ..channel import Track, ChannelGrid | |
| class TestGraph(unittest.TestCase): | |
| def test_track_type(self): | |
| self.assertEqual(Track.Type.X, Track((1, 0), (10, 0)).type) | |
| self.assertEqual(Track.Type.Y, Track((0, 1), (0, 10)).type) | |
| with self.assertRaises(ValueError): | |
| Track((1, 1), (1, 1)).type | |
| self.assertEqual( | |
| Track.Type.X, | |
| Track((1, 1), (1, 1), type_hint=Track.Type.X).type | |
| ) | |
| self.assertEqual( | |
| Track.Type.Y, | |
| Track((1, 1), (1, 1), type_hint=Track.Type.Y).type | |
| ) | |
| def test_track_type_guess(self): | |
| self.assertEqual(Track.Type.X, Track((1, 0), (10, 0)).type_guess) | |
| self.assertEqual(Track.Type.Y, Track((0, 1), (0, 10)).type_guess) | |
| self.assertEqual('None', str(Track((1, 1), (1, 1)).type_guess)) | |
| def test_track_start0(self): | |
| self.assertEqual(1, Track((1, 0), (10, 0)).start0) | |
| self.assertEqual(1, Track((0, 1), (0, 10)).start0) | |
| with self.assertRaises(ValueError): | |
| Track((1, 1), (1, 1)).start0 | |
| self.assertEqual( | |
| 1, | |
| Track((1, 1), (1, 1), type_hint=Track.Type.X).start0 | |
| ) | |
| self.assertEqual(10, Track((10, 0), (1, 0)).start0) | |
| self.assertEqual(10, Track((0, 10), (0, 1)).start0) | |
| def test_track_end0(self): | |
| self.assertEqual(10, Track((1, 0), (10, 0)).end0) | |
| self.assertEqual(10, Track((0, 1), (0, 10)).end0) | |
| with self.assertRaises(ValueError): | |
| Track((1, 1), (1, 1)).end0 | |
| self.assertEqual(1, Track((1, 1), (1, 1), type_hint=Track.Type.X).end0) | |
| self.assertEqual(1, Track((10, 0), (1, 0)).end0) | |
| self.assertEqual(1, Track((0, 10), (0, 1)).end0) | |
| def test_track_common(self): | |
| self.assertEqual(0, Track((0, 0), (10, 0)).common) | |
| self.assertEqual(0, Track((0, 0), (0, 10)).common) | |
| with self.assertRaises(ValueError): | |
| Track((1, 1), (1, 1)).common | |
| self.assertEqual( | |
| 1, | |
| Track((1, 1), (1, 1), type_hint=Track.Type.X).common | |
| ) | |
| self.assertEqual(0, Track((10, 0), (0, 0)).common) | |
| self.assertEqual(0, Track((0, 10), (0, 0)).common) | |
| self.assertEqual(4, Track((4, 10), (4, 0)).common) | |
| def test_track_length(self): | |
| self.assertEqual(10, Track((0, 0), (10, 0)).length) | |
| self.assertEqual(10, Track((0, 0), (0, 10)).length) | |
| self.assertEqual(0, Track((1, 1), (1, 1)).length) | |
| self.assertEqual(10, Track((10, 0), (0, 0)).length) | |
| self.assertEqual(10, Track((0, 10), (0, 0)).length) | |
| def test_track_new_idx(self): | |
| s = (1, 4) | |
| e = (1, 8) | |
| c1 = Track(s, e, idx=0) | |
| c2 = c1.new_idx(2) | |
| self.assertEqual(c1.start, c2.start) | |
| self.assertEqual(c1.end, c2.end) | |
| self.assertEqual(0, c1.idx) | |
| self.assertEqual(2, c2.idx) | |
| def test_track_repr(self): | |
| self.assertEqual('T((0,0), (10,0))', repr(Track((0, 0), (10, 0)))) | |
| self.assertEqual('T((0,0), (0,10))', repr(Track((0, 0), (0, 10)))) | |
| self.assertEqual( | |
| 'T((1,2), (3,2), 5)', repr(Track((1, 2), (3, 2), idx=5)) | |
| ) | |
| self.assertEqual('T(ABC)', repr(Track((1, 2), (3, 2), name="ABC"))) | |
| self.assertEqual( | |
| 'T(ABC,5)', repr(Track((1, 2), (3, 2), idx=5, name="ABC")) | |
| ) | |
| def test_track_str(self): | |
| self.assertEqual('CHANX 0,0->10,0', str(Track((0, 0), (10, 0)))) | |
| self.assertEqual('CHANY 0,0->0,10', str(Track((0, 0), (0, 10)))) | |
| self.assertEqual( | |
| 'CHANX 1,2->3,2 @5', str(Track((1, 2), (3, 2), idx=5)) | |
| ) | |
| self.assertEqual('ABC', str(Track((1, 2), (3, 2), name="ABC"))) | |
| self.assertEqual( | |
| 'ABC@5', str(Track((1, 2), (3, 2), idx=5, name="ABC")) | |
| ) | |
| def test_channelgrid_width(self): | |
| g = ChannelGrid((6, 7), Track.Type.Y) | |
| self.assertEqual(6, g.width) | |
| self.assertEqual(7, g.height) | |
| def test_channelgrid_create_track(self): | |
| g = ChannelGrid((11, 11), Track.Type.X) | |
| # Adding the first channel | |
| g.create_track(Track((1, 6), (4, 6), name="A")) | |
| self.assertEqual('[T(A,0)]', str(g[(1, 6)])) | |
| self.assertEqual('[T(A,0)]', str(g[(2, 6)])) | |
| self.assertEqual('[T(A,0)]', str(g[(4, 6)])) | |
| self.assertEqual('[None]', str(g[(5, 6)])) | |
| # Adding second non-overlapping second channel | |
| g.create_track(Track((5, 6), (7, 6), name="B")) | |
| self.assertEqual('[T(A,0)]', str(g[(4, 6)])) | |
| self.assertEqual('[T(B,0)]', str(g[(5, 6)])) | |
| self.assertEqual('[T(B,0)]', str(g[(7, 6)])) | |
| self.assertEqual('[None]', str(g[(8, 6)])) | |
| # Adding third channel which overlaps with second channel | |
| g.create_track(Track((5, 6), (7, 6), name="T")) | |
| self.assertEqual('[T(A,0), None]', str(g[(4, 6)])) | |
| self.assertEqual('[T(B,0), T(T,1)]', str(g[(5, 6)])) | |
| self.assertEqual('[T(B,0), T(T,1)]', str(g[(7, 6)])) | |
| # Adding a channel which overlaps, but is a row over | |
| g.create_track(Track((5, 7), (7, 7), name="D")) | |
| self.assertEqual('[T(B,0), T(T,1)]', str(g[(5, 6)])) | |
| self.assertEqual('[T(D,0)]', str(g[(5, 7)])) | |
| # Adding fourth channel which overlaps both the first | |
| # and second+third channel | |
| g.create_track(Track((3, 6), (6, 6), name="E")) | |
| self.assertEqual('[T(A,0), None, None]', str(g[(2, 6)])) | |
| self.assertEqual('[T(A,0), None, T(E,2)]', str(g[(3, 6)])) | |
| self.assertEqual('[T(B,0), T(T,1), T(E,2)]', str(g[(6, 6)])) | |
| self.assertEqual('[T(B,0), T(T,1), None]', str(g[(7, 6)])) | |
| # This channel fits in the hole left by the last one. | |
| g.create_track(Track((1, 6), (3, 6), name="F")) | |
| self.assertEqual('[T(A,0), T(F,1), None]', str(g[(1, 6)])) | |
| self.assertEqual('[T(A,0), T(F,1), None]', str(g[(2, 6)])) | |
| self.assertEqual('[T(A,0), T(F,1), T(E,2)]', str(g[(3, 6)])) | |
| self.assertEqual('[T(A,0), None, T(E,2)]', str(g[(4, 6)])) | |
| # Add another channel which causes a hole | |
| g.create_track(Track((1, 6), (7, 6), name="G")) | |
| self.assertEqual('[T(A,0), T(F,1), None, T(G,3)]', str(g[(1, 6)])) | |
| self.assertEqual('[T(A,0), T(F,1), None, T(G,3)]', str(g[(2, 6)])) | |
| self.assertEqual('[T(A,0), T(F,1), T(E,2), T(G,3)]', str(g[(3, 6)])) | |
| self.assertEqual('[T(A,0), None, T(E,2), T(G,3)]', str(g[(4, 6)])) | |
| self.assertEqual('[T(B,0), T(T,1), T(E,2), T(G,3)]', str(g[(5, 6)])) | |
| self.assertEqual('[T(B,0), T(T,1), T(E,2), T(G,3)]', str(g[(6, 6)])) | |
| self.assertEqual('[T(B,0), T(T,1), None, T(G,3)]', str(g[(7, 6)])) | |
| self.assertEqual('[None, None, None, None]', str(g[(8, 6)])) | |
| if __name__ == "__main__": | |
| unittest.main() |