mirror of
https://github.com/godotengine/godot.git
synced 2024-11-10 22:23:07 +00:00
Unit tests for encoding/decoding Variant
This commit is contained in:
parent
8aed1ee8f7
commit
69b554e92d
@ -153,6 +153,177 @@ TEST_CASE("[Marshalls] C string encoding") {
|
||||
CHECK(data[4] == 't');
|
||||
CHECK(data[5] == '\0');
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] NIL Variant encoding") {
|
||||
int r_len;
|
||||
Variant variant;
|
||||
uint8_t buffer[4];
|
||||
|
||||
CHECK(encode_variant(variant, buffer, r_len) == OK);
|
||||
CHECK_MESSAGE(r_len == 4, "Length == 4 bytes for Variant::Type");
|
||||
CHECK_MESSAGE(buffer[0] == 0x00, "Variant::NIL");
|
||||
CHECK(buffer[1] == 0x00);
|
||||
CHECK(buffer[2] == 0x00);
|
||||
CHECK(buffer[3] == 0x00);
|
||||
// No value
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] INT 32 bit Variant encoding") {
|
||||
int r_len;
|
||||
Variant variant(0x12345678);
|
||||
uint8_t buffer[8];
|
||||
|
||||
CHECK(encode_variant(variant, buffer, r_len) == OK);
|
||||
CHECK_MESSAGE(r_len == 8, "Length == 4 bytes for Variant::Type + 4 bytes for int32_t");
|
||||
CHECK_MESSAGE(buffer[0] == 0x02, "Variant::INT");
|
||||
CHECK(buffer[1] == 0x00);
|
||||
CHECK(buffer[2] == 0x00);
|
||||
CHECK(buffer[3] == 0x00);
|
||||
// Check value
|
||||
CHECK(buffer[4] == 0x78);
|
||||
CHECK(buffer[5] == 0x56);
|
||||
CHECK(buffer[6] == 0x34);
|
||||
CHECK(buffer[7] == 0x12);
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] INT 64 bit Variant encoding") {
|
||||
int r_len;
|
||||
Variant variant(uint64_t(0x0f123456789abcdef));
|
||||
uint8_t buffer[12];
|
||||
|
||||
CHECK(encode_variant(variant, buffer, r_len) == OK);
|
||||
CHECK_MESSAGE(r_len == 12, "Length == 4 bytes for Variant::Type + 8 bytes for int64_t");
|
||||
CHECK_MESSAGE(buffer[0] == 0x02, "Variant::INT");
|
||||
CHECK(buffer[1] == 0x00);
|
||||
CHECK_MESSAGE(buffer[2] == 0x01, "ENCODE_FLAG_64");
|
||||
CHECK(buffer[3] == 0x00);
|
||||
// Check value
|
||||
CHECK(buffer[4] == 0xef);
|
||||
CHECK(buffer[5] == 0xcd);
|
||||
CHECK(buffer[6] == 0xab);
|
||||
CHECK(buffer[7] == 0x89);
|
||||
CHECK(buffer[8] == 0x67);
|
||||
CHECK(buffer[9] == 0x45);
|
||||
CHECK(buffer[10] == 0x23);
|
||||
CHECK(buffer[11] == 0xf1);
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] FLOAT single precision Variant encoding") {
|
||||
int r_len;
|
||||
Variant variant(0.15625f);
|
||||
uint8_t buffer[8];
|
||||
|
||||
CHECK(encode_variant(variant, buffer, r_len) == OK);
|
||||
CHECK_MESSAGE(r_len == 8, "Length == 4 bytes for Variant::Type + 4 bytes for float");
|
||||
CHECK_MESSAGE(buffer[0] == 0x03, "Variant::FLOAT");
|
||||
CHECK(buffer[1] == 0x00);
|
||||
CHECK(buffer[2] == 0x00);
|
||||
CHECK(buffer[3] == 0x00);
|
||||
// Check value
|
||||
CHECK(buffer[4] == 0x00);
|
||||
CHECK(buffer[5] == 0x00);
|
||||
CHECK(buffer[6] == 0x20);
|
||||
CHECK(buffer[7] == 0x3e);
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] FLOAT double precision Variant encoding") {
|
||||
int r_len;
|
||||
Variant variant(0.33333333333333333);
|
||||
uint8_t buffer[12];
|
||||
|
||||
CHECK(encode_variant(variant, buffer, r_len) == OK);
|
||||
CHECK_MESSAGE(r_len == 12, "Length == 4 bytes for Variant::Type + 8 bytes for double");
|
||||
CHECK_MESSAGE(buffer[0] == 0x03, "Variant::FLOAT");
|
||||
CHECK(buffer[1] == 0x00);
|
||||
CHECK_MESSAGE(buffer[2] == 0x01, "ENCODE_FLAG_64");
|
||||
CHECK(buffer[3] == 0x00);
|
||||
// Check value
|
||||
CHECK(buffer[4] == 0x55);
|
||||
CHECK(buffer[5] == 0x55);
|
||||
CHECK(buffer[6] == 0x55);
|
||||
CHECK(buffer[7] == 0x55);
|
||||
CHECK(buffer[8] == 0x55);
|
||||
CHECK(buffer[9] == 0x55);
|
||||
CHECK(buffer[10] == 0xd5);
|
||||
CHECK(buffer[11] == 0x3f);
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] Invalid data Variant decoding") {
|
||||
Variant variant;
|
||||
int r_len = 0;
|
||||
uint8_t some_buffer[1] = { 0x00 };
|
||||
uint8_t out_of_range_type_buffer[4] = { 0xff }; // Greater than Variant::VARIANT_MAX
|
||||
|
||||
CHECK(decode_variant(variant, some_buffer, /* less than 4 */ 1, &r_len) == ERR_INVALID_DATA);
|
||||
CHECK(r_len == 0);
|
||||
|
||||
CHECK(decode_variant(variant, out_of_range_type_buffer, 4, &r_len) == ERR_INVALID_DATA);
|
||||
CHECK(r_len == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] NIL Variant decoding") {
|
||||
Variant variant;
|
||||
int r_len;
|
||||
uint8_t buffer[] = {
|
||||
0x00, 0x00, 0x00, 0x00 // Variant::NIL
|
||||
};
|
||||
|
||||
CHECK(decode_variant(variant, buffer, 4, &r_len) == OK);
|
||||
CHECK(r_len == 4);
|
||||
CHECK(variant == Variant());
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] INT 32 bit Variant decoding") {
|
||||
Variant variant;
|
||||
int r_len;
|
||||
uint8_t buffer[] = {
|
||||
0x02, 0x00, 0x00, 0x00, // Variant::INT
|
||||
0x78, 0x56, 0x34, 0x12 // value
|
||||
};
|
||||
|
||||
CHECK(decode_variant(variant, buffer, 8, &r_len) == OK);
|
||||
CHECK(r_len == 8);
|
||||
CHECK(variant == Variant(0x12345678));
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] INT 64 bit Variant decoding") {
|
||||
Variant variant;
|
||||
int r_len;
|
||||
uint8_t buffer[] = {
|
||||
0x02, 0x00, 0x01, 0x00, // Variant::INT & ENCODE_FLAG_64
|
||||
0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0xf1 // value
|
||||
};
|
||||
|
||||
CHECK(decode_variant(variant, buffer, 12, &r_len) == OK);
|
||||
CHECK(r_len == 12);
|
||||
CHECK(variant == Variant(uint64_t(0x0f123456789abcdef)));
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] FLOAT single precision Variant decoding") {
|
||||
Variant variant;
|
||||
int r_len;
|
||||
uint8_t buffer[] = {
|
||||
0x03, 0x00, 0x00, 0x00, // Variant::FLOAT
|
||||
0x00, 0x00, 0x20, 0x3e // value
|
||||
};
|
||||
|
||||
CHECK(decode_variant(variant, buffer, 8, &r_len) == OK);
|
||||
CHECK(r_len == 8);
|
||||
CHECK(variant == Variant(0.15625f));
|
||||
}
|
||||
|
||||
TEST_CASE("[Marshalls] FLOAT double precision Variant decoding") {
|
||||
Variant variant;
|
||||
int r_len;
|
||||
uint8_t buffer[] = {
|
||||
0x03, 0x00, 0x01, 0x00, // Variant::FLOAT & ENCODE_FLAG_64
|
||||
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x3f // value
|
||||
};
|
||||
|
||||
CHECK(decode_variant(variant, buffer, 12, &r_len) == OK);
|
||||
CHECK(r_len == 12);
|
||||
CHECK(variant == Variant(0.33333333333333333));
|
||||
}
|
||||
} // namespace TestMarshalls
|
||||
|
||||
#endif // TEST_MARSHALLS_H
|
||||
|
Loading…
Reference in New Issue
Block a user