mirror of
https://github.com/orange-cpp/omath.git
synced 2026-02-13 07:03:25 +00:00
Compare commits
8 Commits
copilot/up
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fee135d82e | |||
| e8c7abf925 | |||
| 6ae3e37172 | |||
| afc613fcc0 | |||
| d7a721f62e | |||
| 5aae9d6842 | |||
| 3e4598313d | |||
| d231139b83 |
24
.vscode/launch.json
vendored
Normal file
24
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": " Unit Tests (Debug)",
|
||||
"type": "lldb",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/out/Debug/unit_tests",
|
||||
"args": [],
|
||||
"cwd": "${workspaceRoot}"
|
||||
},
|
||||
{
|
||||
"name": " Unit Tests (Release)",
|
||||
"type": "lldb",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/out/Release/unit_tests",
|
||||
"args": [],
|
||||
"cwd": "${workspaceRoot}"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -29,7 +29,7 @@ set_target_properties(
|
||||
find_package(OpenGL)
|
||||
find_package(GLEW REQUIRED)
|
||||
find_package(glfw3 CONFIG REQUIRED)
|
||||
target_link_libraries(example_glfw3 PRIVATE omath::omath GLEW::GLEW glfw OpenGL::OpenGL)
|
||||
target_link_libraries(example_glfw3 PRIVATE omath::omath GLEW::GLEW glfw OpenGL::GL)
|
||||
|
||||
if(OMATH_ENABLE_VALGRIND)
|
||||
omath_setup_valgrind(example_projection_matrix_builder)
|
||||
|
||||
@@ -23,4 +23,52 @@ namespace omath::frostbite_engine
|
||||
|
||||
[[nodiscard]]
|
||||
Mat4X4 calc_perspective_projection_matrix(float field_of_view, float aspect_ratio, float near, float far) noexcept;
|
||||
} // namespace omath::unity_engine
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_centimeters(const FloatingType& units)
|
||||
{
|
||||
return units / static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_meters(const FloatingType& units)
|
||||
{
|
||||
return units;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_kilometers(const FloatingType& units)
|
||||
{
|
||||
return units_to_meters(units) / static_cast<FloatingType>(1000);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType centimeters_to_units(const FloatingType& centimeters)
|
||||
{
|
||||
return centimeters * static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType meters_to_units(const FloatingType& meters)
|
||||
{
|
||||
return meters;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType kilometers_to_units(const FloatingType& kilometers)
|
||||
{
|
||||
return meters_to_units(kilometers * static_cast<FloatingType>(1000));
|
||||
}
|
||||
} // namespace omath::frostbite_engine
|
||||
|
||||
@@ -23,4 +23,54 @@ namespace omath::iw_engine
|
||||
|
||||
[[nodiscard]]
|
||||
Mat4X4 calc_perspective_projection_matrix(float field_of_view, float aspect_ratio, float near, float far) noexcept;
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_centimeters(const FloatingType& units)
|
||||
{
|
||||
constexpr auto centimeter_in_unit = static_cast<FloatingType>(2.54);
|
||||
return units * centimeter_in_unit;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_meters(const FloatingType& units)
|
||||
{
|
||||
return units_to_centimeters(units) / static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_kilometers(const FloatingType& units)
|
||||
{
|
||||
return units_to_meters(units) / static_cast<FloatingType>(1000);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType centimeters_to_units(const FloatingType& centimeters)
|
||||
{
|
||||
constexpr auto centimeter_in_unit = static_cast<FloatingType>(2.54);
|
||||
return centimeters / centimeter_in_unit;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType meters_to_units(const FloatingType& meters)
|
||||
{
|
||||
return centimeters_to_units(meters * static_cast<FloatingType>(100));
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType kilometers_to_units(const FloatingType& kilometers)
|
||||
{
|
||||
return meters_to_units(kilometers * static_cast<FloatingType>(1000));
|
||||
}
|
||||
} // namespace omath::iw_engine
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#pragma once
|
||||
#include "omath/engines/opengl_engine/constants.hpp"
|
||||
|
||||
|
||||
namespace omath::opengl_engine
|
||||
{
|
||||
[[nodiscard]]
|
||||
@@ -23,4 +22,52 @@ namespace omath::opengl_engine
|
||||
|
||||
[[nodiscard]]
|
||||
Mat4X4 calc_perspective_projection_matrix(float field_of_view, float aspect_ratio, float near, float far) noexcept;
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_centimeters(const FloatingType& units)
|
||||
{
|
||||
return units / static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_meters(const FloatingType& units)
|
||||
{
|
||||
return units;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_kilometers(const FloatingType& units)
|
||||
{
|
||||
return units_to_meters(units) / static_cast<FloatingType>(1000);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType centimeters_to_units(const FloatingType& centimeters)
|
||||
{
|
||||
return centimeters * static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType meters_to_units(const FloatingType& meters)
|
||||
{
|
||||
return meters;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType kilometers_to_units(const FloatingType& kilometers)
|
||||
{
|
||||
return meters_to_units(kilometers * static_cast<FloatingType>(1000));
|
||||
}
|
||||
} // namespace omath::opengl_engine
|
||||
|
||||
@@ -22,4 +22,54 @@ namespace omath::source_engine
|
||||
|
||||
[[nodiscard]]
|
||||
Mat4X4 calc_perspective_projection_matrix(float field_of_view, float aspect_ratio, float near, float far) noexcept;
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_centimeters(const FloatingType& units)
|
||||
{
|
||||
constexpr auto centimeter_in_unit = static_cast<FloatingType>(2.54);
|
||||
return units * centimeter_in_unit;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_meters(const FloatingType& units)
|
||||
{
|
||||
return units_to_centimeters(units) / static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_kilometers(const FloatingType& units)
|
||||
{
|
||||
return units_to_meters(units) / static_cast<FloatingType>(1000);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType centimeters_to_units(const FloatingType& centimeters)
|
||||
{
|
||||
constexpr auto centimeter_in_unit = static_cast<FloatingType>(2.54);
|
||||
return centimeters / centimeter_in_unit;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType meters_to_units(const FloatingType& meters)
|
||||
{
|
||||
return centimeters_to_units(meters * static_cast<FloatingType>(100));
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType kilometers_to_units(const FloatingType& kilometers)
|
||||
{
|
||||
return meters_to_units(kilometers * static_cast<FloatingType>(1000));
|
||||
}
|
||||
} // namespace omath::source_engine
|
||||
|
||||
@@ -23,4 +23,52 @@ namespace omath::unity_engine
|
||||
|
||||
[[nodiscard]]
|
||||
Mat4X4 calc_perspective_projection_matrix(float field_of_view, float aspect_ratio, float near, float far) noexcept;
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_centimeters(const FloatingType& units)
|
||||
{
|
||||
return units / static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_meters(const FloatingType& units)
|
||||
{
|
||||
return units;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_kilometers(const FloatingType& units)
|
||||
{
|
||||
return units_to_meters(units) / static_cast<FloatingType>(1000);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType centimeters_to_units(const FloatingType& centimeters)
|
||||
{
|
||||
return centimeters * static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType meters_to_units(const FloatingType& meters)
|
||||
{
|
||||
return meters;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType kilometers_to_units(const FloatingType& kilometers)
|
||||
{
|
||||
return meters_to_units(kilometers * static_cast<FloatingType>(1000));
|
||||
}
|
||||
} // namespace omath::unity_engine
|
||||
|
||||
@@ -23,4 +23,52 @@ namespace omath::unreal_engine
|
||||
|
||||
[[nodiscard]]
|
||||
Mat4X4 calc_perspective_projection_matrix(float field_of_view, float aspect_ratio, float near, float far) noexcept;
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_centimeters(const FloatingType& units)
|
||||
{
|
||||
return units;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_meters(const FloatingType& units)
|
||||
{
|
||||
return units / static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType units_to_kilometers(const FloatingType& units)
|
||||
{
|
||||
return units_to_meters(units) / static_cast<FloatingType>(1000);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType centimeters_to_units(const FloatingType& centimeters)
|
||||
{
|
||||
return centimeters;
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType meters_to_units(const FloatingType& meters)
|
||||
{
|
||||
return meters * static_cast<FloatingType>(100);
|
||||
}
|
||||
|
||||
template<class FloatingType>
|
||||
requires std::is_floating_point_v<FloatingType>
|
||||
[[nodiscard]]
|
||||
constexpr FloatingType kilometers_to_units(const FloatingType& kilometers)
|
||||
{
|
||||
return meters_to_units(kilometers * static_cast<FloatingType>(1000));
|
||||
}
|
||||
} // namespace omath::unreal_engine
|
||||
|
||||
@@ -8,6 +8,125 @@
|
||||
#include <print>
|
||||
#include <random>
|
||||
|
||||
TEST(unit_test_frostbite_engine, UnitsToCentimeters_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::frostbite_engine::units_to_centimeters(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::frostbite_engine::units_to_centimeters(1.0f), 0.01f);
|
||||
EXPECT_FLOAT_EQ(omath::frostbite_engine::units_to_centimeters(100.0f), 1.0f);
|
||||
EXPECT_FLOAT_EQ(omath::frostbite_engine::units_to_centimeters(-250.0f), -2.5f);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, UnitsToMeters_BasicValues)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(omath::frostbite_engine::units_to_meters(0.0), 0.0);
|
||||
EXPECT_DOUBLE_EQ(omath::frostbite_engine::units_to_meters(1.0), 1.0);
|
||||
EXPECT_DOUBLE_EQ(omath::frostbite_engine::units_to_meters(123.456), 123.456);
|
||||
EXPECT_DOUBLE_EQ(omath::frostbite_engine::units_to_meters(-42.0), -42.0);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, UnitsToKilometers_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::frostbite_engine::units_to_kilometers(0.0), 0.0, 1e-15);
|
||||
EXPECT_NEAR(omath::frostbite_engine::units_to_kilometers(1.0), 0.001, 1e-15);
|
||||
EXPECT_NEAR(omath::frostbite_engine::units_to_kilometers(1000.0), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::frostbite_engine::units_to_kilometers(-2500.0), -2.5, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, CentimetersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::frostbite_engine::centimeters_to_units(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::frostbite_engine::centimeters_to_units(0.01f), 1.0f);
|
||||
EXPECT_FLOAT_EQ(omath::frostbite_engine::centimeters_to_units(1.0f), 100.0f);
|
||||
EXPECT_FLOAT_EQ(omath::frostbite_engine::centimeters_to_units(-2.5f), -250.0f);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, MetersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(omath::frostbite_engine::meters_to_units(0.0), 0.0);
|
||||
EXPECT_DOUBLE_EQ(omath::frostbite_engine::meters_to_units(1.0), 1.0);
|
||||
EXPECT_DOUBLE_EQ(omath::frostbite_engine::meters_to_units(123.456), 123.456);
|
||||
EXPECT_DOUBLE_EQ(omath::frostbite_engine::meters_to_units(-42.0), -42.0);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, KilometersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::frostbite_engine::kilometers_to_units(0.0), 0.0, 1e-12);
|
||||
EXPECT_NEAR(omath::frostbite_engine::kilometers_to_units(0.001), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::frostbite_engine::kilometers_to_units(1.0), 1000.0, 1e-9);
|
||||
EXPECT_NEAR(omath::frostbite_engine::kilometers_to_units(-2.5), -2500.0, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, RoundTrip_UnitsCentimeters)
|
||||
{
|
||||
constexpr float units_f = 12345.678f;
|
||||
const auto cm_f = omath::frostbite_engine::units_to_centimeters(units_f);
|
||||
const auto units_f_back = omath::frostbite_engine::centimeters_to_units(cm_f);
|
||||
EXPECT_NEAR(units_f_back, units_f, 1e-3f);
|
||||
|
||||
constexpr double units_d = -987654.321;
|
||||
const auto cm_d = omath::frostbite_engine::units_to_centimeters(units_d);
|
||||
const auto units_d_back = omath::frostbite_engine::centimeters_to_units(cm_d);
|
||||
EXPECT_NEAR(units_d_back, units_d, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, RoundTrip_UnitsMeters)
|
||||
{
|
||||
constexpr float units_f = 5432.125f;
|
||||
constexpr auto m_f = omath::frostbite_engine::units_to_meters(units_f);
|
||||
constexpr auto units_f_back = omath::frostbite_engine::meters_to_units(m_f);
|
||||
EXPECT_FLOAT_EQ(units_f_back, units_f);
|
||||
|
||||
constexpr double units_d = -123456.789;
|
||||
constexpr auto m_d = omath::frostbite_engine::units_to_meters(units_d);
|
||||
constexpr auto units_d_back = omath::frostbite_engine::meters_to_units(m_d);
|
||||
EXPECT_DOUBLE_EQ(units_d_back, units_d);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, RoundTrip_UnitsKilometers)
|
||||
{
|
||||
constexpr float units_f = 100000.0f;
|
||||
constexpr auto km_f = omath::frostbite_engine::units_to_kilometers(units_f);
|
||||
constexpr auto units_f_back = omath::frostbite_engine::kilometers_to_units(km_f);
|
||||
EXPECT_NEAR(units_f_back, units_f, 1e-2f);
|
||||
|
||||
constexpr double units_d = -7654321.123;
|
||||
constexpr auto km_d = omath::frostbite_engine::units_to_kilometers(units_d);
|
||||
constexpr auto units_d_back = omath::frostbite_engine::kilometers_to_units(km_d);
|
||||
EXPECT_NEAR(units_d_back, units_d, 1e-6);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, ConversionChainConsistency)
|
||||
{
|
||||
const double units = 424242.42;
|
||||
|
||||
const auto cm_direct = omath::frostbite_engine::units_to_centimeters(units);
|
||||
const auto cm_via_units = units / 100.0;
|
||||
EXPECT_NEAR(cm_direct, cm_via_units, 1e-12);
|
||||
|
||||
const auto km_direct = omath::frostbite_engine::units_to_kilometers(units);
|
||||
const auto km_via_meters = omath::frostbite_engine::units_to_meters(units) / 1000.0;
|
||||
EXPECT_NEAR(km_direct, km_via_meters, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, SupportsFloatAndDouble)
|
||||
{
|
||||
static_assert(std::is_same_v<decltype(omath::frostbite_engine::units_to_centimeters(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::frostbite_engine::units_to_centimeters(1.0)), double>);
|
||||
static_assert(std::is_same_v<decltype(omath::frostbite_engine::meters_to_units(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::frostbite_engine::kilometers_to_units(1.0)), double>);
|
||||
}
|
||||
|
||||
TEST(unit_test_frostbite_engine, ConstexprConversions)
|
||||
{
|
||||
constexpr double units = 1000.0;
|
||||
constexpr double cm = omath::frostbite_engine::units_to_centimeters(units);
|
||||
constexpr double m = omath::frostbite_engine::units_to_meters(units);
|
||||
constexpr double km = omath::frostbite_engine::units_to_kilometers(units);
|
||||
|
||||
static_assert(cm == 10.0, "units_to_centimeters constexpr failed");
|
||||
static_assert(m == 1000.0, "units_to_meters constexpr failed");
|
||||
static_assert(km == 1.0, "units_to_kilometers constexpr failed");
|
||||
}
|
||||
TEST(unit_test_frostbite_engine, ForwardVector)
|
||||
{
|
||||
const auto forward = omath::frostbite_engine::forward_vector({});
|
||||
|
||||
@@ -7,6 +7,125 @@
|
||||
#include <omath/engines/opengl_engine/formulas.hpp>
|
||||
#include <random>
|
||||
|
||||
TEST(unit_test_opengl, UnitsToCentimeters_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::opengl_engine::units_to_centimeters(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::opengl_engine::units_to_centimeters(1.0f), 0.01f);
|
||||
EXPECT_FLOAT_EQ(omath::opengl_engine::units_to_centimeters(100.0f), 1.0f);
|
||||
EXPECT_FLOAT_EQ(omath::opengl_engine::units_to_centimeters(-250.0f), -2.5f);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, UnitsToMeters_BasicValues)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(omath::opengl_engine::units_to_meters(0.0), 0.0);
|
||||
EXPECT_DOUBLE_EQ(omath::opengl_engine::units_to_meters(1.0), 1.0);
|
||||
EXPECT_DOUBLE_EQ(omath::opengl_engine::units_to_meters(123.456), 123.456);
|
||||
EXPECT_DOUBLE_EQ(omath::opengl_engine::units_to_meters(-42.0), -42.0);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, UnitsToKilometers_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::opengl_engine::units_to_kilometers(0.0), 0.0, 1e-15);
|
||||
EXPECT_NEAR(omath::opengl_engine::units_to_kilometers(1.0), 0.001, 1e-15);
|
||||
EXPECT_NEAR(omath::opengl_engine::units_to_kilometers(1000.0), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::opengl_engine::units_to_kilometers(-2500.0), -2.5, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, CentimetersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::opengl_engine::centimeters_to_units(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::opengl_engine::centimeters_to_units(0.01f), 1.0f);
|
||||
EXPECT_FLOAT_EQ(omath::opengl_engine::centimeters_to_units(1.0f), 100.0f);
|
||||
EXPECT_FLOAT_EQ(omath::opengl_engine::centimeters_to_units(-2.5f), -250.0f);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, MetersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(omath::opengl_engine::meters_to_units(0.0), 0.0);
|
||||
EXPECT_DOUBLE_EQ(omath::opengl_engine::meters_to_units(1.0), 1.0);
|
||||
EXPECT_DOUBLE_EQ(omath::opengl_engine::meters_to_units(123.456), 123.456);
|
||||
EXPECT_DOUBLE_EQ(omath::opengl_engine::meters_to_units(-42.0), -42.0);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, KilometersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::opengl_engine::kilometers_to_units(0.0), 0.0, 1e-12);
|
||||
EXPECT_NEAR(omath::opengl_engine::kilometers_to_units(0.001), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::opengl_engine::kilometers_to_units(1.0), 1000.0, 1e-9);
|
||||
EXPECT_NEAR(omath::opengl_engine::kilometers_to_units(-2.5), -2500.0, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, RoundTrip_UnitsCentimeters)
|
||||
{
|
||||
constexpr float units_f = 12345.678f;
|
||||
const auto cm_f = omath::opengl_engine::units_to_centimeters(units_f);
|
||||
const auto units_f_back = omath::opengl_engine::centimeters_to_units(cm_f);
|
||||
EXPECT_NEAR(units_f_back, units_f, 1e-3f);
|
||||
|
||||
constexpr double units_d = -987654.321;
|
||||
const auto cm_d = omath::opengl_engine::units_to_centimeters(units_d);
|
||||
const auto units_d_back = omath::opengl_engine::centimeters_to_units(cm_d);
|
||||
EXPECT_NEAR(units_d_back, units_d, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, RoundTrip_UnitsMeters)
|
||||
{
|
||||
constexpr float units_f = 5432.125f;
|
||||
const auto m_f = omath::opengl_engine::units_to_meters(units_f);
|
||||
const auto units_f_back = omath::opengl_engine::meters_to_units(m_f);
|
||||
EXPECT_FLOAT_EQ(units_f_back, units_f);
|
||||
|
||||
constexpr double units_d = -123456.789;
|
||||
const auto m_d = omath::opengl_engine::units_to_meters(units_d);
|
||||
const auto units_d_back = omath::opengl_engine::meters_to_units(m_d);
|
||||
EXPECT_DOUBLE_EQ(units_d_back, units_d);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, RoundTrip_UnitsKilometers)
|
||||
{
|
||||
constexpr float units_f = 100000.0f;
|
||||
const auto km_f = omath::opengl_engine::units_to_kilometers(units_f);
|
||||
const auto units_f_back = omath::opengl_engine::kilometers_to_units(km_f);
|
||||
EXPECT_NEAR(units_f_back, units_f, 1e-2f);
|
||||
|
||||
constexpr double units_d = -7654321.123;
|
||||
const auto km_d = omath::opengl_engine::units_to_kilometers(units_d);
|
||||
const auto units_d_back = omath::opengl_engine::kilometers_to_units(km_d);
|
||||
EXPECT_NEAR(units_d_back, units_d, 1e-6);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, ConversionChainConsistency)
|
||||
{
|
||||
const double units = 424242.42;
|
||||
|
||||
const auto cm_direct = omath::opengl_engine::units_to_centimeters(units);
|
||||
const auto cm_via_units = units / 100.0;
|
||||
EXPECT_NEAR(cm_direct, cm_via_units, 1e-12);
|
||||
|
||||
const auto km_direct = omath::opengl_engine::units_to_kilometers(units);
|
||||
const auto km_via_meters = omath::opengl_engine::units_to_meters(units) / 1000.0;
|
||||
EXPECT_NEAR(km_direct, km_via_meters, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, SupportsFloatAndDouble)
|
||||
{
|
||||
static_assert(std::is_same_v<decltype(omath::opengl_engine::units_to_centimeters(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::opengl_engine::units_to_centimeters(1.0)), double>);
|
||||
static_assert(std::is_same_v<decltype(omath::opengl_engine::meters_to_units(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::opengl_engine::kilometers_to_units(1.0)), double>);
|
||||
}
|
||||
|
||||
TEST(unit_test_opengl, ConstexprConversions)
|
||||
{
|
||||
constexpr double units = 1000.0;
|
||||
constexpr double cm = omath::opengl_engine::units_to_centimeters(units);
|
||||
constexpr double m = omath::opengl_engine::units_to_meters(units);
|
||||
constexpr double km = omath::opengl_engine::units_to_kilometers(units);
|
||||
|
||||
static_assert(cm == 10.0, "units_to_centimeters constexpr failed");
|
||||
static_assert(m == 1000.0, "units_to_meters constexpr failed");
|
||||
static_assert(km == 1.0, "units_to_kilometers constexpr failed");
|
||||
}
|
||||
TEST(unit_test_opengl, ForwardVector)
|
||||
{
|
||||
const auto forward = omath::opengl_engine::forward_vector({});
|
||||
|
||||
@@ -7,6 +7,129 @@
|
||||
#include <omath/engines/source_engine/formulas.hpp>
|
||||
#include <random>
|
||||
|
||||
TEST(unit_test_source_engine_units, HammerUnitsToCentimeters_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::source_engine::units_to_centimeters(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::source_engine::units_to_centimeters(1.0f), 2.54f);
|
||||
EXPECT_FLOAT_EQ(omath::source_engine::units_to_centimeters(10.0f), 25.4f);
|
||||
EXPECT_FLOAT_EQ(omath::source_engine::units_to_centimeters(-2.0f), -5.08f);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, HammerUnitsToMeters_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::source_engine::units_to_meters(0.0), 0.0, 1e-12);
|
||||
EXPECT_NEAR(omath::source_engine::units_to_meters(1.0), 0.0254, 1e-12);
|
||||
EXPECT_NEAR(omath::source_engine::units_to_meters(100.0), 2.54, 1e-12);
|
||||
EXPECT_NEAR(omath::source_engine::units_to_meters(-4.0), -0.1016, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, HammerUnitsToKilometers_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::source_engine::units_to_kilometers(0.0), 0.0, 1e-15);
|
||||
EXPECT_NEAR(omath::source_engine::units_to_kilometers(1.0), 0.0000254, 1e-15);
|
||||
EXPECT_NEAR(omath::source_engine::units_to_kilometers(1000.0), 0.0254, 1e-15);
|
||||
EXPECT_NEAR(omath::source_engine::units_to_kilometers(-10.0), -0.000254, 1e-15);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, CentimetersToHammerUnits_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::source_engine::centimeters_to_units(0.0f), 0.0f);
|
||||
EXPECT_NEAR(omath::source_engine::centimeters_to_units(2.54f), 1.0f, 1e-6f);
|
||||
EXPECT_NEAR(omath::source_engine::centimeters_to_units(25.4f), 10.0f, 1e-5f);
|
||||
EXPECT_NEAR(omath::source_engine::centimeters_to_units(-5.08f), -2.0f, 1e-6f);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, MetersToHammerUnits_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::source_engine::meters_to_units(0.0), 0.0, 1e-12);
|
||||
EXPECT_NEAR(omath::source_engine::meters_to_units(0.0254), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::source_engine::meters_to_units(2.54), 100.0, 1e-10);
|
||||
EXPECT_NEAR(omath::source_engine::meters_to_units(-0.0508), -2.0, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, KilometersToHammerUnits_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::source_engine::kilometers_to_units(0.0), 0.0, 1e-9);
|
||||
EXPECT_NEAR(omath::source_engine::kilometers_to_units(0.0000254), 1.0, 1e-9);
|
||||
EXPECT_NEAR(omath::source_engine::kilometers_to_units(0.00254), 100.0, 1e-7);
|
||||
EXPECT_NEAR(omath::source_engine::kilometers_to_units(-0.0000508), -2.0, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, RoundTrip_HammerToCentimetersToHammer)
|
||||
{
|
||||
constexpr float hu_f = 123.456f;
|
||||
constexpr auto cm_f = omath::source_engine::units_to_centimeters(hu_f);
|
||||
constexpr auto hu_f_back = omath::source_engine::centimeters_to_units(cm_f);
|
||||
EXPECT_NEAR(hu_f_back, hu_f, 1e-5f);
|
||||
|
||||
constexpr double hu_d = -98765.4321;
|
||||
constexpr auto cm_d = omath::source_engine::units_to_centimeters(hu_d);
|
||||
constexpr auto hu_d_back = omath::source_engine::centimeters_to_units(cm_d);
|
||||
EXPECT_NEAR(hu_d_back, hu_d, 1e-10);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, RoundTrip_HammerToMetersToHammer)
|
||||
{
|
||||
constexpr float hu_f = 2500.25f;
|
||||
constexpr auto m_f = omath::source_engine::units_to_meters(hu_f);
|
||||
constexpr auto hu_f_back = omath::source_engine::meters_to_units(m_f);
|
||||
EXPECT_NEAR(hu_f_back, hu_f, 1e-4f);
|
||||
|
||||
constexpr double hu_d = -42000.125;
|
||||
constexpr auto m_d = omath::source_engine::units_to_meters(hu_d);
|
||||
constexpr auto hu_d_back = omath::source_engine::meters_to_units(m_d);
|
||||
EXPECT_NEAR(hu_d_back, hu_d, 1e-10);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, RoundTrip_HammerToKilometersToHammer)
|
||||
{
|
||||
constexpr float hu_f = 100000.0f;
|
||||
constexpr auto km_f = omath::source_engine::units_to_kilometers(hu_f);
|
||||
constexpr auto hu_f_back = omath::source_engine::kilometers_to_units(km_f);
|
||||
EXPECT_NEAR(hu_f_back, hu_f, 1e-2f); // looser due to float scaling
|
||||
|
||||
constexpr double hu_d = -1234567.89;
|
||||
constexpr auto km_d = omath::source_engine::units_to_kilometers(hu_d);
|
||||
constexpr auto hu_d_back = omath::source_engine::kilometers_to_units(km_d);
|
||||
EXPECT_NEAR(hu_d_back, hu_d, 1e-7);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, ConversionChainConsistency)
|
||||
{
|
||||
// hu -> cm -> m -> km should match direct helpers
|
||||
constexpr auto hu = 54321.123;
|
||||
|
||||
constexpr auto cm = omath::source_engine::units_to_centimeters(hu);
|
||||
constexpr auto m_via_cm = cm / 100.0;
|
||||
constexpr auto km_via_cm = m_via_cm / 1000.0;
|
||||
|
||||
constexpr auto m_direct = omath::source_engine::units_to_meters(hu);
|
||||
constexpr auto km_direct = omath::source_engine::units_to_kilometers(hu);
|
||||
|
||||
EXPECT_NEAR(m_direct, m_via_cm, 1e-12);
|
||||
EXPECT_NEAR(km_direct, km_via_cm, 1e-15);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, SupportsFloatAndDoubleTypes)
|
||||
{
|
||||
static_assert(std::is_same_v<decltype(omath::source_engine::units_to_centimeters(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::source_engine::units_to_centimeters(1.0)), double>);
|
||||
static_assert(std::is_same_v<decltype(omath::source_engine::meters_to_units(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::source_engine::kilometers_to_units(1.0)), double>);
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine_units, ConstexprEvaluation)
|
||||
{
|
||||
constexpr double hu = 10.0;
|
||||
constexpr double cm = omath::source_engine::units_to_centimeters(hu);
|
||||
constexpr double m = omath::source_engine::units_to_meters(hu);
|
||||
constexpr double km = omath::source_engine::units_to_kilometers(hu);
|
||||
|
||||
static_assert(cm == 25.4, "constexpr hu->cm failed");
|
||||
static_assert(m == 0.254, "constexpr hu->m failed");
|
||||
static_assert(km == 0.000254, "constexpr hu->km failed");
|
||||
}
|
||||
|
||||
TEST(unit_test_source_engine, ForwardVector)
|
||||
{
|
||||
const auto forward = omath::source_engine::forward_vector({});
|
||||
|
||||
@@ -8,6 +8,126 @@
|
||||
#include <print>
|
||||
#include <random>
|
||||
|
||||
TEST(unit_test_unity_engine, UnitsToCentimeters_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::unity_engine::units_to_centimeters(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unity_engine::units_to_centimeters(1.0f), 0.01f);
|
||||
EXPECT_FLOAT_EQ(omath::unity_engine::units_to_centimeters(100.0f), 1.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unity_engine::units_to_centimeters(-250.0f), -2.5f);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, UnitsToMeters_BasicValues)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(omath::unity_engine::units_to_meters(0.0), 0.0);
|
||||
EXPECT_DOUBLE_EQ(omath::unity_engine::units_to_meters(1.0), 1.0);
|
||||
EXPECT_DOUBLE_EQ(omath::unity_engine::units_to_meters(123.456), 123.456);
|
||||
EXPECT_DOUBLE_EQ(omath::unity_engine::units_to_meters(-42.0), -42.0);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, UnitsToKilometers_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::unity_engine::units_to_kilometers(0.0), 0.0, 1e-15);
|
||||
EXPECT_NEAR(omath::unity_engine::units_to_kilometers(1.0), 0.001, 1e-15);
|
||||
EXPECT_NEAR(omath::unity_engine::units_to_kilometers(1000.0), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::unity_engine::units_to_kilometers(-2500.0), -2.5, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, CentimetersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::unity_engine::centimeters_to_units(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unity_engine::centimeters_to_units(0.01f), 1.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unity_engine::centimeters_to_units(1.0f), 100.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unity_engine::centimeters_to_units(-2.5f), -250.0f);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, MetersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(omath::unity_engine::meters_to_units(0.0), 0.0);
|
||||
EXPECT_DOUBLE_EQ(omath::unity_engine::meters_to_units(1.0), 1.0);
|
||||
EXPECT_DOUBLE_EQ(omath::unity_engine::meters_to_units(123.456), 123.456);
|
||||
EXPECT_DOUBLE_EQ(omath::unity_engine::meters_to_units(-42.0), -42.0);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, KilometersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::unity_engine::kilometers_to_units(0.0), 0.0, 1e-12);
|
||||
EXPECT_NEAR(omath::unity_engine::kilometers_to_units(0.001), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::unity_engine::kilometers_to_units(1.0), 1000.0, 1e-9);
|
||||
EXPECT_NEAR(omath::unity_engine::kilometers_to_units(-2.5), -2500.0, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, RoundTrip_UnitsCentimeters)
|
||||
{
|
||||
constexpr float units_f = 12345.678f;
|
||||
constexpr auto cm_f = omath::unity_engine::units_to_centimeters(units_f);
|
||||
constexpr auto units_f_back = omath::unity_engine::centimeters_to_units(cm_f);
|
||||
EXPECT_NEAR(units_f_back, units_f, 1e-3f);
|
||||
|
||||
constexpr double units_d = -987654.321;
|
||||
constexpr auto cm_d = omath::unity_engine::units_to_centimeters(units_d);
|
||||
constexpr auto units_d_back = omath::unity_engine::centimeters_to_units(cm_d);
|
||||
EXPECT_NEAR(units_d_back, units_d, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, RoundTrip_UnitsMeters)
|
||||
{
|
||||
constexpr float units_f = 5432.125f;
|
||||
constexpr auto m_f = omath::unity_engine::units_to_meters(units_f);
|
||||
constexpr auto units_f_back = omath::unity_engine::meters_to_units(m_f);
|
||||
EXPECT_FLOAT_EQ(units_f_back, units_f);
|
||||
|
||||
constexpr double units_d = -123456.789;
|
||||
constexpr auto m_d = omath::unity_engine::units_to_meters(units_d);
|
||||
constexpr auto units_d_back = omath::unity_engine::meters_to_units(m_d);
|
||||
EXPECT_DOUBLE_EQ(units_d_back, units_d);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, RoundTrip_UnitsKilometers)
|
||||
{
|
||||
constexpr float units_f = 100000.0f;
|
||||
constexpr auto km_f = omath::unity_engine::units_to_kilometers(units_f);
|
||||
constexpr auto units_f_back = omath::unity_engine::kilometers_to_units(km_f);
|
||||
EXPECT_NEAR(units_f_back, units_f, 1e-2f);
|
||||
|
||||
constexpr double units_d = -7654321.123;
|
||||
constexpr auto km_d = omath::unity_engine::units_to_kilometers(units_d);
|
||||
constexpr auto units_d_back = omath::unity_engine::kilometers_to_units(km_d);
|
||||
EXPECT_NEAR(units_d_back, units_d, 1e-6);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, ConversionChainConsistency)
|
||||
{
|
||||
constexpr double units = 424242.42;
|
||||
|
||||
constexpr auto cm_direct = omath::unity_engine::units_to_centimeters(units);
|
||||
constexpr auto cm_via_units = units / 100.0;
|
||||
EXPECT_NEAR(cm_direct, cm_via_units, 1e-12);
|
||||
|
||||
constexpr auto km_direct = omath::unity_engine::units_to_kilometers(units);
|
||||
constexpr auto km_via_meters = omath::unity_engine::units_to_meters(units) / 1000.0;
|
||||
EXPECT_NEAR(km_direct, km_via_meters, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, SupportsFloatAndDouble)
|
||||
{
|
||||
static_assert(std::is_same_v<decltype(omath::unity_engine::units_to_centimeters(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::unity_engine::units_to_centimeters(1.0)), double>);
|
||||
static_assert(std::is_same_v<decltype(omath::unity_engine::meters_to_units(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::unity_engine::kilometers_to_units(1.0)), double>);
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, ConstexprConversions)
|
||||
{
|
||||
constexpr double units = 1000.0;
|
||||
constexpr double cm = omath::unity_engine::units_to_centimeters(units);
|
||||
constexpr double m = omath::unity_engine::units_to_meters(units);
|
||||
constexpr double km = omath::unity_engine::units_to_kilometers(units);
|
||||
|
||||
static_assert(cm == 10.0, "units_to_centimeters constexpr failed");
|
||||
static_assert(m == 1000.0, "units_to_meters constexpr failed");
|
||||
static_assert(km == 1.0, "units_to_kilometers constexpr failed");
|
||||
}
|
||||
|
||||
TEST(unit_test_unity_engine, ForwardVector)
|
||||
{
|
||||
const auto forward = omath::unity_engine::forward_vector({});
|
||||
|
||||
@@ -239,3 +239,126 @@ TEST(unit_test_unreal_engine, loook_at_random_z_axis)
|
||||
}
|
||||
EXPECT_LE(failed_points, 100);
|
||||
}
|
||||
TEST(unit_test_unreal_engine, UnitsToCentimeters_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::unreal_engine::units_to_centimeters(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unreal_engine::units_to_centimeters(1.0f), 1.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unreal_engine::units_to_centimeters(250.0f), 250.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unreal_engine::units_to_centimeters(-42.5f), -42.5f);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, UnitsToMeters_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::unreal_engine::units_to_meters(0.0), 0.0, 1e-15);
|
||||
EXPECT_NEAR(omath::unreal_engine::units_to_meters(1.0), 0.01, 1e-15);
|
||||
EXPECT_NEAR(omath::unreal_engine::units_to_meters(100.0), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::unreal_engine::units_to_meters(-250.0), -2.5, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, UnitsToKilometers_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::unreal_engine::units_to_kilometers(0.0), 0.0, 1e-18);
|
||||
EXPECT_NEAR(omath::unreal_engine::units_to_kilometers(1.0), 0.00001, 1e-18);
|
||||
EXPECT_NEAR(omath::unreal_engine::units_to_kilometers(100000.0), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::unreal_engine::units_to_kilometers(-250000.0), -2.5, 1e-12);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, CentimetersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(omath::unreal_engine::centimeters_to_units(0.0f), 0.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unreal_engine::centimeters_to_units(1.0f), 1.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unreal_engine::centimeters_to_units(250.0f), 250.0f);
|
||||
EXPECT_FLOAT_EQ(omath::unreal_engine::centimeters_to_units(-42.5f), -42.5f);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, MetersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::unreal_engine::meters_to_units(0.0), 0.0, 1e-12);
|
||||
EXPECT_NEAR(omath::unreal_engine::meters_to_units(0.01), 1.0, 1e-12);
|
||||
EXPECT_NEAR(omath::unreal_engine::meters_to_units(1.0), 100.0, 1e-9);
|
||||
EXPECT_NEAR(omath::unreal_engine::meters_to_units(-2.5), -250.0, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, KilometersToUnits_BasicValues)
|
||||
{
|
||||
EXPECT_NEAR(omath::unreal_engine::kilometers_to_units(0.0), 0.0, 1e-9);
|
||||
EXPECT_NEAR(omath::unreal_engine::kilometers_to_units(0.00001), 1.0, 1e-9);
|
||||
EXPECT_NEAR(omath::unreal_engine::kilometers_to_units(1.0), 100000.0, 1e-6);
|
||||
EXPECT_NEAR(omath::unreal_engine::kilometers_to_units(-2.5), -250000.0, 1e-3);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, RoundTrip_UnitsCentimeters)
|
||||
{
|
||||
constexpr float units_f = 12345.678f;
|
||||
constexpr auto cm_f = omath::unreal_engine::units_to_centimeters(units_f);
|
||||
constexpr auto units_f_back = omath::unreal_engine::centimeters_to_units(cm_f);
|
||||
EXPECT_FLOAT_EQ(units_f_back, units_f);
|
||||
|
||||
constexpr double units_d = -987654.321;
|
||||
constexpr auto cm_d = omath::unreal_engine::units_to_centimeters(units_d);
|
||||
constexpr auto units_d_back = omath::unreal_engine::centimeters_to_units(cm_d);
|
||||
EXPECT_DOUBLE_EQ(units_d_back, units_d);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, RoundTrip_UnitsMeters)
|
||||
{
|
||||
constexpr float units_f = 5432.125f;
|
||||
constexpr auto m_f = omath::unreal_engine::units_to_meters(units_f);
|
||||
constexpr auto units_f_back = omath::unreal_engine::meters_to_units(m_f);
|
||||
EXPECT_NEAR(units_f_back, units_f, 1e-3f);
|
||||
|
||||
constexpr double units_d = -123456.789;
|
||||
constexpr auto m_d = omath::unreal_engine::units_to_meters(units_d);
|
||||
constexpr auto units_d_back = omath::unreal_engine::meters_to_units(m_d);
|
||||
EXPECT_NEAR(units_d_back, units_d, 1e-9);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, RoundTrip_UnitsKilometers)
|
||||
{
|
||||
constexpr float units_f = 100000.0f;
|
||||
constexpr auto km_f = omath::unreal_engine::units_to_kilometers(units_f);
|
||||
constexpr auto units_f_back = omath::unreal_engine::kilometers_to_units(km_f);
|
||||
EXPECT_NEAR(units_f_back, units_f, 1e-2f);
|
||||
|
||||
constexpr double units_d = -7654321.123;
|
||||
constexpr auto km_d = omath::unreal_engine::units_to_kilometers(units_d);
|
||||
constexpr auto units_d_back = omath::unreal_engine::kilometers_to_units(km_d);
|
||||
EXPECT_NEAR(units_d_back, units_d, 1e-6);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, ConversionChainConsistency)
|
||||
{
|
||||
constexpr double units = 424242.42;
|
||||
|
||||
constexpr auto cm_direct = omath::unreal_engine::units_to_centimeters(units);
|
||||
constexpr auto cm_expected = units; // 1 uu == 1 cm
|
||||
EXPECT_NEAR(cm_direct, cm_expected, 1e-12);
|
||||
|
||||
constexpr auto m_direct = omath::unreal_engine::units_to_meters(units);
|
||||
constexpr auto m_via_cm = cm_direct / 100.0;
|
||||
EXPECT_NEAR(m_direct, m_via_cm, 1e-12);
|
||||
|
||||
constexpr auto km_direct = omath::unreal_engine::units_to_kilometers(units);
|
||||
constexpr auto km_via_m = m_direct / 1000.0;
|
||||
EXPECT_NEAR(km_direct, km_via_m, 1e-15);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, SupportsFloatAndDouble)
|
||||
{
|
||||
static_assert(std::is_same_v<decltype(omath::unreal_engine::units_to_centimeters(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::unreal_engine::units_to_centimeters(1.0)), double>);
|
||||
static_assert(std::is_same_v<decltype(omath::unreal_engine::meters_to_units(1.0f)), float>);
|
||||
static_assert(std::is_same_v<decltype(omath::unreal_engine::kilometers_to_units(1.0)), double>);
|
||||
}
|
||||
|
||||
TEST(unit_test_unreal_engine, ConstexprConversions)
|
||||
{
|
||||
constexpr double units = 100000.0;
|
||||
constexpr double cm = omath::unreal_engine::units_to_centimeters(units);
|
||||
constexpr double m = omath::unreal_engine::units_to_meters(units);
|
||||
constexpr double km = omath::unreal_engine::units_to_kilometers(units);
|
||||
|
||||
static_assert(cm == 100000.0, "units_to_centimeters constexpr failed");
|
||||
static_assert(m == 1000.0, "units_to_meters constexpr failed");
|
||||
static_assert(km == 1.0, "units_to_kilometers constexpr failed");
|
||||
}
|
||||
@@ -27,10 +27,11 @@
|
||||
]
|
||||
},
|
||||
"examples": {
|
||||
"description": "Build benchmarks",
|
||||
"description": "Build examples",
|
||||
"dependencies": [
|
||||
"glfw3",
|
||||
"glew"
|
||||
"glew",
|
||||
"opengl"
|
||||
]
|
||||
},
|
||||
"imgui": {
|
||||
|
||||
Reference in New Issue
Block a user