/* * 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()); }