5 #include "sw/device/lib/ujson/example.h"
8 #include <gtest/gtest.h>
11 #include "sw/device/lib/base/status.h"
12 #include "sw/device/lib/ujson/test_helpers.h"
13 #include "sw/device/lib/ujson/ujson.h"
17 TEST(Derive, FooSerialize) {
18 foo foo = {-5, 150000,
"Kilroy was here"};
21 EXPECT_TRUE(status_ok(ujson_serialize_foo(&uj, &foo)));
23 R
"json({"foo":-5,"bar":150000,"message":"Kilroy was here"})json");
24 EXPECT_EQ(ujson_crc32_finish(&uj), 0x1e31c20e);
27 TEST(Derive, FooDeserialize) {
28 foo expected = {-5, 150000, "Kilroy was here"};
31 R
"json({"foo":-5,"bar":150000,"message":"Kilroy was here"})json");
33 EXPECT_TRUE(status_ok(ujson_deserialize_foo(&uj, &foo)));
34 EXPECT_EQ(memcmp(&foo, &expected, sizeof(foo)), 0);
35 EXPECT_EQ(ujson_crc32_finish(&uj), 0x1e31c20e);
38 TEST(Derive, FooDeserializeNoFoo) {
39 foo expected = {0, 150000,
"Kilroy was here"};
41 SourceSink ss(R
"json({"bar":150000,"message":"Kilroy was here"})json");
43 EXPECT_TRUE(status_ok(ujson_deserialize_foo(&uj, &foo)));
44 EXPECT_EQ(memcmp(&foo, &expected, sizeof(foo)), 0);
45 EXPECT_EQ(ujson_crc32_finish(&uj), 0x431acc08);
48 TEST(Derive, FooDeserializeNoMessage) {
54 SourceSink ss(R
"json({"foo":-5,"bar":150000})json");
56 EXPECT_TRUE(status_ok(ujson_deserialize_foo(&uj, &foo)));
57 EXPECT_EQ(memcmp(&foo, &expected, sizeof(foo)), 0);
58 EXPECT_EQ(ujson_crc32_finish(&uj), 0xded4ce6);
61 TEST(Derive, FooDeserializeMessageToLong) {
62 foo expected = {-5, 150000,
"abcdefghijklmnopqrs"};
65 R
"json({"foo":-5,"bar":150000,"message":"abcdefghijklmnopqrstuvwxyz"})json");
67 EXPECT_TRUE(status_ok(ujson_deserialize_foo(&uj, &foo)));
68 EXPECT_EQ(memcmp(&foo, &expected, sizeof(foo)), 0);
69 EXPECT_EQ(ujson_crc32_finish(&uj), 0xfaebc314);
72 TEST(Derive, FooDeserializeBogusKey) {
75 R
"json({"bar":150000,"message":"Kilroy was here","bogus":99})json");
77 EXPECT_EQ(status_err(ujson_deserialize_foo(&uj, &foo)), kInvalidArgument);
80 TEST(Derive, RectSerialize) {
81 rect r = {{10, 10}, {60, 40}};
84 EXPECT_TRUE(status_ok(ujson_serialize_rect(&uj, &r)));
87 R"json({"top_left":{"x":10,"y":10},"bottom_right":{"x":60,"y":40}})json");
88 EXPECT_EQ(ujson_crc32_finish(&uj), 0x4b9a0fb1);
91 TEST(Derive, RectDeserialize) {
92 rect expected = {{10, 20}, {30, 40}};
95 R"json({"top_left":{"x":10,"y":20},"bottom_right":{"x":30,"y":40}})json");
97 EXPECT_TRUE(status_ok(ujson_deserialize_rect(&uj, &r)));
98 EXPECT_EQ(memcmp(&r, &expected, sizeof(r)), 0);
99 EXPECT_EQ(ujson_crc32_finish(&uj), 0xb11e9dea);
102 TEST(Derive, MatrixSerialize) {
104 {{0, 1, 2, 3, 4}, {5, 6, 7, 8, 9}, {-1, -2, -3, -4, -5}},
108 EXPECT_TRUE(status_ok(ujson_serialize_matrix(&uj, &m)));
110 R
"json({"k":[[0,1,2,3,4],[5,6,7,8,9],[-1,-2,-3,-4,-5]]})json");
111 EXPECT_EQ(ujson_crc32_finish(&uj), 0x927a936);
114 TEST(Derive, MatrixDeserialize) {
116 {{0, 1, 0, 0, 0}, {2, 3, 4, 5, 0}, {-1, 0, 0, 0, 0}},
119 SourceSink ss(R"json({"k":[[0,1],[2, 3, 4, 5],[-1]]})json");
121 EXPECT_TRUE(status_ok(ujson_deserialize_matrix(&uj, &m)));
122 EXPECT_EQ(ujson_crc32_finish(&uj), 0xca69b105);
123 ujson_serialize_matrix(&uj, &m);
124 std::cout << ss.Sink() << "\n\n";
125 EXPECT_EQ(
memcmp(&m, &expected,
sizeof(m)), 0);
128 TEST(Derive, DirectionSerialize) {
129 direction d = kDirectionEast;
132 EXPECT_TRUE(status_ok(ujson_serialize_direction(&uj, &d)));
133 EXPECT_EQ(ss.Sink(), R
"json("East")json");
134 EXPECT_EQ(ujson_crc32_finish(&uj), 0x20ab69de);
137 ujson_crc32_reset(&uj);
139 EXPECT_TRUE(status_ok(ujson_serialize_direction(&uj, &d)));
140 EXPECT_EQ(ss.Sink(), R"json("South")json");
141 EXPECT_EQ(ujson_crc32_finish(&uj), 0x236b5d67);
144 ujson_crc32_reset(&uj);
145 d = static_cast<direction
>(120);
146 EXPECT_TRUE(status_ok(ujson_serialize_direction(&uj, &d)));
147 EXPECT_EQ(ss.Sink(), R
"json({"IntValue":120})json");
148 EXPECT_EQ(ujson_crc32_finish(&uj), 0x63cb5f57);
151 TEST(Derive, DirectionDeserialize) {
155 EXPECT_TRUE(status_ok(ujson_deserialize_direction(&uj, &d)));
156 EXPECT_EQ(d, kDirectionWest);
157 EXPECT_EQ(ujson_crc32_finish(&uj), 0xb5e93a6b);
159 ss.Reset(R"json("North")json");
160 ujson_crc32_reset(&uj);
161 EXPECT_TRUE(status_ok(ujson_deserialize_direction(&uj, &d)));
162 EXPECT_EQ(d, kDirectionNorth);
163 EXPECT_EQ(ujson_crc32_finish(&uj), 0x1f4749b);
165 ss.Reset(R"json({"IntValue":35})json");
166 ujson_crc32_reset(&uj);
167 EXPECT_TRUE(status_ok(ujson_deserialize_direction(&uj, &d)));
168 EXPECT_EQ(d, static_cast<direction
>(35));
169 EXPECT_EQ(ujson_crc32_finish(&uj), 0x86f181c2);
172 TEST(Derive, FuzzyBoolSerialize) {
173 fuzzy_bool d = kFuzzyBoolTrue;
176 EXPECT_TRUE(status_ok(ujson_serialize_fuzzy_bool(&uj, &d)));
177 EXPECT_EQ(ss.Sink(), R
"json("True")json");
178 EXPECT_EQ(ujson_crc32_finish(&uj), 0x68d3703f);
181 ujson_crc32_reset(&uj);
183 EXPECT_TRUE(status_ok(ujson_serialize_fuzzy_bool(&uj, &d)));
184 EXPECT_EQ(ss.Sink(), R"json("False")json");
185 EXPECT_EQ(ujson_crc32_finish(&uj), 0x52b000f3);
188 ujson_crc32_reset(&uj);
189 d = static_cast<fuzzy_bool
>(75);
190 EXPECT_TRUE(status_ok(ujson_serialize_fuzzy_bool(&uj, &d)));
191 EXPECT_EQ(ss.Sink(), R
"json(75)json");
192 EXPECT_EQ(ujson_crc32_finish(&uj), 0x876d76e8);
195 TEST(Derive, FuzzyBoolDeserialize) {
199 EXPECT_TRUE(status_ok(ujson_deserialize_fuzzy_bool(&uj, &d)));
200 EXPECT_EQ(d, kFuzzyBoolFalse);
201 EXPECT_EQ(ujson_crc32_finish(&uj), 0x52b000f3);
203 ujson_crc32_reset(&uj);
204 ss.Reset(R"json("True")json");
205 EXPECT_TRUE(status_ok(ujson_deserialize_fuzzy_bool(&uj, &d)));
206 EXPECT_EQ(d, kFuzzyBoolTrue);
207 EXPECT_EQ(ujson_crc32_finish(&uj), 0x68d3703f);
209 ujson_crc32_reset(&uj);
210 ss.Reset(R"json(35)json");
211 EXPECT_TRUE(status_ok(ujson_deserialize_fuzzy_bool(&uj, &d)));
212 EXPECT_EQ(d, static_cast<fuzzy_bool
>(35));
213 EXPECT_EQ(ujson_crc32_finish(&uj), 0xe301b3ec);