#!/usr/bin/env python3
import sys

import tree_successor

def test_sequence(sequence):
    tree = tree_successor.Tree()
    for i in sequence: tree.insert(i)

    node = tree.successor(None)
    for element in sorted(sequence):
        assert node is not None, "Expected successor {}, got None".format(element)
        assert node.key == element, "Expected successor {}, got {}".format(element, node.key)
        node = tree.successor(node)
    assert node is None, "Expected no successor, got {}".format(node.key)

tests = [
    ("path", lambda: test_sequence(range(3000))),
    ("random_tree", lambda: test_sequence([pow(997, i, 199999) for i in range(1, 199999)])),
]

if __name__ == "__main__":
    for required_test in sys.argv[1:] or [name for name, _ in tests]:
        for name, test in tests:
            if name == required_test:
                print("Running test {}".format(name), file=sys.stderr)
                test()
                break
        else:
            raise ValueError("Unknown test {}".format(name))