Helios++
Helios software for LiDAR simulations
DiscreteTimeTest.h
1 #pragma once
2 
3 #include <BaseTest.h>
4 #include <sim/tools/DiscreteTime.h>
5 
6 namespace HeliosTests{
7 
13 class DiscreteTimeTest : public BaseTest{
14 public:
15  // *** CONSTRUCTOR *** //
16  // ********************* //
17  DiscreteTimeTest() : BaseTest("Discrete time test") {}
18  virtual ~DiscreteTimeTest(){}
19 
20  // *** R U N *** //
21  // *************** //
25  bool run() override;
26 };
27 
28 // *** R U N *** //
29 // *************** //
31  // Do some tests
32  DiscreteTime dt1(500, 1.0);
33  if(dt1.toDiscrete(0.5)!=250) return false;
34  if(dt1.toDiscrete(1.5)!=750) return false;
35  if(dt1.toCyclicDiscrete(0.5)!=250) return false;
36  if(dt1.toCyclicDiscrete(1.5)!=250) return false;
37  if(dt1.toCyclicDiscrete(3.5)!=250) return false;
38  if(dt1.toPeriodicDiscrete(0.5)!=250) return false;
39  if(dt1.toPeriodicDiscrete(1.5)!=250) return false;
40  if(dt1.toPeriodicDiscrete(3.5)!=250) return false;
41  if(dt1.toContinuous(250)!=0.5) return false;
42  if(dt1.toContinuous(750)!=1.5) return false;
43  if(dt1.toCyclicContinuous(250)!=0.5) return false;
44  if(dt1.toCyclicContinuous(750)!=0.5) return false;
45  if(dt1.toCyclicContinuous(1750)!=0.5) return false;
46  if(dt1.toPeriodicContinuous(250)!=0.5) return false;
47  if(dt1.toPeriodicContinuous(750)!=0.5) return false;
48  if(dt1.toPeriodicContinuous(1750)!=0.5) return false;
49 
50  // Do some more tests
51  DiscreteTime dt2(500, 2.0);
52  if(dt2.toDiscrete(0.5)!=250) return false;
53  if(dt2.toDiscrete(1.5)!=750) return false;
54  if(dt2.toCyclicDiscrete(0.5)!=250) return false;
55  if(dt2.toCyclicDiscrete(1.5)!=250) return false;
56  if(dt2.toCyclicDiscrete(3.5)!=250) return false;
57  if(dt2.toPeriodicDiscrete(0.0)!=0) return false;
58  if(dt2.toPeriodicDiscrete(0.2)!=100) return false;
59  if(dt2.toPeriodicDiscrete(0.5)!=250) return false;
60  if(dt2.toPeriodicDiscrete(1.5)!=750) return false;
61  if(dt2.toPeriodicDiscrete(2.0)!=0) return false;
62  if(dt2.toPeriodicDiscrete(2.2)!=100) return false;
63  if(dt2.toPeriodicDiscrete(2.5)!=250) return false;
64  if(dt2.toPeriodicDiscrete(3.5)!=750) return false;
65  if(dt2.toContinuous(250)!=0.5) return false;
66  if(dt2.toContinuous(750)!=1.5) return false;
67  if(dt2.toCyclicContinuous(250)!=0.5) return false;
68  if(dt2.toCyclicContinuous(750)!=0.5) return false;
69  if(dt2.toCyclicContinuous(1750)!=0.5) return false;
70  if(dt2.toPeriodicContinuous(0)!=0.0) return false;
71  if(dt2.toPeriodicContinuous(100)!=0.2) return false;
72  if(dt2.toPeriodicContinuous(250)!=0.5) return false;
73  if(dt2.toPeriodicContinuous(500)!=1.0) return false;
74  if(dt2.toPeriodicContinuous(750)!=1.5) return false;
75  if(dt2.toPeriodicContinuous(1000)!=0.0) return false;
76  if(dt2.toPeriodicContinuous(1250)!=0.5) return false;
77  if(dt2.toPeriodicContinuous(1500)!=1.0) return false;
78  if(dt2.toPeriodicContinuous(1750)!=1.5) return false;
79 
80  // Do even more tests
81  DiscreteTime dt3(500, 0.5);
82  if(dt3.toDiscrete(0.5)!=250) return false;
83  if(dt3.toDiscrete(1.5)!=750) return false;
84  if(dt3.toCyclicDiscrete(0.5)!=250) return false;
85  if(dt3.toCyclicDiscrete(1.5)!=250) return false;
86  if(dt3.toCyclicDiscrete(3.5)!=250) return false;
87  if(dt3.toPeriodicDiscrete(0.0)!=0) return false;
88  if(dt3.toPeriodicDiscrete(0.2)!=100) return false;
89  if(dt3.toPeriodicDiscrete(0.5)!=0) return false;
90  if(dt3.toPeriodicDiscrete(1.5)!=0) return false;
91  if(dt3.toPeriodicDiscrete(2.0)!=0) return false;
92  if(dt3.toPeriodicDiscrete(2.2)!=100) return false;
93  if(dt3.toPeriodicDiscrete(2.5)!=0) return false;
94  if(dt3.toPeriodicDiscrete(3.5)!=0) return false;
95  if(dt3.toContinuous(250)!=0.5) return false;
96  if(dt3.toContinuous(750)!=1.5) return false;
97  if(dt3.toCyclicContinuous(250)!=0.5) return false;
98  if(dt3.toCyclicContinuous(750)!=0.5) return false;
99  if(dt3.toCyclicContinuous(1750)!=0.5) return false;
100  if(dt3.toPeriodicContinuous(0)!=0.0) return false;
101  if(dt3.toPeriodicContinuous(100)!=0.2) return false;
102  if(dt3.toPeriodicContinuous(250)!=0.0) return false;
103  if(dt3.toPeriodicContinuous(500)!=0.0) return false;
104  if(dt3.toPeriodicContinuous(750)!=0.0) return false;
105  if(dt3.toPeriodicContinuous(1000)!=0.0) return false;
106  if(dt3.toPeriodicContinuous(1250)!=0.0) return false;
107  if(dt3.toPeriodicContinuous(1350)!=0.2) return false;
108  if(dt3.toPeriodicContinuous(1500)!=0.0) return false;
109  if(dt3.toPeriodicContinuous(1750)!=0.0) return false;
110 
111  // Yet more tests
112  if(dt1.toDiscrete(0.00001) != 0) return false;
113  if(dt2.toCyclicDiscrete(0.00001) != 0) return false;
114  if(dt2.toPeriodicDiscrete(0.00001) != 0) return false;
115  if(dt1.toContinuous(0) != 0.0) return false;
116  if(dt1.toContinuous(1) <= 0.0) return false;
117  if(dt3.toCyclicContinuous(0) != 0.0) return false;
118  if(dt3.toPeriodicContinuous(1) <= 0.0) return false;
119  if(dt2.toDiscrete(0.99999999) != 499) return false;
120  if(std::fabs(dt3.toContinuous(499)-0.999999) < 0.000001) return false;
121  if(dt2.toPeriodicDiscrete(1.99999999) != 999) return false;
122  if(dt3.toPeriodicDiscrete(0.49999999) != 249) return false;
123  if(std::fabs(dt2.toPeriodicContinuous(999)-1.9999) < 0.0001) return false;
124  if(std::fabs(dt3.toPeriodicContinuous(249)-0.4999) < 0.0001) return false;
125 
126  // Another bunch of tests
127  DiscreteTime dt4(1000000, 1.0);
128  if(dt4.toDiscrete(0.00000000001) != 0) return false;
129  if(dt4.toDiscrete(0.000001) != 1) return false;
130  if(dt4.toDiscrete(0.999999999999) != 999999) return false;
131  if(dt4.toDiscrete(3.00000000001) != 3000000) return false;
132  if(dt4.toDiscrete(2.000001) != 2000001) return false;
133  if(dt4.toDiscrete(4.999999999999) != 4999999) return false;
134  if(dt4.toCyclicDiscrete(3.00000000001) != 0) return false;
135  if(dt4.toCyclicDiscrete(2.000001) != 1) return false;
136  if(dt4.toCyclicDiscrete(4.999999999999) != 999999) return false;
137  if(dt4.toPeriodicDiscrete(3.00000000001) != 0) return false;
138  if(dt4.toPeriodicDiscrete(2.000001) != 1) return false;
139  if(dt4.toPeriodicDiscrete(4.999999999999) != 999999) return false;
140  if(dt4.toContinuous(0) != 0.0) return false;
141  if(dt4.toContinuous(1) != 0.000001) return false;
142  if(std::fabs(dt4.toContinuous(999999)-0.999999) > 0.0000001) return false;
143  if(std::fabs(dt4.toContinuous(3000000)) != 3.0) return false;
144  if(std::fabs(dt4.toContinuous(2000001)-2.000001) > 0.0000001) return false;
145  if(std::fabs(dt4.toContinuous(4999999)-4.999999) > 0.0000001) return false;
146  if(std::fabs(dt4.toCyclicContinuous(3000000)) != 0.0) return false;
147  if(std::fabs(dt4.toCyclicContinuous(2000001)-0.000001) > 0.0000001)
148  return false;
149  if(std::fabs(dt4.toCyclicContinuous(4999999)-0.999999) > 0.0000001)
150  return false;
151  if(std::fabs(dt4.toPeriodicContinuous(3000000)) != 0.0) return false;
152  if(std::fabs(dt4.toPeriodicContinuous(2000001)-0.000001) > 0.0000001)
153  return false;
154  if(std::fabs(dt4.toPeriodicContinuous(4999999)-0.999999) > 0.0000001)
155  return false;
156  if(dt4.toDiscrete(dt4.toContinuous(0))!=0) return false;
157  if(dt4.toDiscrete(dt4.toContinuous(500000))!=500000) return false;
158  if(dt4.toDiscrete(dt4.toContinuous(999999))!=999999) return false;
159  if(dt4.toDiscrete(dt4.toContinuous(1000000))!=1000000) return false;
160  if(dt4.toCyclicDiscrete(dt4.toContinuous(1000000))!=0) return false;
161  if(dt4.toPeriodicDiscrete(dt4.toContinuous(1000000))!=0) return false;
162  if(dt4.toContinuous(dt4.toDiscrete(0.0))!=0.0) return false;
163  if(dt4.toContinuous(dt4.toDiscrete(0.5))!=0.5) return false;
164  if(dt4.toContinuous(dt4.toDiscrete(1.0))!=1.0) return false;
165  if(dt4.toCyclicContinuous(dt4.toDiscrete(1.0))!=0.0) return false;
166  if(dt4.toPeriodicContinuous(dt4.toDiscrete(1.0))!=0.0) return false;
167 
168  // All tests were successful
169  return true;
170 }
171 
172 }
Class to handle discrete time. It supports transforming from continuous time to discrete time and als...
Definition: DiscreteTime.h:16
BaseTest class.
Definition: BaseTest.h:20
BaseTest(std::string const &name)
Base test constructor.
Definition: BaseTest.h:35
Test discrete time handling.
Definition: DiscreteTimeTest.h:13
bool run() override
Definition: DiscreteTimeTest.h:30