def test_solve_sokoban_elem(): puzzle_t1 ='#######\n#@ $. #\n#######' wh = Warehouse() wh.extract_locations(puzzle_t1.split(sep='\n')) # first test answer = solve_sokoban_elem(wh) expected_answer = ['Right', 'Right'] fcn = test_solve_sokoban_elem print('<< First test of {} >>'.format(fcn.__name__)) if answer==expected_answer: print(fcn.__name__, ' passed! :-)\n') else: print(fcn.__name__, ' failed! :-(\n') print('Expected ');print(expected_answer) print('But, received ');print(answer) #second test puzzle_t2 ='#######\n#@ $ #.#\n#######' wh = Warehouse() wh.extract_locations(puzzle_t2.split(sep='\n')) # second test answer = solve_sokoban_elem(wh) expected_answer = ['Impossible'] print('<< Second test of {} >>'.format(fcn.__name__)) if answer==expected_answer: print(fcn.__name__, ' passed! :-)\n') else: print(fcn.__name__, ' failed! :-(\n') print('Expected ');print(expected_answer) print('But, received ');print(answer)
def test_solve_sokoban_elem(): puzzle_t1 = '#######\n#@ $. #\n#######' wh = Warehouse() wh.from_string(puzzle_t1) # first test answer = solve_sokoban_elem(wh) expected_answer = ['Right', 'Right'] fcn = test_solve_sokoban_elem print('<< First test of {} >>'.format(fcn.__name__)) if answer == expected_answer: print(fcn.__name__, ' passed! :-)\n') else: print(fcn.__name__, ' failed! :-(\n') print('Expected ') print(expected_answer) print('But, received ') print(answer) # second test puzzle_t2 = '#######\n#@ $ #.#\n#######' wh = Warehouse() wh.from_string(puzzle_t2) # second test answer = solve_sokoban_elem(wh) expected_answer = 'Impossible' print('<< Second test of {} >>'.format(fcn.__name__)) if answer == expected_answer: print(fcn.__name__, ' passed! :-)\n') else: print(fcn.__name__, ' failed! :-(\n') print('Expected ') print(expected_answer) print('But, received ') print(answer)
def test_elem(n): problem_file = "./warehouses/warehouse_%s.txt" % str(n) print(n, ": ", end="") wh = Warehouse() wh.load_warehouse(problem_file) time1 = time.time() solve_sokoban_elem(wh) print('{:06.3f}s'.format(time.time() - time1))
def test_solve_comparison(): problem_file = "./warehouses/warehouse_35.txt" wh = Warehouse() wh.read_warehouse_file(problem_file) print(wh) bfs = True elem = True macro = True if (bfs): sp = SokobanPuzzle(wh) start = time.time() answer = breadth_first_graph_search(sp).solution() end = time.time() print("BFS Elem took:", end - start, "secs") print(answer) if (elem): start = time.time() answer = solve_sokoban_elem(wh) end = time.time() print("A* elem took:", end - start, "secs") print(answer) if (macro): start = time.time() answer = solve_sokoban_macro(wh) end = time.time() print("A* macro took:", end - start, "secs") print(answer)
def test(n): problem_file = "./warehouses/warehouse_%s.txt" % str(n) print("Testing:", problem_file) wh = Warehouse() wh.load_warehouse(problem_file) time1 = time.time() answer = solve_sokoban_elem(wh) print(time.time() - time1) print(answer)
def test_solve_sokoban_elem(): problem_file = "./warehouses/warehouse_27.txt" wh = Warehouse() wh.read_warehouse_file(problem_file) # wh.extract_locations(puzzle_t1.split(sep='\n')) print(wh) print('\nElementary solution') answer = solve_sokoban_elem(wh) print(answer)
def test_expected(n, expected): wh = Warehouse() # removes unneccessary \n wh.from_lines(n.split(sep='\n')) answer = solve_sokoban_elem(wh) print(answer) if answer == expected: print('Test Passed') else: print("Test Failed")
def test_solve_sokoban_elem(): # problem_file = "./warehouses/warehouse_01.txt" wh = Warehouse() # wh.read_warehouse_file(problem_file) wh.extract_locations(puzzle_t1.split(sep='\n')) print(wh) print('\nElementary solution') answer = solve_sokoban_elem(wh) print(answer) if answer == ['Right', 'Right']: print('Test solve_sokoban_elem passed\n') else: print('** Test solve_sokoban_elem failed\n')
def test_warehouse(warehouse_number): average_time = 0 result = None for i in range(TESTS_PER_WAREHOUSE): problem_file = "./warehouses/warehouse_{:02d}.txt".format( warehouse_number) wh = Warehouse() wh.read_warehouse_file(problem_file) start_time = time.process_time() result = solve_sokoban_elem(wh) average_time += (time.process_time() - start_time) / TESTS_PER_WAREHOUSE print("{}%".format((i + 1) * 100 / TESTS_PER_WAREHOUSE)) with open(DATA_FILENAME, 'a') as file: file.write("{:02d},{},{}\n".format(warehouse_number, average_time, result))
def tester(num): problem_file = "./warehouses/warehouse_{:02d}.txt".format(num) print('Warehouse number:{0}'.format(num)) wh = Warehouse() wh.load_warehouse(problem_file) t0 = time.time() result = solve_sokoban_macro(wh) t1 = time.time() print('Macro Solver took {:.6f} seconds'.format(t1 - t0)) wh = Warehouse() wh.load_warehouse(problem_file) t0 = time.time() result = solve_sokoban_elem(wh) t1 = time.time() print('Elem Solver took {:.6f} seconds\n'.format(t1 - t0))
def test_solve_sokoban_elem(): problem_file = "./warehouses/warehouse_01.txt" wh = Warehouse() wh.read_warehouse_file(problem_file) answer = solve_sokoban_elem(wh) assert (answer == ['Right', 'Right'])
def test_solve_sokoban_elem(): puzzle_t1 = '#######\n#@ $. #\n#######' wh = Warehouse() wh.extract_locations(puzzle_t1.split(sep='\n')) # first test answer = solve_sokoban_elem(wh) expected_answer = ['Right', 'Right'] fcn = test_solve_sokoban_elem print('<< First test of {} >>'.format(fcn.__name__)) if answer == expected_answer: print(fcn.__name__, ' passed! :-)\n') else: print(fcn.__name__, ' failed! :-(\n') print('Expected ') print(expected_answer) print('But, received ') print(answer) # second test puzzle_t2 = '#######\n#@ $ #.#\n#######' wh = Warehouse() wh.extract_locations(puzzle_t2.split(sep='\n')) answer = solve_sokoban_elem(wh) expected_answer = ['Impossible'] print('<< Second test of {} >>'.format(fcn.__name__)) if answer == expected_answer: print(fcn.__name__, ' passed! :-)\n') else: print(fcn.__name__, ' failed! :-(\n') print('Expected ') print(expected_answer) print('But, received ') print(answer) # third test wh = Warehouse() wh.load_warehouse("./warehouses/warehouse_01.txt") answer = solve_sokoban_elem(wh) expected_answer = [ 'Down', 'Left', 'Up', 'Right', 'Right', 'Right', 'Down', 'Left', 'Up', 'Left', 'Left', 'Down', 'Down', 'Right', 'Up', 'Left', 'Up', 'Right', 'Up', 'Up', 'Left', 'Down', 'Right', 'Down', 'Down', 'Right', 'Right', 'Up', 'Left', 'Down', 'Left', 'Up', 'Up' ] fcn = test_solve_sokoban_elem print('<< First test of {} >>'.format(fcn.__name__)) if answer == expected_answer: print(fcn.__name__, ' passed! :-)\n') else: print(fcn.__name__, ' failed! :-(\n') print('Expected ') print(expected_answer) print('But, received ') print(answer) # 4 test wh = Warehouse() wh.load_warehouse("./warehouses/warehouse_03.txt") answer = solve_sokoban_elem(wh) expected_answer = ['Right', 'Up', 'Up', 'Left', 'Left', 'Left', 'Up', \ 'Left', 'Down', 'Right', 'Right', 'Right', 'Right', \ 'Down', 'Down', 'Left', 'Up', 'Right', 'Up', 'Left', \ 'Left', 'Left', 'Down', 'Down', 'Left', 'Left', 'Left', \ 'Up', 'Up', 'Right', 'Right', 'Down', 'Right', 'Down', \ 'Left', 'Up', 'Up', 'Up', 'Right', 'Down', 'Down'] fcn = test_solve_sokoban_elem print('<< First test of {} >>'.format(fcn.__name__)) if answer == expected_answer: print(fcn.__name__, ' passed! :-)\n') print('Number of moves: ', len(expected_answer)) else: print(fcn.__name__, ' failed! :-(\n') print('Expected (' + str(len(expected_answer)) + ' moves)') print(expected_answer) print('But, received (' + str(len(answer)) + ' moves)') print(answer) wh = Warehouse() wh.load_warehouse("./warehouses/warehouse_47.txt") answer = solve_sokoban_elem(wh) expected_answer = ['Right', 'Right', 'Right', 'Up', 'Up', 'Up', 'Left', \ 'Left', 'Down', 'Right', 'Right', 'Down', 'Down', 'Left', \ 'Left', 'Left', 'Left', 'Up', 'Up', 'Right', 'Right', \ 'Right', 'Up', 'Right', 'Down', 'Down', 'Up', 'Left', \ 'Left', 'Left', 'Left', 'Down', 'Down', 'Right', 'Right', \ 'Right', 'Right', 'Right', 'Right', 'Down', 'Right', \ 'Right', 'Up', 'Left', 'Left', 'Left', 'Left', 'Left', \ 'Left', 'Right', 'Right', 'Up', 'Up', 'Up', 'Right', \ 'Right', 'Down', 'Left', 'Up', 'Left', 'Down', 'Down', \ 'Up', 'Left', 'Left', 'Left', 'Left', 'Down', 'Down', \ 'Down', 'Right', 'Right', 'Up', 'Right', 'Right', 'Left', \ 'Left', 'Down', 'Left', 'Left', 'Up', 'Right', 'Right'] fcn = test_solve_sokoban_elem print('<< First test of {} >>'.format(fcn.__name__)) if answer == expected_answer: print(fcn.__name__, ' passed! :-)\n') print('Number of moves: ', len(expected_answer)) else: print(fcn.__name__, ' failed! :-(\n') print('Expected (' + str(len(expected_answer)) + ' moves)') print(expected_answer) print('But, received (' + str(len(answer)) + ' moves)') print(answer) wh = Warehouse() wh.load_warehouse("./warehouses/warehouse_147.txt") answer = solve_sokoban_elem(wh) expected_answer = ['Left', 'Left', 'Left', 'Left', 'Left', 'Left', 'Down', \ 'Down', 'Down', 'Right', 'Right', 'Up', 'Left', 'Down', \ 'Left', 'Up', 'Up', 'Left', 'Up', 'Right', 'Right', \ 'Right', 'Right', 'Right', 'Right', 'Down', 'Right', 'Right', \ 'Right', 'Up', 'Up', 'Left', 'Left', 'Down', 'Left', \ 'Left', 'Left', 'Left', 'Left', 'Left', 'Down', 'Down', \ 'Right', 'Right', 'Right', 'Down', 'Right', 'Down', 'Down', \ 'Left', 'Up', 'Right', 'Up', 'Left', 'Left', 'Left', 'Right', \ 'Right', 'Down', 'Down', 'Down', 'Left', 'Left', 'Up', \ 'Up', 'Left', 'Up', 'Up', 'Up', 'Left', 'Up', 'Right', \ 'Right', 'Right', 'Right', 'Right', 'Right', 'Left', 'Left', \ 'Left', 'Left', 'Left', 'Down', 'Down', 'Right', 'Right', \ 'Down', 'Left', 'Down', 'Left', 'Up', 'Up', 'Up', 'Left', \ 'Up', 'Right', 'Right', 'Right', 'Right', 'Right', 'Down', \ 'Right', 'Down', 'Right', 'Right', 'Up', 'Left', 'Right', \ 'Right', 'Up', 'Up', 'Left', 'Left', 'Down', 'Left', 'Left', \ 'Left', 'Left', 'Left', 'Left', 'Right', 'Right', 'Right', \ 'Right', 'Right', 'Right', 'Up', 'Right', 'Right', 'Down', \ 'Down', 'Left', 'Down', 'Left', 'Left', 'Up', 'Right', 'Up', \ 'Left', 'Left', 'Down', 'Right', 'Right', 'Right', 'Down',\ 'Right', 'Up'] fcn = test_solve_sokoban_elem print('<< First test of {} >>'.format(fcn.__name__)) if answer == expected_answer: print(fcn.__name__, ' passed! :-)\n') print('Number of moves: ', len(expected_answer)) else: print(fcn.__name__, ' failed! :-(\n') print('Expected (' + str(len(expected_answer)) + ' moves)') print(expected_answer) print('But, received (' + str(len(answer)) + ' moves)') print(answer)
num = int(input("Warehouse Num: ")) problem_file = "./warehouses/warehouse_{:02d}.txt".format(num) # Test marco solver wh = Warehouse() wh.load_warehouse(problem_file) print(wh) print("Macro Solver") t0 = time.time() result = mySokobanSolver.solve_sokoban_macro(wh) t1 = time.time() print('Macro Solver took {:.6f} seconds'.format(t1 - t0)) print("Solution: {0}".format(result)) print("Solution Len: {0} \n".format(len(result))) # Test element solver wh = Warehouse() wh.load_warehouse(problem_file) print("Element Solver") t0 = time.time() result = mySokobanSolver.solve_sokoban_elem(wh) t1 = time.time() print('Elem Solver took {:.6f} seconds'.format(t1 - t0)) print("Solution: {0}".format(result)) print("Solution Len: {0} \n".format(len(result)))