diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-06 13:12:24 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-06 13:12:24 -0400 |
| commit | 32968050f0b34fdabfcc2a4fb5601d4be361bbd2 (patch) | |
| tree | acef384a2156a16d4d506c37f13f79d454a4a6e9 /tests/pke-test-serialization.cpp | |
| parent | ef37d054dfe5812efa9eefb4b9b18621fdabac25 (diff) | |
pke: major serialization refactor, first-pass
Diffstat (limited to 'tests/pke-test-serialization.cpp')
| -rw-r--r-- | tests/pke-test-serialization.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/tests/pke-test-serialization.cpp b/tests/pke-test-serialization.cpp new file mode 100644 index 0000000..64523d8 --- /dev/null +++ b/tests/pke-test-serialization.cpp @@ -0,0 +1,126 @@ + +#include "./pke-test-serialization.h" + +#include "pk.h" +#include "serialization-component.hpp" +#include "serialization.hpp" + +#include <cstring> +#include <sstream> + +pk_membucket *bkt; + +const char *const test_001_str = R"VOGON(:PKFB: +:0: + +InstPos:00000000!00000000 +Position:0.000000;1.000000;2.000000 +Rotation:7.000000;8.000000;9.000000;6.000000 +Scale:5.000000;4.000000;3.000000 + +:PKFE: +)VOGON"; +int pke_test_serialization_001() { + int64_t err_index = 0, i; + srlztn_serialize_helper *h; + std::stringstream ss; + try { + bkt = pk_bucket_create("pke_test_serialization", PK_DEFAULT_BUCKET_SIZE, false); + h = pke_serialize_init(bkt); + + glm::vec3 pos = glm::vec3(0,1,2); + glm::quat rot = glm::quat(6,7,8,9); + glm::vec3 scale = glm::vec3(5,4,3); + pke_serialize_inst_pos(h, pos, rot, scale); + + pke_serialize_scene_to_stream(ss, h); + + PKE_TEST_ASSERT(h->bkt == bkt, err_index); + PKE_TEST_ASSERT(h->kvp_containers.bkt == bkt, err_index); + PKE_TEST_ASSERT(h->kvp_containers.next == 1, err_index); + PKE_TEST_ASSERT(h->kvp_containers[0].child_handles.next == 0, err_index); + PKE_TEST_ASSERT(h->kvp_containers[0].arr.next == 3, err_index); + for (i = 0; i < 3; ++i) { + // 6,9,12 + PKE_TEST_ASSERT(h->kvp_containers[0].arr[i].key != nullptr, err_index); + PKE_TEST_ASSERT(h->kvp_containers[0].arr[i].val != nullptr, err_index); + PKE_TEST_ASSERT(h->kvp_containers[0].arr[i].end != nullptr, err_index); + } + + std::string s = ss.str(); + // 15 + PKE_TEST_ASSERT(strstr(test_001_str, s.c_str()) != nullptr, err_index); + + pke_serialize_teardown(h); + + } catch (const std::exception &ex) { + pk_bucket_destroy(bkt); + throw; + } + pk_bucket_destroy(bkt); + return 0; +} + +int pke_test_deserialization_101() { + int64_t err_index = 0, i; + srlztn_deserialize_helper *h; + std::stringstream ss(test_001_str); + try { + bkt = pk_bucket_create("pke_test_serialization", PK_DEFAULT_BUCKET_SIZE, false); + h = pke_deserialize_init(bkt); + + pke_deserialize_scene_from_stream(ss, h); + + PKE_TEST_ASSERT(h->bkt == bkt, err_index); + PKE_TEST_ASSERT(h->kvp_containers.bkt == bkt, err_index); + PKE_TEST_ASSERT(h->kvp_containers.next == 1, err_index); + PKE_TEST_ASSERT(h->kvp_containers[0].child_handles.next == 0, err_index); + PKE_TEST_ASSERT(h->kvp_containers[0].arr.next == 3, err_index); + for (i = 0; i < 3; ++i) { + // 6,9,12 + PKE_TEST_ASSERT(h->kvp_containers[0].arr[i].key != nullptr, err_index); + PKE_TEST_ASSERT(h->kvp_containers[0].arr[i].val != nullptr, err_index); + PKE_TEST_ASSERT(h->kvp_containers[0].arr[i].end != nullptr, err_index); + } + + glm::vec3 pos; + glm::quat rot; + glm::vec3 scale; + pke_deserialize_inst_pos(h, &h->kvp_containers[0], pos, rot, scale); + + // 15 + PKE_TEST_ASSERT(pos == glm::vec3(0,1,2), err_index); + PKE_TEST_ASSERT(rot == glm::quat(6,7,8,9), err_index); + PKE_TEST_ASSERT(scale == glm::vec3(5,4,3), err_index); + + pke_deserialize_teardown(h); + + } catch (const std::exception &ex) { + pk_bucket_destroy(bkt); + throw; + } + pk_bucket_destroy(bkt); + return 0; +} + +struct pke_test_group *pke_test_serialization_get_group() { + static const uint64_t test_count = 2; + static struct pke_test tests[test_count] = { + { + .title = "test 001", + .func = pke_test_serialization_001, + .expected_result = 0, + }, + { + .title = "test 101", + .func = pke_test_deserialization_101, + .expected_result = 0, + }, + }; + static struct pke_test_group group = {}; + group.title = "de/serialization"; + group.n_tests = test_count; + group.tests = &tests[0]; + + return &group; +} |
