def test_Key_shift(): # because the Key class preserves the key captured at object # instantiation you have to deliberately tamper with the Key's value # to make it equal to the shifted Node key = Key('A|B') key.value = Node(head='B', tail=[]) assert (Key('A|B') << 1) == key key.value = Node(head=None, tail=[]) assert (Key('A|B') << 2) == key
def test_Key_Node_from_key(): assert Key.Node_from_key('A|B|C') == Node(head='A', tail=['B', ['C']])
def test_Node_from_nested_list(): # e.g. split from key: # 'A|B|C' -> ['A', '|', 'B', '|', 'C'] -> ['A', ['B', ['C']]] ll = ['A', ['B', ['C']]] assert Node.from_nested_list(ll) == Node(head='A', tail=['B', ['C']])
def test_Key(): key = Key() assert key.key is None assert key.value == Node() assert key.payload is None
def test_Node_eq(): assert Node() == Node() assert Node('A') == Node('A', [])
def test_Node_lsfhift(): node = Node(head='A', tail=['B', ['C']]) assert (node << 1).head() == 'B' assert (node << 2).head() == 'C'
def test_Node_is_empty(): assert Node().is_empty() assert not Node('A').is_empty() assert not Node('A', []).is_empty()
def test_Node_tail(): node = Node(head='A', tail=['B', ['C']]) assert node.tail() == ['B', ['C']]
def test_Node(): node = Node() assert Node().value == (None, []) node = Node(head='A', tail=['B', ['C']]) assert node.value == ('A', ['B', ['C']])