]> rtime.felk.cvut.cz Git - hubacji1/psp.git/blob - ut/psp.t.cc
Add ut for fe method
[hubacji1/psp.git] / ut / psp.t.cc
1 #include <cmath>
2 #include "wvtest.h"
3
4 #include "psp.h"
5
6 WVTEST_MAIN("parallel parking slot planner")
7 {
8         PSPlanner psp;
9         psp.ps().border(3, 3, 5, 3, 5, 8, 3, 8);
10         psp.gc().x(4);
11         psp.gc().y(4);
12         psp.gc().h(M_PI / 2);
13         psp.gc().mtr(10);
14         psp.gc().wb(2);
15         psp.gc().w(1);
16         psp.gc().l(3);
17         psp.gc().he(1.5);
18         psp.gc().df(2 + 0.5);
19         psp.gc().dr(0.5);
20         psp.cc() = BicycleCar(psp.gc());
21
22         // init orientation
23         WVPASS(!psp.collide());
24         WVPASS(psp.forward());
25         WVPASSEQ_DOUBLE(psp.ps().heading(), psp.gc().h(), 0.00001);
26
27         // entry point found by reverse
28         WVPASS(!psp.left());
29         psp.fer();
30         WVPASS(psp.left());
31
32         // find entry
33         psp.cc() = BicycleCar(psp.gc());
34         WVPASS(!psp.left());
35         psp.fe();
36         WVPASS(psp.left());
37
38         // collide
39         auto tmpi1 = intersect(1, 1, 3, 3, 1, 3, 3, 1);
40         WVPASS(std::get<0>(tmpi1));
41         WVPASSEQ_DOUBLE(std::get<1>(tmpi1), 2, 0.00001);
42         WVPASSEQ_DOUBLE(std::get<2>(tmpi1), 2, 0.00001);
43         auto tmpi2 = intersect(1, 1, 1, 3, 3, 1, 3, 3);
44         WVPASS(!std::get<0>(tmpi2));
45         PSPlanner tpsp;
46         tpsp.ps().border(2, 3, 4, 3, 4, 8, 2, 8);
47         tpsp.gc() = BicycleCar(psp.gc());
48         tpsp.cc() = BicycleCar(tpsp.gc());
49         WVPASS(tpsp.collide());
50         WVPASS(!tpsp.left());
51         tpsp.ps().border(3, 4.1, 3, 2.1, 8, 2.1, 8, 4.1);
52         WVPASS(tpsp.left());
53 }
54
55 WVTEST_MAIN("backward perpendicullar parking slot planner")
56 {
57         PSPlanner psp;
58         psp.ps().border(3, 3, 8, 3, 8, 5, 3, 5);
59         psp.gc().x(7);
60         psp.gc().y(4);
61         psp.gc().h(M_PI);
62         psp.gc().mtr(10);
63         psp.gc().wb(2);
64         psp.gc().w(1);
65         psp.gc().l(3);
66         psp.gc().he(1.5);
67         psp.gc().df(2 + 0.5);
68         psp.gc().dr(0.5);
69         psp.cc() = BicycleCar(psp.gc());
70
71         // init orientation
72         WVPASS(!psp.collide());
73         WVPASS(!psp.forward());
74         WVPASSEQ_DOUBLE(psp.ps().heading() + M_PI / 2, psp.gc().h(), 0.00001);
75
76         // entry point found by reverse
77         WVPASS(!psp.left());
78         psp.fer();
79         WVPASS(psp.left());
80
81         // find entry
82         psp.cc() = BicycleCar(psp.gc());
83         WVPASS(!psp.left());
84         psp.fe();
85         WVPASS(psp.left());
86 }
87
88 WVTEST_MAIN("forward perpendicullar parking slot planner")
89 {
90         PSPlanner psp;
91         psp.ps().border(3, 3, 8, 3, 8, 5, 3, 5);
92         psp.gc().x(4);
93         psp.gc().y(4);
94         psp.gc().h(0);
95         psp.gc().mtr(10);
96         psp.gc().wb(2);
97         psp.gc().w(1);
98         psp.gc().l(3);
99         psp.gc().he(1.5);
100         psp.gc().df(2 + 0.5);
101         psp.gc().dr(0.5);
102         psp.cc() = BicycleCar(psp.gc());
103
104         // init orientation
105         WVPASS(!psp.collide());
106         WVPASS(psp.forward());
107         WVPASSEQ_DOUBLE(psp.ps().heading() - M_PI / 2, psp.gc().h(), 0.00001);
108
109         // entry point found by reverse
110         WVPASS(!psp.left());
111         psp.fer();
112         WVPASS(psp.left());
113
114         // find entry
115         psp.cc() = BicycleCar(psp.gc());
116         WVPASS(!psp.left());
117         psp.fe();
118         WVPASS(psp.left());
119 }