curds: Implement a node.insert_child() function

This inserts the node in sorted order

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-04-16 09:43:23 -04:00
parent ec6744755d
commit 6efc456f0d
2 changed files with 65 additions and 0 deletions

View File

@ -7,3 +7,28 @@ class PlaylistNode:
self.name = name
self.next = None
self.prev = None
def __link_children__(self, b, c):
if c.prev:
c.prev.next = b
if b:
b.prev = c.prev
b.next = c
c.prev = b
def __lt__(self, rhs):
return self.name < rhs.name
def insert_child(self, child):
n = None
for i, n in enumerate(self.children):
if child < n:
self.children.insert(i, child)
self.__link_children__(child, n)
return self.children.index(child)
self.children.append(child)
self.__link_children__(n, child)
return self.children.index(child)
def n_children(self):
return len(self.children)

View File

@ -14,3 +14,43 @@ class TestPlaylistNode(unittest.TestCase):
n = node.PlaylistNode("Test Node", "test-icon")
self.assertEqual(n.icon, "test-icon")
self.assertEqual(n.name, "Test Node")
def test_node_less_than(self):
a = node.PlaylistNode("a")
b = node.PlaylistNode("b")
self.assertTrue( a < b)
self.assertFalse(b < a)
self.assertFalse(a < a)
def test_node_insert_child(self):
root = node.PlaylistNode()
a = node.PlaylistNode("a")
b = node.PlaylistNode("b")
c = node.PlaylistNode("c")
d = node.PlaylistNode("d")
self.assertEqual(root.n_children(), 0)
self.assertEqual(root.insert_child(b), 0)
self.assertEqual(root.n_children(), 1)
self.assertEqual(root.children, [ b ])
self.assertEqual(root.insert_child(d), 1)
self.assertEqual(root.n_children(), 2)
self.assertEqual(root.children, [ b, d ])
self.assertEqual(b.next, d)
self.assertEqual(d.prev, b)
self.assertEqual(root.insert_child(c), 1)
self.assertEqual(root.n_children(), 3)
self.assertEqual(root.children, [ b, c, d ])
self.assertEqual(b.next, c)
self.assertEqual(c.prev, b)
self.assertEqual(c.next, d)
self.assertEqual(d.prev, c)
self.assertEqual(root.insert_child(a), 0)
self.assertEqual(root.n_children(), 4)
self.assertEqual(root.children, [ a, b, c, d ])
self.assertEqual(a.next, b)
self.assertEqual(b.prev, a)