blob: 621412dae22b9204723ea104443a2f41bfcaf473 [file] [log] [blame]
Brian Silverman2eb89762019-02-17 15:16:37 -08001#include "y2019/jevois/uart.h"
2
Tyler Chatowbf0609c2021-07-31 16:13:27 -07003#include <cstdint>
Brian Silverman2eb89762019-02-17 15:16:37 -08004
5#include "gtest/gtest.h"
6
Stephan Pleinesf63bde82024-01-13 15:59:33 -08007namespace frc971::jevois::testing {
Brian Silverman2eb89762019-02-17 15:16:37 -08008
9// Tests packing and then unpacking a message with arbitrary values.
10TEST(UartToTeensyTest, Basic) {
Brian Silvermanc41fb862019-03-02 21:14:46 -080011 CameraFrame input_message;
Brian Silverman2eb89762019-02-17 15:16:37 -080012 for (int i = 0; i < 3; ++i) {
Brian Silvermana1e4d332019-02-17 22:53:13 -080013 input_message.targets.push_back({});
14 Target *const target = &input_message.targets.back();
15 target->distance = i * 7 + 1;
16 target->height = i * 7 + 2;
17 target->heading = i * 7 + 3;
18 target->skew = i * 7 + 5;
19 }
20 input_message.age = camera_duration(123);
21 const UartToTeensyBuffer buffer = UartPackToTeensy(input_message);
22 const auto output_message = UartUnpackToTeensy(buffer);
23 ASSERT_TRUE(output_message);
24 EXPECT_EQ(input_message, output_message.value());
25}
26
27// Tests packing and then unpacking a message with arbitrary values and no
28// frames.
29TEST(UartToTeensyTest, NoFrames) {
Brian Silvermanc41fb862019-03-02 21:14:46 -080030 CameraFrame input_message;
Brian Silvermana1e4d332019-02-17 22:53:13 -080031 input_message.age = camera_duration(123);
32 const UartToTeensyBuffer buffer = UartPackToTeensy(input_message);
33 const auto output_message = UartUnpackToTeensy(buffer);
34 ASSERT_TRUE(output_message);
35 EXPECT_EQ(input_message, output_message.value());
36}
37
38// Tests packing and then unpacking a message with just one frame.
39TEST(UartToTeensyTest, OneFrame) {
Brian Silvermanc41fb862019-03-02 21:14:46 -080040 CameraFrame input_message;
Brian Silvermana1e4d332019-02-17 22:53:13 -080041 {
42 input_message.targets.push_back({});
43 Target *const target = &input_message.targets.back();
44 target->distance = 1;
45 target->height = 2;
46 target->heading = 3;
47 target->skew = 5;
Brian Silverman2eb89762019-02-17 15:16:37 -080048 }
49 input_message.age = camera_duration(123);
50 const UartToTeensyBuffer buffer = UartPackToTeensy(input_message);
51 const auto output_message = UartUnpackToTeensy(buffer);
52 ASSERT_TRUE(output_message);
53 EXPECT_EQ(input_message, output_message.value());
54}
55
56// Tests packing and then unpacking a message with arbitrary values.
57TEST(UartToCameraTest, Basic) {
58 CameraCalibration input_message;
59 for (int i = 0; i < 3; ++i) {
60 for (int j = 0; j < 3; ++j) {
61 input_message.calibration(i, j) = i * 5 + j * 971;
62 }
63 }
64 input_message.teensy_now =
65 aos::monotonic_clock::time_point(std::chrono::seconds(1678));
66 input_message.realtime_now = aos::realtime_clock::min_time;
Brian Silvermane9924fd2019-03-02 15:20:42 -080067 input_message.camera_command = CameraCommand::kCameraPassthrough;
Brian Silverman2eb89762019-02-17 15:16:37 -080068 const UartToCameraBuffer buffer = UartPackToCamera(input_message);
69 const auto output_message = UartUnpackToCamera(buffer);
70 ASSERT_TRUE(output_message);
71 EXPECT_EQ(input_message, output_message.value());
72}
73
74// Tests that corrupting the data in various ways is handled properly.
75TEST(UartToTeensyTest, CorruptData) {
Brian Silvermanc41fb862019-03-02 21:14:46 -080076 CameraFrame input_message{};
Brian Silverman2eb89762019-02-17 15:16:37 -080077 {
78 UartToTeensyBuffer buffer = UartPackToTeensy(input_message);
79 buffer[0]++;
80 EXPECT_FALSE(UartUnpackToTeensy(buffer));
81 }
82 {
83 UartToTeensyBuffer buffer = UartPackToTeensy(input_message);
84 buffer[buffer.size() - 1]++;
85 EXPECT_FALSE(UartUnpackToTeensy(buffer));
86 }
87 {
88 UartToTeensyBuffer buffer = UartPackToTeensy(input_message);
Tyler Chatowd0a49742022-02-25 22:06:19 -080089 buffer.resize(buffer.size() - 1);
Brian Silverman2eb89762019-02-17 15:16:37 -080090 EXPECT_FALSE(UartUnpackToTeensy(buffer));
91 }
92 {
93 UartToTeensyBuffer buffer = UartPackToTeensy(input_message);
James Kuszmaul3ae42262019-11-08 12:33:41 -080094 buffer[0] = -1;
Brian Silverman2eb89762019-02-17 15:16:37 -080095 EXPECT_FALSE(UartUnpackToTeensy(buffer));
96 }
97}
98
99// Tests that corrupting the data in various ways is handled properly.
100TEST(UartToCameraTest, CorruptData) {
101 CameraCalibration input_message{};
102 {
103 UartToCameraBuffer buffer = UartPackToCamera(input_message);
104 buffer[0]++;
105 EXPECT_FALSE(UartUnpackToCamera(buffer));
106 }
107 {
108 UartToCameraBuffer buffer = UartPackToCamera(input_message);
109 buffer[buffer.size() - 1]++;
110 EXPECT_FALSE(UartUnpackToCamera(buffer));
111 }
112 {
113 UartToCameraBuffer buffer = UartPackToCamera(input_message);
Tyler Chatowd0a49742022-02-25 22:06:19 -0800114 buffer.resize(buffer.size() - 1);
Brian Silverman2eb89762019-02-17 15:16:37 -0800115 EXPECT_FALSE(UartUnpackToCamera(buffer));
116 }
117 {
118 UartToCameraBuffer buffer = UartPackToCamera(input_message);
James Kuszmaul3ae42262019-11-08 12:33:41 -0800119 buffer[0] = -1;
Brian Silverman2eb89762019-02-17 15:16:37 -0800120 EXPECT_FALSE(UartUnpackToCamera(buffer));
121 }
122}
123
Stephan Pleinesf63bde82024-01-13 15:59:33 -0800124} // namespace frc971::jevois::testing