From 34372619173100a7e384313e974d5d9158d62a6e Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Thu, 31 Oct 2024 19:01:48 +0200 Subject: [PATCH] RymlConverters update + tests --- openVulkanoCpp/Extensions/RymlConverters.hpp | 16 +- tests/Extensions/RymlConverters.cpp | 174 +++++++++++++++++++ 2 files changed, 188 insertions(+), 2 deletions(-) create mode 100644 tests/Extensions/RymlConverters.cpp diff --git a/openVulkanoCpp/Extensions/RymlConverters.hpp b/openVulkanoCpp/Extensions/RymlConverters.hpp index a22848e..268d9cc 100644 --- a/openVulkanoCpp/Extensions/RymlConverters.hpp +++ b/openVulkanoCpp/Extensions/RymlConverters.hpp @@ -6,6 +6,7 @@ #pragma once +#include "Base/UUID.hpp" #include "Math/Math.hpp" #include "Math/AABB.hpp" #include "Math/Pose.hpp" @@ -56,7 +57,7 @@ namespace c4 template size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Pose& pose) - { return ryml::format(buf, "({},{},{}),({},{},{},{})", pose.m_position.x, pose.m_position.y, pose.m_position.z, pose.m_orientation.x, pose.m_orientation.y, pose.m_orientation.z, pose.m_orientation.w); } + { return ryml::format(buf, "({},{},{}),({},{},{},{})", pose.GetPosition().x, pose.GetPosition().y, pose.GetPosition().z, pose.GetOrientation().x, pose.GetOrientation().y, pose.GetOrientation().z, pose.GetOrientation().w); } template bool from_chars(ryml::csubstr buf, OpenVulkano::Math::Vector2* v) @@ -127,7 +128,18 @@ namespace c4 template bool from_chars(ryml::csubstr buf, OpenVulkano::Math::Pose* pose) { - size_t ret = ryml::unformat(buf, "({},{},{}),({},{},{},{})", pose->m_position.x, pose->m_position.y, pose->m_position.z, pose->m_orientation.x, pose->m_orientation.y, pose->m_orientation.z, pose->m_orientation.w); + size_t ret = ryml::unformat(buf, "({},{},{}),({},{},{},{})", pose->GetPosition().x, pose->GetPosition().y, pose->GetPosition().z, pose->GetOrientation().x, pose->GetOrientation().y, pose->GetOrientation().z, pose->GetOrientation().w); return ret != ryml::yml::npos; } + + inline size_t to_chars(ryml::substr buf, const OpenVulkano::UUID& uuid) + { + return ryml::format(buf, "{}", uuid.string()); + } + + inline bool from_chars(ryml::csubstr buf, OpenVulkano::UUID* uuid) + { + uuid->assign(buf.str); + return true; + } } \ No newline at end of file diff --git a/tests/Extensions/RymlConverters.cpp b/tests/Extensions/RymlConverters.cpp new file mode 100644 index 0000000..7d8ae03 --- /dev/null +++ b/tests/Extensions/RymlConverters.cpp @@ -0,0 +1,174 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +#include + +#include "Extensions/RymlConverters.hpp" + +using namespace OpenVulkano; +using namespace OpenVulkano::Math; +using namespace c4; + +TEST_CASE("Vector2 to_chars and from_chars", "[RymlConverters]") +{ + Vector2 vec2 { 1.1f, 2.2f }; + char buffer[20] = {}; + + size_t written = to_chars(ryml::substr(buffer), vec2); + REQUIRE(written != ryml::yml::npos); + REQUIRE(std::string(buffer) == "(1.1,2.2)"); + + Vector2 parsed_vec2; + REQUIRE(from_chars("(1.1,2.2)", &parsed_vec2)); + REQUIRE(parsed_vec2.x == 1.1f); + REQUIRE(parsed_vec2.y == 2.2f); +} + +TEST_CASE("Vector3 to_chars and from_chars", "[RymlConverters]") +{ + Vector3 vec3 { 1.1f, 2.2f, 3.3f }; + char buffer[30] = {}; + + size_t written = to_chars(ryml::substr(buffer), vec3); + REQUIRE(written != ryml::yml::npos); + REQUIRE(std::string(buffer) == "(1.1,2.2,3.3)"); + + Vector3 parsed_vec3; + REQUIRE(from_chars("(1.1,2.2,3.3)", &parsed_vec3)); + REQUIRE(parsed_vec3.x == 1.1f); + REQUIRE(parsed_vec3.y == 2.2f); + REQUIRE(parsed_vec3.z == 3.3f); +} + +TEST_CASE("Vector4 to_chars and from_chars", "[RymlConverters]") +{ + Vector4 vec4 { 1.1f, 2.2f, 3.3f, 4.4f }; + char buffer[30] = {}; + + size_t written = to_chars(ryml::substr(buffer), vec4); + REQUIRE(written != ryml::yml::npos); + REQUIRE(std::string(buffer) == "(1.1,2.2,3.3,4.4)"); + + Vector4 parsed_vec4; + REQUIRE(from_chars("(1.1,2.2,3.3,4.4)", &parsed_vec4)); + REQUIRE(parsed_vec4.x == 1.1f); + REQUIRE(parsed_vec4.y == 2.2f); + REQUIRE(parsed_vec4.z == 3.3f); + REQUIRE(parsed_vec4.w == 4.4f); +} + +TEST_CASE("Matrix3 to_chars and from_chars", "[RymlConverters]") +{ + Matrix3 mat3 { { 1.1f, 2.2f, 3.3f }, { 4.4f, 5.5f, 6.6f }, { 7.7f, 8.8f, 9.9f } }; + char buffer[100] = {}; + + size_t written = to_chars(ryml::substr(buffer), mat3); + REQUIRE(written != ryml::yml::npos); + REQUIRE(std::string(buffer) == "(1.1,4.4,7.7),(2.2,5.5,8.8),(3.3,6.6,9.9)"); + + Matrix3 parsed_mat3; + REQUIRE(from_chars("(1.1,4.4,7.7),(2.2,5.5,8.8),(3.3,6.6,9.9)", &parsed_mat3)); + REQUIRE(parsed_mat3[0][0] == 1.1f); + REQUIRE(parsed_mat3[0][1] == 2.2f); + REQUIRE(parsed_mat3[0][2] == 3.3f); + REQUIRE(parsed_mat3[1][0] == 4.4f); + REQUIRE(parsed_mat3[1][1] == 5.5f); + REQUIRE(parsed_mat3[1][2] == 6.6f); + REQUIRE(parsed_mat3[2][0] == 7.7f); + REQUIRE(parsed_mat3[2][1] == 8.8f); + REQUIRE(parsed_mat3[2][2] == 9.9f); +} + +TEST_CASE("Matrix4 to_chars and from_chars", "[RymlConverters]") +{ + Matrix4 mat4 { { 1.1f, 2.2f, 3.3f, 4.4f }, + { 5.5f, 6.6f, 7.7f, 8.8f }, + { 9.9f, 10.10f, 11.11f, 12.12f }, + { 13.13f, 14.14f, 15.15f, 16.16f } }; + char buffer[200] = {}; + + size_t written = to_chars(ryml::substr(buffer), mat4); + REQUIRE(written != ryml::yml::npos); + REQUIRE(std::string(buffer) == "(1.1,5.5,9.9,13.13),(2.2,6.6,10.1,14.14),(3.3,7.7,11.11,15.15),(4.4,8.8,12.12,16.16)"); + + Matrix4 parsed_mat4; + REQUIRE(from_chars("(1.1,5.5,9.9,13.13),(2.2,6.6,10.1,14.14),(3.3,7.7,11.11,15.15),(4.4,8.8,12.12,16.16)", &parsed_mat4)); + + REQUIRE(parsed_mat4[0][0] == 1.1f); + REQUIRE(parsed_mat4[0][1] == 2.2f); + REQUIRE(parsed_mat4[0][2] == 3.3f); + REQUIRE(parsed_mat4[0][3] == 4.4f); + + REQUIRE(parsed_mat4[1][0] == 5.5f); + REQUIRE(parsed_mat4[1][1] == 6.6f); + REQUIRE(parsed_mat4[1][2] == 7.7f); + REQUIRE(parsed_mat4[1][3] == 8.8f); + + REQUIRE(parsed_mat4[2][0] == 9.9f); + REQUIRE(parsed_mat4[2][1] == 10.10f); + REQUIRE(parsed_mat4[2][2] == 11.11f); + REQUIRE(parsed_mat4[2][3] == 12.12f); + + REQUIRE(parsed_mat4[3][0] == 13.13f); + REQUIRE(parsed_mat4[3][1] == 14.14f); + REQUIRE(parsed_mat4[3][2] == 15.15f); + REQUIRE(parsed_mat4[3][3] == 16.16f); +} + +TEST_CASE("AABB to_chars and from_chars", "[RymlConverters]") +{ + AABB bbox { Vector3 { 1.0f, 2.0f, 3.0f }, Vector3 { 4.0f, 5.0f, 6.0f } }; + char buffer[50] = {}; + + size_t written = to_chars(ryml::substr(buffer), bbox); + REQUIRE(written != ryml::yml::npos); + REQUIRE(std::string(buffer) == "(1,2,3),(4,5,6)"); + + AABB parsed_bbox; + REQUIRE(from_chars("(1,2,3),(4,5,6)", &parsed_bbox)); + REQUIRE(parsed_bbox.min.x == 1.0f); + REQUIRE(parsed_bbox.min.y == 2.0f); + REQUIRE(parsed_bbox.min.z == 3.0f); + REQUIRE(parsed_bbox.max.x == 4.0f); + REQUIRE(parsed_bbox.max.y == 5.0f); + REQUIRE(parsed_bbox.max.z == 6.0f); +} + +TEST_CASE("Pose to_chars and from_chars", "[RymlConverters]") +{ + Pose pose; + pose.SetPosition(Vector3 { 1.1f, 2.2f, 3.3f }); + pose.SetOrientation(QuaternionF(7.7f, 4.4f, 5.5f, 6.6f)); + char buffer[70] = {}; + + size_t written = to_chars(ryml::substr(buffer), pose); + REQUIRE(written != ryml::yml::npos); + REQUIRE(std::string(buffer) == "(1.1,2.2,3.3),(4.4,5.5,6.6,7.7)"); + + Pose parsed_pose; + REQUIRE(from_chars("(1.1,2.2,3.3),(4.4,5.5,6.6,7.7)", &parsed_pose)); + REQUIRE(parsed_pose.GetPosition().x == 1.1f); + REQUIRE(parsed_pose.GetPosition().y == 2.2f); + REQUIRE(parsed_pose.GetPosition().z == 3.3f); + REQUIRE(parsed_pose.GetOrientation().x == 4.4f); + REQUIRE(parsed_pose.GetOrientation().y == 5.5f); + REQUIRE(parsed_pose.GetOrientation().z == 6.6f); + REQUIRE(parsed_pose.GetOrientation().w == 7.7f); +} + +TEST_CASE("UUID to_chars and from_chars", "[RymlConverters]") +{ + UUID uuid("123e4567-e89b-12d3-a456-426655440000"); + char buffer[40] = {}; + + size_t written = to_chars(ryml::substr(buffer), uuid); + REQUIRE(written != ryml::yml::npos); + REQUIRE(std::string(buffer) == "123e4567-e89b-12d3-a456-426655440000"); + + UUID parsed_uuid; + REQUIRE(from_chars("123e4567-e89b-12d3-a456-426655440000", &parsed_uuid)); + REQUIRE(parsed_uuid.string() == uuid.string()); +}