forked from knaxus/problem-solving-javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAStar.test.js
122 lines (117 loc) · 3.23 KB
/
AStar.test.js
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
const { AStar } = require('.');
describe('A*', () => {
describe('Completes grid successfully', () => {
it('A*', () => {
const inputGrid = [
[1, 1, 1, 0, 0, 0],
[1, 0, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
];
const ROW = inputGrid.length;
const COL = inputGrid[0].length;
const start = {
i: 0,
j: 0,
};
const end = {
i: 3,
j: 5,
};
const completedPath = [[3, 5], [3, 4], [3, 3], [3, 2], [3, 1], [2, 0], [1, 0], [0, 0]];
expect(AStar(start, end, ROW, COL, inputGrid)).toEqual(completedPath);
});
});
describe('Completes large grid successfully', () => {
it('A*', () => {
const inputGrid = [
[1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1],
[1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1],
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1],
[0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
];
const ROW = inputGrid.length;
const COL = inputGrid[0].length;
const start = {
i: 0,
j: 0,
};
const end = {
i: 8,
j: 11,
};
const completedPath = [[8, 11], [8, 10], [7, 9], [6, 8], [5, 9], [5, 10],
[4, 11], [3, 11], [2, 11], [1, 11], [0, 10], [1, 9], [0, 8], [1, 7],
[1, 6], [2, 5], [2, 4], [2, 3], [2, 2], [2, 1], [1, 0], [0, 0]];
expect(AStar(start, end, ROW, COL, inputGrid)).toEqual(completedPath);
});
});
describe('Cannot complete grid successfully', () => {
it('A*', () => {
const inputGrid = [
[1, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
];
const ROW = inputGrid.length;
const COL = inputGrid[0].length;
const start = {
i: 0,
j: 0,
};
const end = {
i: 3,
j: 5,
};
expect(() => { AStar(start, end, ROW, COL, inputGrid); }).toThrowError('Error: Endpoint cannot be reached');
});
});
describe('Endpoint out of grid bounds', () => {
it('A*', () => {
const inputGrid = [
[1, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
];
const ROW = inputGrid.length;
const COL = inputGrid[0].length;
const start = {
i: 0,
j: 0,
};
const end = {
i: 5,
j: 5,
};
expect(() => { AStar(start, end, ROW, COL, inputGrid); }).toThrowError('Error: Endpoint outside grid bounds');
});
});
describe('Endpoint value is zero', () => {
it('A*', () => {
const inputGrid = [
[1, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
];
const ROW = inputGrid.length;
const COL = inputGrid[0].length;
const start = {
i: 0,
j: 0,
};
const end = {
i: 1,
j: 3,
};
expect(() => { AStar(start, end, ROW, COL, inputGrid); }).toThrowError('Error: Endpoint is unreachable');
});
});
});