Skip to content
Snippets Groups Projects
Select Git revision
  • 6aec72eafedbe51fff647eea3ad10edb1393ae39
  • master default protected
2 results

splay_experiment.py

Blame
  • cuckoo_hash_test.py 1.31 KiB
    #!/usr/bin/env python3
    import sys
    import random
    
    from cuckoo_hash import CuckooTable
    
    def simple_test(n, table_size_percentage):
        random.seed(42)
        table = CuckooTable(n*table_size_percentage//100)
    
        # Insert an arithmetic progression
        for i in range(n):
            table.insert(37*i)
    
        # Verify contents of the table
        for i in range(n):
            assert table.lookup(37*i), "Item not present in table, but it should be."
            assert not table.lookup(37*i+1), "Item present in table, even though it should not be."
    
    def multiple_test(min_n, max_n, step_n, table_size_percentage):
        for n in range(min_n, max_n, step_n):
            print("\tn={}".format(n))
            simple_test(n, table_size_percentage)
    
    # A list of all tests
    tests = [
        ("small",       lambda: simple_test(100, 400)),
        ("middle",      lambda: simple_test(31415, 300)),
        ("big",         lambda: simple_test(1000000, 300)),
        ("tight",       lambda: multiple_test(20000, 40000, 500, 205)),
    ]
    
    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))