示例#1
0
def run_test(filename):
    try:
        f = open(filename, 'r')
        root = None
        fail = False
        for line in f:
            line = line.strip()
            m = re.match(r'R\s*(\d+)', line)
            if m:
                print('Root:', m.group(1))
                root = Node(int(m.group(1)))
            m = re.match(r'I\s*(\d+)', line)
            if m:
                assert root
                print('Insert:', m.group(1))
                root.insert(int(m.group(1)))
            m = re.match(r'S\s*(\d+)\s*(true|false)', line)
            if m:
                assert root
                print('Search:', m.group(1))
                res = root.key_exists(int(m.group(1)))
                expected = (m.group(2) == 'true')
                if res != expected:
                    print('\t Failed: Expected Value was = ', m.group(2),
                          'root.search returned:', res)
                    fail = True
                else:
                    print('\t Expected: ', m.group(2), ' tree returned: ', res,
                          'OK!')
            m = re.match(r'D\s*(\d+)', line)
            if m:
                assert root
                print('Depth: (expected = ', m.group(1), ')')
                d = root.get_depth()
                if d == int(m.group(1)):
                    print('\t OK!')
                else:
                    print(
                        '\t Failed: expected depth = %s, root.depth returned: %d'
                        % (m.group(1), d))
                    fail = True
            m = re.match(r'T\s*\[((\s*\d+,?)+)\]', line)
            if m:
                assert root
                print('Inorder traversal expected:', end='')
                res_list = m.group(1).split(',')
                int_list = [int(s) for s in res_list]
                print(int_list)
                ret_list = []
                root.inorder_traversal(ret_list)
                if ret_list != int_list:
                    print('Fail -- obtained: ', ret_list)
                    fail = True
        return fail
    except IOError:
        print(' Could not open: ' + filename)
        return True
示例#2
0
def test_random_sequences(n, n_trials, depths_list):
    # Inputs: n = number of elements to be inserted into the tree.
    # n_trials: number of samples to generate
    # depths_list: list of tree depths for each run/sample.

    # 1. Create an array of elements from 0 to n-1
    a = [i for i in range(0,n)]
    # 2. Now create random shuffles of a and insert into the tree.
    for j in range(0, n_trials):
        # Shuffle this array randomly
        random.shuffle(a)
        # Insert the elements of the array one by one into a tree
        r = Node(a[0]) #Create a root
        # Insert the rest of the elements
        for k in range(1, n):
            r.insert(a[k])
        # Compute the depth and append to the list of samples
        depths_list.append(r.get_depth())
    avg = sum(depths_list)/len(depths_list)
    return avg