def test_fmap_rope(self): test = create_rope_from_map({ "text": "3", "left": { "text": "a" }, "right": { "text": "5", "left": { "text": "b" }, "right": { "text": "7", "left": { "text": "c" }, "right": { "text": "d" }, }, }, }) test_upper = create_rope_from_map({ "text": "3", "left": { "text": "A" }, "right": { "text": "5", "left": { "text": "B" }, "right": { "text": "7", "left": { "text": "C" }, "right": { "text": "D" }, }, }, }) self.assertEqual(fmap_rope(lambda s: s.upper(), test), test_upper)
def test_extra_credit_rebalancing(self): self.assertEqual( rebalance( create_rope_from_map({ "left": { "text": "a" }, "right": { "left": { "text": "b" }, "right": { "left": { "text": "c" }, "right": { "text": "d" } }, }, })).to_dictionary(), { "size": 4, "left": { "size": 2, "left": { "text": "a" }, "right": { "text": "b" } }, "right": { "size": 2, "left": { "text": "c" }, "right": { "text": "d" } }, }, )
def test_rope_basics(self): self.assertEqual(str(create_leaf("test")), "test") self.assertEqual(create_leaf("test").size(), 4) branch = create_rope_from_map({ "left": { "left": { "text": "t" }, "right": { "text": "e" }, }, "right": { "right": { "text": "st" } }, }) self.assertEqual(str(branch), "test") self.assertEqual(branch.size(), 4)
def test_extra_credit_rebalancing(self): self.assertEqual( rotate_left( create_rope_from_map({ "text": "3", "left": { "text": "a" }, "right": { "text": "5", "left": { "text": "b" }, "right": { "text": "7", "left": { "text": "c" }, "right": { "text": "d" }, }, }, })).to_dictionary(), { "text": "5", "left": { "text": "3", "left": { "text": "a" }, "right": { "text": "b" } }, "right": { "text": "7", "left": { "text": "c" }, "right": { "text": "d" } }, }, ) self.assertEqual( rotate_right( create_rope_from_map({ "text": "5", "left": { "text": "3", "right": { "text": "b" }, "left": { "text": "2", "left": { "text": "d" }, "right": { "text": "c" }, }, }, "right": { "text": "a" }, })).to_dictionary(), { "text": "3", "left": { "text": "2", "left": { "text": "d" }, "right": { "text": "c" } }, "right": { "text": "5", "left": { "text": "b" }, "right": { "text": "a" } }, }, ) balancedTree = { "text": "b", "left": { "text": "a" }, "right": { "text": "c" } } self.assertEqual( rebalance( create_rope_from_map({ "text": "c", "left": { "text": "a", "right": { "text": "b" } }, })).to_dictionary(), balancedTree, ) self.assertEqual( rebalance( create_rope_from_map({ "text": "c", "left": { "text": "b", "left": { "text": "a" } }, })).to_dictionary(), balancedTree, ) self.assertEqual( rebalance( create_rope_from_map({ "text": "a", "right": { "text": "b", "right": { "text": "c" } }, })).to_dictionary(), balancedTree, ) self.assertEqual( rebalance( create_rope_from_map({ "text": "a", "right": { "text": "c", "left": { "text": "b" } }, })).to_dictionary(), balancedTree, )
def create_leaf(text): return create_rope_from_map({"text": text})