45TEST(RoomObjectEncodingTest, Type1EncodeDecodeBasic) {
58 EXPECT_EQ(decoded.id_, obj.
id_);
59 EXPECT_EQ(decoded.x(), obj.
x());
60 EXPECT_EQ(decoded.y(), obj.
y());
61 EXPECT_EQ(decoded.size(), obj.
size());
65TEST(RoomObjectEncodingTest, Type1MaxValues) {
76 EXPECT_EQ(decoded.id_, obj.
id_);
77 EXPECT_EQ(decoded.x(), obj.
x());
78 EXPECT_EQ(decoded.y(), obj.
y());
79 EXPECT_EQ(decoded.size(), obj.
size());
82TEST(RoomObjectEncodingTest, Type1MinValues) {
89 EXPECT_EQ(decoded.id_, obj.
id_);
90 EXPECT_EQ(decoded.x(), obj.
x());
91 EXPECT_EQ(decoded.y(), obj.
y());
92 EXPECT_EQ(decoded.size(), obj.
size());
95TEST(RoomObjectEncodingTest, Type1DifferentSizes) {
97 for (
int size = 0; size <= 15; size++) {
103 EXPECT_EQ(decoded.size(), size) <<
"Failed for size " << size;
107TEST(RoomObjectEncodingTest, Type1RealWorldExample1) {
114 EXPECT_EQ(decoded.x(), 10);
115 EXPECT_EQ(decoded.y(), 20);
116 EXPECT_EQ(decoded.size(), 0);
117 EXPECT_EQ(decoded.id_, 0x10);
120TEST(RoomObjectEncodingTest, Type1RealWorldExample2) {
126 EXPECT_EQ(decoded.x(), 10);
127 EXPECT_EQ(decoded.y(), 20);
128 EXPECT_EQ(decoded.size(), 3);
129 EXPECT_EQ(decoded.id_, 0x00);
136TEST(RoomObjectEncodingTest, Type2EncodeDecodeBasic) {
146 EXPECT_GE(bytes.b1, 0xFC);
152 EXPECT_EQ(decoded.id_, obj.
id_);
153 EXPECT_EQ(decoded.x(), obj.
x());
154 EXPECT_EQ(decoded.y(), obj.
y());
158TEST(RoomObjectEncodingTest, Type2MaxValues) {
168 EXPECT_EQ(decoded.id_, obj.
id_);
169 EXPECT_EQ(decoded.x(), obj.
x());
170 EXPECT_EQ(decoded.y(), obj.
y());
173TEST(RoomObjectEncodingTest, Type2RealWorldExample) {
182 EXPECT_EQ(decoded.id_, 0x11C);
183 EXPECT_EQ(decoded.x(), 8);
184 EXPECT_EQ(decoded.y(), 12);
191TEST(RoomObjectEncodingTest, Type3EncodeDecodeChest) {
201 EXPECT_GE(bytes.b3, 0xF8);
207 EXPECT_EQ(decoded.id_, obj.
id_);
208 EXPECT_EQ(decoded.x(), obj.
x());
209 EXPECT_EQ(decoded.y(), obj.
y());
212TEST(RoomObjectEncodingTest, Type3EncodeDcodeBigChest) {
220 EXPECT_EQ(decoded.id_, 0xFB1);
221 EXPECT_EQ(decoded.x(), 15);
222 EXPECT_EQ(decoded.y(), 20);
225TEST(RoomObjectEncodingTest, Type3RealWorldExample) {
232 EXPECT_EQ(decoded.x(), 10);
233 EXPECT_EQ(decoded.y(), 15);
234 EXPECT_EQ(decoded.id_, 0xF99);
241TEST(RoomObjectEncodingTest, LayerPreservation) {
243 for (uint8_t layer = 0; layer <= 2; layer++) {
249 EXPECT_EQ(decoded.GetLayerValue(), layer) <<
"Failed for layer " << (int)layer;
253TEST(RoomObjectEncodingTest, BoundaryBetweenTypes) {
261 EXPECT_EQ(decoded1.id_, 0xF7);
267 EXPECT_EQ(decoded2.id_, 0x100);
273 EXPECT_EQ(decoded2_last.id_, 0x13F);
279 EXPECT_EQ(decoded3.id_, 0xF99);
282TEST(RoomObjectEncodingTest, ZeroPosition) {
287 EXPECT_EQ(decoded1.x(), 0);
288 EXPECT_EQ(decoded1.y(), 0);
293 EXPECT_EQ(decoded2.x(), 0);
294 EXPECT_EQ(decoded2.y(), 0);
301TEST(RoomObjectEncodingTest, MultipleObjectsRoundTrip) {
303 std::vector<RoomObject> objects;
306 objects.emplace_back(0x10, 5, 10, 2, 0);
307 objects.emplace_back(0x42, 15, 20, 5, 1);
308 objects.emplace_back(0x110, 8, 12, 0, 0);
309 objects.emplace_back(0x125, 25, 30, 0, 1);
310 objects.emplace_back(0xF99, 10, 15, 0, 0);
311 objects.emplace_back(0xFB1, 20, 25, 0, 2);
313 for (
size_t i = 0; i < objects.size(); i++) {
314 auto& obj = objects[i];
315 auto bytes = obj.EncodeObjectToBytes();
317 bytes.b1, bytes.b2, bytes.b3, obj.GetLayerValue());
319 EXPECT_EQ(decoded.id_, obj.id_) <<
"Failed at index " << i;
320 EXPECT_EQ(decoded.x(), obj.x()) <<
"Failed at index " << i;
321 EXPECT_EQ(decoded.y(), obj.y()) <<
"Failed at index " << i;
322 if (obj.id_ < 0x100) {
323 EXPECT_EQ(decoded.size(), obj.size()) <<
"Failed at index " << i;