Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

from PathFinder.PathFinder import PathFinder 

from PathFinder.TreeSearch import TreeSearch 

from Map.MapReader import MapReader 

from PathFinder.AStar import AStar 

from Map.Move import Move 

from Map.Map import Map 

from test import files 

import unittest 

import time 

 

 

def testPaths(self, solver, isBFS=False, checkLength=True): 

# test simple solve with one move 

mr = MapReader() 

mr.load(files.quick_solve) 

tester = Map(mr) 

pf = None 

 

# set path finder (BFS and DFS have different initializations) 

if solver == AStar: 

pf = solver(tester) 

else: 

pf = solver(tester, bfs=isBFS) 

 

path = None 

if solver == AStar: 

path = pf.getPath(self.heuristic) 

else: 

path = pf.getPath() 

 

self.solve(tester, path) 

self.assertTrue(tester.isSolved()) 

if checkLength: 

self.assertEquals(len(path), 1) 

else: 

print len(path) 

 

# test simple solve with two moves 

mr = MapReader() 

mr.load(files.right) 

tester = Map(mr) 

pf.board = tester 

 

path = None 

if solver == AStar: 

path = pf.getPath(self.heuristic) 

else: 

path = pf.getPath() 

 

self.solve(tester, path) 

self.assertTrue(tester.isSolved()) 

if checkLength: 

self.assertEquals(len(path), 1) 

 

# test simple solve with a few moves 

mr = MapReader() 

mr.load(files.easy_solve) 

tester = Map(mr) 

pf.board = tester 

 

path = None 

if solver == AStar: 

path = pf.getPath(self.heuristic) 

else: 

path = pf.getPath() 

 

self.solve(tester, path) 

self.assertTrue(tester.isSolved()) 

if checkLength: 

self.assertEquals(len(path), 3) 

 

# test complex map 

start = time.clock() 

mr = MapReader() 

mr.load(files.simple_solve) 

tester = Map(mr) 

pf.board = tester 

 

path = None 

if solver == AStar: 

path = pf.getPath(self.heuristic) 

else: 

path = pf.getPath() 

 

self.solve(tester, path) 

self.assertTrue(tester.isSolved()) 

 

if checkLength: 

self.assertEquals(len(path), 15) 

 

end = time.clock() 

print 

print solver, "time ", isBFS, ":", end - start 

 

# test handing a solved map to pathfinder 

pf.board = tester 

 

path = None 

if solver == AStar: 

self.assertEquals(pf.getPath(self.heuristic), None) 

else: 

self.assertEquals(pf.getPath(), None) 

 

# test impossible map 

mr = MapReader() 

mr.load(files.impossible) 

tester = Map(mr) 

pf.board = tester 

 

path = None 

if solver == AStar: 

path = pf.getPath(self.heuristic) 

else: 

path = pf.getPath() 

 

self.assertEquals(path, None) 

 

class PathFindingTest(unittest.TestCase): 

 

def solve(self, board, moves): 

for move in moves: 

board.makeConfidentMove(move) 

 

def test_pathFinder(self): 

pf = PathFinder(None) 

 

with self.assertRaises(NotImplementedError): 

pf.getPath() 

 

def test_dfs(self): 

testPaths(self, TreeSearch, isBFS=False, checkLength=False) 

 

def test_bfs(self): 

testPaths(self, TreeSearch, isBFS=True) 

 

def heuristic(self, board): 

return 0 

 

def test_AStar(self): 

testPaths(self, AStar) 

 

# test giving a non callable function 

mr = MapReader() 

mr.load(files.quick_solve) 

tester = Map(mr) 

pf = AStar(tester) 

 

path = pf.getPath(None) 

self.assertEquals(path, None) 

 

path = pf.getPath('None') 

self.assertEquals(path, None) 

 

path = pf.getPath(1) 

self.assertEquals(path, None)