]> rtime.felk.cvut.cz Git - hubacji1/bcar.git/blob - ut/bcar.t.cc
Merge branch 'feature/radiuses'
[hubacji1/bcar.git] / ut / bcar.t.cc
1 #include <cmath>
2 #include "bcar.h"
3 #include "wvtest.h"
4
5 WVTEST_MAIN("bcar basic geometry")
6 {
7         BicycleCar *bc = new BicycleCar();
8         bc->x(1);
9         bc->y(1);
10         bc->h(M_PI / 2);
11         bc->mtr(10);
12         bc->wb(2);
13         bc->w(1);
14         bc->l(3);
15         bc->he(1.5);
16         bc->df(2 + 0.5);
17         bc->dr(0.5);
18
19         // car frame
20         WVPASSEQ_DOUBLE(bc->l(), bc->df() + bc->dr(), 0.00001);
21         WVPASSEQ_DOUBLE(0.5, bc->lfx(), 0.00001);
22         WVPASSEQ_DOUBLE(0.5, bc->lrx(), 0.00001);
23         WVPASSEQ_DOUBLE(1.5, bc->rrx(), 0.00001);
24         WVPASSEQ_DOUBLE(1.5, bc->rfx(), 0.00001);
25         WVPASSEQ_DOUBLE(3.5, bc->lfy(), 0.00001);
26         WVPASSEQ_DOUBLE(0.5, bc->lry(), 0.00001);
27         WVPASSEQ_DOUBLE(0.5, bc->rry(), 0.00001);
28         WVPASSEQ_DOUBLE(3.5, bc->rfy(), 0.00001);
29         WVPASSEQ_DOUBLE(0.5, bc->ralx(), 0.00001);
30         WVPASSEQ_DOUBLE(1.5, bc->rarx(), 0.00001);
31         WVPASSEQ_DOUBLE(1, bc->raly(), 0.00001);
32         WVPASSEQ_DOUBLE(1, bc->rary(), 0.00001);
33
34         // min. turning radius circle centers
35         WVPASSEQ_DOUBLE(bc->h(), bc->ccl()->h(), 0.00001);
36         WVPASSEQ_DOUBLE(M_PI / 2, bc->ccl()->h(), 0.00001);
37         WVPASSEQ_DOUBLE(-9, bc->ccl()->x(), 0.00001);
38         WVPASSEQ_DOUBLE(1, bc->ccl()->y(), 0.00001);
39         WVPASSEQ_DOUBLE(bc->h(), bc->ccr()->h(), 0.00001);
40         WVPASSEQ_DOUBLE(M_PI / 2, bc->ccr()->h(), 0.00001);
41         WVPASSEQ_DOUBLE(11, bc->ccr()->x(), 0.00001);
42         WVPASSEQ_DOUBLE(1, bc->ccr()->y(), 0.00001);
43
44         // car radiuses (inner radius, outer front radius, outer rear radius)
45         bc->h(1.2345);
46         WVPASSEQ_DOUBLE(bc->iradi(), 9.5, 0.00001);
47         WVPASSEQ_DOUBLE(bc->ofradi(), 10.793516572461451, 0.00001);
48         WVPASSEQ_DOUBLE(bc->orradi(), 10.51189802081432, 0.00001);
49         bc->h(M_PI / 2);
50
51         // drivable
52         WVPASS(!bc->drivable(bc->ccl()));
53         WVPASS(!bc->drivable(bc->ccr()));
54         BicycleCar *bc2 = new BicycleCar();
55         bc2->x(1);
56         bc2->y(2);
57         bc2->h(M_PI / 2);
58         bc2->mtr(10);
59         bc2->wb(2);
60         bc2->w(1);
61         bc2->l(3);
62         bc2->he(1.5);
63         bc2->df(2 + 0.5);
64         bc2->dr(0.5);
65         WVPASS(bc->drivable(bc2));
66         bc2->y(-2);
67         WVPASS(bc->drivable(bc2));
68
69         // moving
70         bc->sp(1);
71         bc->st(0);
72         bc->next();
73         WVPASSEQ_DOUBLE(1, bc->x(), 0.00001);
74         WVPASSEQ_DOUBLE(2, bc->y(), 0.00001);
75
76         bc->st(M_PI);
77         bc->next();
78         WVPASSEQ_DOUBLE(0.2, bc->st(), 0.00001);
79         bc->st(-M_PI);
80         bc->next();
81         WVPASSEQ_DOUBLE(-0.2, bc->st(), 0.00001);
82 }