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