blob: bcf72b4b87a768b98bda4ed5acb2d9e8806a58cf [file] [log] [blame]
Brian Silverman246cb222019-02-02 16:38:18 -08001#include "aos/util/bitpacking.h"
2
Austin Schuh34b24f52022-08-16 17:47:39 -07003#include <array>
Tyler Chatowbf0609c2021-07-31 16:13:27 -07004#include <cstdint>
Stephan Pleinesb1177672024-05-27 17:48:32 -07005#include <memory>
Brian Silverman246cb222019-02-02 16:38:18 -08006
7#include "gtest/gtest.h"
8
Stephan Pleinesf63bde82024-01-13 15:59:33 -08009namespace aos::testing {
Brian Silverman246cb222019-02-02 16:38:18 -080010
11// Tests MaskOnes with small arguments.
12TEST(MaskOnesTest, Small) {
13 EXPECT_EQ(0u, MaskOnes<uint8_t>(0));
14 EXPECT_EQ(0u, MaskOnes<uint64_t>(0));
15 EXPECT_EQ(1u, MaskOnes<uint8_t>(1));
16 EXPECT_EQ(1u, MaskOnes<uint64_t>(1));
17}
18
19// Tests MaskOnes with large arguments.
20TEST(MaskOnesTest, Large) {
21 EXPECT_EQ(0xFFu, MaskOnes<uint8_t>(8));
22 EXPECT_EQ(0x7Fu, MaskOnes<uint8_t>(7));
23
24 EXPECT_EQ(0xFFu, MaskOnes<uint64_t>(8));
25 EXPECT_EQ(UINT64_C(0xFFFFFFFFFFFFFFFF), MaskOnes<uint64_t>(64));
26 EXPECT_EQ(UINT64_C(0x7FFFFFFFFFFFFFFF), MaskOnes<uint64_t>(63));
27}
28
29// Tests some simple non-edge-case use cases for PackBits.
30TEST(PackBitsTest, Basic) {
31 {
32 std::array<char, 3> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -080033 PackBits<uint8_t, 8, 0>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -080034 EXPECT_EQ((std::array<char, 3>{}), buffer);
Austin Schuhb72be802022-01-02 12:26:28 -080035 PackBits<uint8_t, 8, 0>(9, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -080036 EXPECT_EQ((std::array<char, 3>{{9, 0, 0}}), buffer);
Austin Schuhb72be802022-01-02 12:26:28 -080037 PackBits<uint8_t, 8, 8>(7, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -080038 EXPECT_EQ((std::array<char, 3>{{9, 7, 0}}), buffer);
Austin Schuhb72be802022-01-02 12:26:28 -080039 PackBits<uint8_t, 8, 16>(1, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -080040 EXPECT_EQ((std::array<char, 3>{{9, 7, 1}}), buffer);
41 }
42 {
43 std::array<char, 3> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -080044 PackBits<uint16_t, 16, 0>(0xdead, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -080045 EXPECT_EQ((std::array<char, 3>{
46 {static_cast<char>(0xad), static_cast<char>(0xde), 0}}),
47 buffer);
48 }
49 {
50 std::array<char, 3> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -080051 PackBits<uint8_t, 4, 0>(0xd7, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -080052 EXPECT_EQ((std::array<char, 3>{{0x7, 0, 0}}), buffer);
53 }
54 {
55 std::array<char, 3> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -080056 PackBits<uint8_t, 4, 4>(0xd7, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -080057 EXPECT_EQ((std::array<char, 3>{{0x70, 0, 0}}), buffer);
58 }
59}
60
61// Verifies that PackBits puts bits in an order consistent with increasing
62// offsets.
63TEST(PackBitsTest, Consistency) {
64 {
65 std::array<char, 3> buffer1{};
Austin Schuhb72be802022-01-02 12:26:28 -080066 PackBits<uint8_t, 8, 0>(0x80, absl::Span<char>(buffer1));
Brian Silverman246cb222019-02-02 16:38:18 -080067 std::array<char, 3> buffer2{};
Austin Schuhb72be802022-01-02 12:26:28 -080068 PackBits<uint8_t, 1, 7>(0x1, absl::Span<char>(buffer2));
Brian Silverman246cb222019-02-02 16:38:18 -080069 EXPECT_EQ(buffer1, buffer2);
70 }
71 {
72 std::array<char, 1> buffer1{{static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -080073 PackBits<uint8_t, 8, 0>(0x7F, absl::Span<char>(buffer1));
Brian Silverman246cb222019-02-02 16:38:18 -080074 std::array<char, 1> buffer2{{static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -080075 PackBits<uint8_t, 1, 7>(0x0, absl::Span<char>(buffer2));
Brian Silverman246cb222019-02-02 16:38:18 -080076 EXPECT_EQ(buffer1, buffer2);
77 }
78 {
79 std::array<char, 1> buffer1{};
Austin Schuhb72be802022-01-02 12:26:28 -080080 PackBits<uint8_t, 3, 5>(0x7, absl::Span<char>(buffer1));
Brian Silverman246cb222019-02-02 16:38:18 -080081 std::array<char, 1> buffer2{};
Austin Schuhb72be802022-01-02 12:26:28 -080082 PackBits<uint8_t, 5, 3>(0x3C, absl::Span<char>(buffer2));
Brian Silverman246cb222019-02-02 16:38:18 -080083 EXPECT_EQ(buffer1, buffer2);
84 }
85 {
86 std::array<char, 1> buffer1{{static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -080087 PackBits<uint8_t, 3, 5>(0x0, absl::Span<char>(buffer1));
Brian Silverman246cb222019-02-02 16:38:18 -080088 std::array<char, 1> buffer2{{static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -080089 PackBits<uint8_t, 5, 3>(0x03, absl::Span<char>(buffer2));
Brian Silverman246cb222019-02-02 16:38:18 -080090 EXPECT_EQ(buffer1, buffer2);
91 }
92}
93
94// Tests some simple non-edge-case use cases for UnpackBits.
95TEST(UnpackBitsTest, Basic) {
96 {
97 std::array<char, 3> buffer{};
98 EXPECT_EQ(0u, (UnpackBits<uint8_t, 8, 0>(buffer)));
99 buffer = {{9, 0, 0}};
100 EXPECT_EQ(9u, (UnpackBits<uint8_t, 8, 0>(buffer)));
101 buffer = {{9, 7, 0}};
102 EXPECT_EQ(9u, (UnpackBits<uint8_t, 8, 0>(buffer)));
103 EXPECT_EQ(7u, (UnpackBits<uint8_t, 8, 8>(buffer)));
104 buffer = {{9, 7, 1}};
105 EXPECT_EQ(9u, (UnpackBits<uint8_t, 8, 0>(buffer)));
106 EXPECT_EQ(7u, (UnpackBits<uint8_t, 8, 8>(buffer)));
107 EXPECT_EQ(1u, (UnpackBits<uint8_t, 8, 16>(buffer)));
108 }
109 {
110 const std::array<char, 3> buffer = {
111 {static_cast<char>(0xad), static_cast<char>(0xde), 0}};
112 EXPECT_EQ(0xdead, (UnpackBits<uint16_t, 16, 0>(buffer)));
113 }
114 {
115 const std::array<char, 3> buffer = {{static_cast<char>(0xF7), 0, 0}};
116 EXPECT_EQ(7u, (UnpackBits<uint8_t, 4, 0>(buffer)));
117 }
118 {
119 const std::array<char, 3> buffer = {{static_cast<char>(0x7F), 0, 0}};
120 EXPECT_EQ(7u, (UnpackBits<uint8_t, 4, 4>(buffer)));
121 }
122}
123
124// Tests PackBits split across multiple bytes.
125TEST(PackBitsTest, AcrossBytes) {
126 {
127 std::array<char, 2> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -0800128 PackBits<uint8_t, 8, 7>(0xFF, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800129 EXPECT_EQ((std::array<char, 2>{
130 {static_cast<char>(0x80), static_cast<char>(0x7F)}}),
131 buffer);
132 }
133 {
134 std::array<char, 2> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -0800135 PackBits<uint8_t, 8, 6>(0xFF, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800136 EXPECT_EQ((std::array<char, 2>{
137 {static_cast<char>(0xC0), static_cast<char>(0x3F)}}),
138 buffer);
139 }
140 {
141 std::array<char, 2> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -0800142 PackBits<uint8_t, 8, 5>(0xFF, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800143 EXPECT_EQ((std::array<char, 2>{
144 {static_cast<char>(0xE0), static_cast<char>(0x1F)}}),
145 buffer);
146 }
147 {
148 std::array<char, 2> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -0800149 PackBits<uint8_t, 8, 4>(0xFF, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800150 EXPECT_EQ((std::array<char, 2>{
151 {static_cast<char>(0xF0), static_cast<char>(0x0F)}}),
152 buffer);
153 }
154 {
155 std::array<char, 2> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -0800156 PackBits<uint8_t, 8, 3>(0xFF, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800157 EXPECT_EQ((std::array<char, 2>{
158 {static_cast<char>(0xF8), static_cast<char>(0x07)}}),
159 buffer);
160 }
161 {
162 std::array<char, 2> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -0800163 PackBits<uint8_t, 8, 2>(0xFF, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800164 EXPECT_EQ((std::array<char, 2>{
165 {static_cast<char>(0xFC), static_cast<char>(0x03)}}),
166 buffer);
167 }
168 {
169 std::array<char, 2> buffer{};
Austin Schuhb72be802022-01-02 12:26:28 -0800170 PackBits<uint8_t, 8, 1>(0xFF, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800171 EXPECT_EQ((std::array<char, 2>{
172 {static_cast<char>(0xFE), static_cast<char>(0x01)}}),
173 buffer);
174 }
175}
176
177// Tests UnpackBits split across multiple bytes.
178TEST(UnpackBitsTest, AcrossBytes) {
179 {
180 const std::array<char, 2> buffer = {
181 {static_cast<char>(0x80), static_cast<char>(0x7F)}};
182 EXPECT_EQ(0xFFu, (UnpackBits<uint8_t, 8, 7>(buffer)));
183 }
184 {
185 const std::array<char, 2> buffer = {
186 {static_cast<char>(0xC0), static_cast<char>(0x3F)}};
187 EXPECT_EQ(0xFFu, (UnpackBits<uint8_t, 8, 6>(buffer)));
188 }
189 {
190 const std::array<char, 2> buffer = {
191 {static_cast<char>(0xE0), static_cast<char>(0x1F)}};
192 EXPECT_EQ(0xFFu, (UnpackBits<uint8_t, 8, 5>(buffer)));
193 }
194 {
195 const std::array<char, 2> buffer = {
196 {static_cast<char>(0xF0), static_cast<char>(0x0F)}};
197 EXPECT_EQ(0xFFu, (UnpackBits<uint8_t, 8, 4>(buffer)));
198 }
199 {
200 const std::array<char, 2> buffer = {
201 {static_cast<char>(0xF8), static_cast<char>(0x07)}};
202 EXPECT_EQ(0xFFu, (UnpackBits<uint8_t, 8, 3>(buffer)));
203 }
204 {
205 const std::array<char, 2> buffer = {
206 {static_cast<char>(0xFC), static_cast<char>(0x03)}};
207 EXPECT_EQ(0xFFu, (UnpackBits<uint8_t, 8, 2>(buffer)));
208 }
209 {
210 const std::array<char, 2> buffer = {
211 {static_cast<char>(0xFE), static_cast<char>(0x01)}};
212 EXPECT_EQ(0xFFu, (UnpackBits<uint8_t, 8, 1>(buffer)));
213 }
214}
215
216// Verifies that PackBits avoids touching adjacent bits.
217TEST(PackBitsTest, AdjacentBits) {
218 {
219 std::array<char, 2> buffer{
220 {static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800221 PackBits<uint8_t, 1, 0>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800222 EXPECT_EQ((std::array<char, 2>{
223 {static_cast<char>(0xFE), static_cast<char>(0xFF)}}),
224 buffer);
225 }
226 {
227 std::array<char, 2> buffer{
228 {static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800229 PackBits<uint8_t, 7, 0>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800230 EXPECT_EQ((std::array<char, 2>{
231 {static_cast<char>(0x80), static_cast<char>(0xFF)}}),
232 buffer);
233 }
234 {
235 std::array<char, 2> buffer{
236 {static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800237 PackBits<uint8_t, 8, 0>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800238 EXPECT_EQ((std::array<char, 2>{
239 {static_cast<char>(0x00), static_cast<char>(0xFF)}}),
240 buffer);
241 }
242 {
243 std::array<char, 2> buffer{
244 {static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800245 PackBits<uint16_t, 9, 0>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800246 EXPECT_EQ((std::array<char, 2>{
247 {static_cast<char>(0x00), static_cast<char>(0xFE)}}),
248 buffer);
249 }
250 {
251 std::array<char, 2> buffer{
252 {static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800253 PackBits<uint16_t, 14, 0>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800254 EXPECT_EQ((std::array<char, 2>{
255 {static_cast<char>(0x00), static_cast<char>(0xC0)}}),
256 buffer);
257 }
258 {
259 std::array<char, 2> buffer{
260 {static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800261 PackBits<uint16_t, 15, 0>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800262 EXPECT_EQ((std::array<char, 2>{
263 {static_cast<char>(0x00), static_cast<char>(0x80)}}),
264 buffer);
265 }
266 {
267 std::array<char, 2> buffer{
268 {static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800269 PackBits<uint16_t, 15, 1>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800270 EXPECT_EQ((std::array<char, 2>{
271 {static_cast<char>(0x01), static_cast<char>(0x00)}}),
272 buffer);
273 }
274 {
275 std::array<char, 2> buffer{
276 {static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800277 PackBits<uint16_t, 6, 8>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800278 EXPECT_EQ((std::array<char, 2>{
279 {static_cast<char>(0xFF), static_cast<char>(0xC0)}}),
280 buffer);
281 }
282 {
283 std::array<char, 4> buffer{
284 {static_cast<char>(0xFF), static_cast<char>(0xFF),
285 static_cast<char>(0xFF), static_cast<char>(0xFF)}};
Austin Schuhb72be802022-01-02 12:26:28 -0800286 PackBits<uint16_t, 6, 24>(0, absl::Span<char>(buffer));
Brian Silverman246cb222019-02-02 16:38:18 -0800287 EXPECT_EQ((std::array<char, 4>{
288 {static_cast<char>(0xFF), static_cast<char>(0xFF),
289 static_cast<char>(0xFF), static_cast<char>(0xC0)}}),
290 buffer);
291 }
292}
293
294// Tests FloatToIntLinear with values near or outside of its boundaries.
295TEST(FloatToIntLinearTest, OutOfBounds) {
296 EXPECT_EQ(0u, (FloatToIntLinear<1>(0.0f, 1.0f, 0.0f)));
297 EXPECT_EQ(0u, (FloatToIntLinear<1>(0.0f, 1.0f, -0.1f)));
298 EXPECT_EQ(0u, (FloatToIntLinear<1>(0.0f, 1.0f, -1.0f)));
299 EXPECT_EQ(1u, (FloatToIntLinear<1>(0.0f, 1.0f, 1.0f)));
300 EXPECT_EQ(1u, (FloatToIntLinear<1>(0.0f, 1.0f, 1.1f)));
301 EXPECT_EQ(1u, (FloatToIntLinear<1>(0.0f, 1.0f, 2.0f)));
302
303 EXPECT_EQ(0u, (FloatToIntLinear<1>(0.0f, 4.0f, 0.0f)));
304 EXPECT_EQ(1u, (FloatToIntLinear<1>(0.0f, 4.0f, 4.0f)));
305 EXPECT_EQ(1u, (FloatToIntLinear<1>(0.0f, 4.0f, 10.0f)));
306
307 EXPECT_EQ(0u, (FloatToIntLinear<3>(0.0f, 4.0f, 0.0f)));
308 EXPECT_EQ(0u, (FloatToIntLinear<3>(0.0f, 4.0f, -100.0f)));
309 EXPECT_EQ(7u, (FloatToIntLinear<3>(0.0f, 4.0f, 4.0f)));
310 EXPECT_EQ(7u, (FloatToIntLinear<3>(0.0f, 4.0f, 4.01f)));
311
312 EXPECT_EQ(0u, (FloatToIntLinear<3>(-3.0f, 5.0f, -3.0f)));
313 EXPECT_EQ(0u, (FloatToIntLinear<3>(-3.0f, 5.0f, -3.1f)));
314 EXPECT_EQ(7u, (FloatToIntLinear<3>(-3.0f, 5.0f, 5.0f)));
315 EXPECT_EQ(7u, (FloatToIntLinear<3>(-3.0f, 5.0f, 5.1f)));
316}
317
318// Tests that FloatToIntLinear rounds correctly at the boundaries between output
319// values.
320TEST(FloatToIntLinearTest, Rounding) {
321 EXPECT_EQ(0u, (FloatToIntLinear<1>(0.0f, 1.0f, 0.49f)));
322 EXPECT_EQ(1u, (FloatToIntLinear<1>(0.0f, 1.0f, 0.51f)));
323 EXPECT_EQ(1u, (FloatToIntLinear<1>(-1.0f, 0.0f, -0.49f)));
324 EXPECT_EQ(0u, (FloatToIntLinear<1>(-1.0f, 0.0f, -0.51f)));
325 EXPECT_EQ(1u, (FloatToIntLinear<1>(-1.0f, 1.0f, 0.01f)));
326 EXPECT_EQ(0u, (FloatToIntLinear<1>(-1.0f, 1.0f, -0.01f)));
327
328 EXPECT_EQ(0u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.124f)));
329 EXPECT_EQ(1u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.126f)));
330 EXPECT_EQ(1u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.249f)));
331 EXPECT_EQ(2u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.251f)));
332 EXPECT_EQ(2u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.374f)));
333 EXPECT_EQ(3u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.376f)));
334 EXPECT_EQ(3u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.499f)));
335 EXPECT_EQ(4u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.501f)));
336 EXPECT_EQ(4u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.624f)));
337 EXPECT_EQ(5u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.626f)));
338 EXPECT_EQ(5u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.749f)));
339 EXPECT_EQ(6u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.751f)));
340 EXPECT_EQ(6u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.874f)));
341 EXPECT_EQ(7u, (FloatToIntLinear<3>(0.0f, 1.0f, 0.876f)));
342}
343
344// Tests IntToFloatLinear with values near or outside of its boundaries.
345TEST(IntToFloatLinearTest, OutOfBounds) {
346 EXPECT_EQ(0.25f, (IntToFloatLinear<1>(0.0f, 1.0f, 0)));
347 EXPECT_EQ(0.75f, (IntToFloatLinear<1>(0.0f, 1.0f, 1)));
348 EXPECT_EQ(0.75f, (IntToFloatLinear<1>(0.0f, 1.0f, 2)));
349 EXPECT_EQ(0.75f, (IntToFloatLinear<1>(0.0f, 1.0f, 3)));
350
351 EXPECT_EQ(1.0f, (IntToFloatLinear<1>(0.0f, 4.0f, 0)));
352 EXPECT_EQ(3.0f, (IntToFloatLinear<1>(0.0f, 4.0f, 1)));
353
354 EXPECT_EQ(0.0625f, (IntToFloatLinear<3>(0.0f, 1.0f, 0)));
355 EXPECT_EQ(0.9375f, (IntToFloatLinear<3>(0.0f, 1.0f, 7)));
356 EXPECT_EQ(0.9375f, (IntToFloatLinear<3>(0.0f, 1.0f, 8)));
357}
358
359// Tests IntToFloatLinear with some specific values which are easy to calculate
360// by hand.
361TEST(IntToFloatLinearTest, Values) {
362 EXPECT_EQ(0.125f, (IntToFloatLinear<2>(0.0f, 1.0f, 0)));
363 EXPECT_EQ(0.375f, (IntToFloatLinear<2>(0.0f, 1.0f, 1)));
364 EXPECT_EQ(0.625f, (IntToFloatLinear<2>(0.0f, 1.0f, 2)));
365 EXPECT_EQ(0.875f, (IntToFloatLinear<2>(0.0f, 1.0f, 3)));
366
367 EXPECT_EQ(0.0625f, (IntToFloatLinear<3>(0.0f, 1.0f, 0)));
368 EXPECT_EQ(0.1875f, (IntToFloatLinear<3>(0.0f, 1.0f, 1)));
369 EXPECT_EQ(0.3125f, (IntToFloatLinear<3>(0.0f, 1.0f, 2)));
370 EXPECT_EQ(0.4375f, (IntToFloatLinear<3>(0.0f, 1.0f, 3)));
371 EXPECT_EQ(0.5625f, (IntToFloatLinear<3>(0.0f, 1.0f, 4)));
372 EXPECT_EQ(0.6875f, (IntToFloatLinear<3>(0.0f, 1.0f, 5)));
373 EXPECT_EQ(0.8125f, (IntToFloatLinear<3>(0.0f, 1.0f, 6)));
374 EXPECT_EQ(0.9375f, (IntToFloatLinear<3>(0.0f, 1.0f, 7)));
375
376 EXPECT_EQ(-0.875f, (IntToFloatLinear<2>(-1.0f, 0.0f, 0)));
377 EXPECT_EQ(-0.625f, (IntToFloatLinear<2>(-1.0f, 0.0f, 1)));
378 EXPECT_EQ(-0.375f, (IntToFloatLinear<2>(-1.0f, 0.0f, 2)));
379 EXPECT_EQ(-0.125f, (IntToFloatLinear<2>(-1.0f, 0.0f, 3)));
380
381 EXPECT_EQ(-0.75f, (IntToFloatLinear<2>(-1.0f, 1.0f, 0)));
382 EXPECT_EQ(-0.25f, (IntToFloatLinear<2>(-1.0f, 1.0f, 1)));
383 EXPECT_EQ(0.25f, (IntToFloatLinear<2>(-1.0f, 1.0f, 2)));
384 EXPECT_EQ(0.75f, (IntToFloatLinear<2>(-1.0f, 1.0f, 3)));
385}
386
Stephan Pleinesf63bde82024-01-13 15:59:33 -0800387} // namespace aos::testing