mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-15 04:35:25 +07:00
vector and matrix predef units
This commit is contained in:
@@ -18,6 +18,21 @@
|
||||
#include "vmath_mat.hpp"
|
||||
#include "vmath_mat_fun.hpp"
|
||||
|
||||
namespace vmath_hpp
|
||||
{
|
||||
template < typename T > constexpr mat<T, 2> zero2x2() { return {0, 0, 0, 0}; }
|
||||
template < typename T > constexpr mat<T, 3> zero3x3() { return {0, 0, 0, 0, 0, 0, 0, 0, 0}; }
|
||||
template < typename T > constexpr mat<T, 4> zero4x4() { return {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; }
|
||||
|
||||
template < typename T > constexpr mat<T, 2> unit2x2() { return {1, 1, 1, 1}; }
|
||||
template < typename T > constexpr mat<T, 3> unit3x3() { return {1, 1, 1, 1, 1, 1, 1, 1, 1}; }
|
||||
template < typename T > constexpr mat<T, 4> unit4x4() { return {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; }
|
||||
|
||||
template < typename T > constexpr mat<T, 2> identity2x2() { return {1, 0, 0, 1}; }
|
||||
template < typename T > constexpr mat<T, 3> identity3x3() { return {1, 0, 0, 0, 1, 0, 0, 0, 1}; }
|
||||
template < typename T > constexpr mat<T, 4> identity4x4() { return {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; }
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template < typename T, size_t Size >
|
||||
|
||||
@@ -14,6 +14,29 @@
|
||||
#include "vmath_vec.hpp"
|
||||
#include "vmath_vec_fun.hpp"
|
||||
|
||||
namespace vmath_hpp
|
||||
{
|
||||
template < typename T > constexpr vec<T, 2> zero2() { return {0, 0}; }
|
||||
template < typename T > constexpr vec<T, 3> zero3() { return {0, 0, 0}; }
|
||||
template < typename T > constexpr vec<T, 4> zero4() { return {0, 0, 0, 0}; }
|
||||
|
||||
template < typename T > constexpr vec<T, 2> unit2() { return {1, 1}; }
|
||||
template < typename T > constexpr vec<T, 3> unit3() { return {1, 1, 1}; }
|
||||
template < typename T > constexpr vec<T, 4> unit4() { return {1, 1, 1, 1}; }
|
||||
|
||||
template < typename T > constexpr vec<T, 2> unit2_x() { return {1, 0}; }
|
||||
template < typename T > constexpr vec<T, 2> unit2_y() { return {0, 1}; }
|
||||
|
||||
template < typename T > constexpr vec<T, 3> unit3_x() { return {1, 0, 0}; }
|
||||
template < typename T > constexpr vec<T, 3> unit3_y() { return {0, 1, 0}; }
|
||||
template < typename T > constexpr vec<T, 3> unit3_z() { return {0, 0, 1}; }
|
||||
|
||||
template < typename T > constexpr vec<T, 4> unit4_x() { return {1, 0, 0, 0}; }
|
||||
template < typename T > constexpr vec<T, 4> unit4_y() { return {0, 1, 0, 0}; }
|
||||
template < typename T > constexpr vec<T, 4> unit4_z() { return {0, 0, 1, 0}; }
|
||||
template < typename T > constexpr vec<T, 4> unit4_w() { return {0, 0, 0, 1}; }
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template < typename T, size_t Size >
|
||||
|
||||
@@ -18,6 +18,20 @@ namespace
|
||||
}
|
||||
|
||||
TEST_CASE("vmath/mat_ext") {
|
||||
SECTION("units") {
|
||||
STATIC_REQUIRE(zero2x2<int>() == mat2i(0,0,0,0));
|
||||
STATIC_REQUIRE(zero3x3<int>() == mat3i(0,0,0,0,0,0,0,0,0));
|
||||
STATIC_REQUIRE(zero4x4<int>() == mat4i(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));
|
||||
|
||||
STATIC_REQUIRE(unit2x2<int>() == mat2i(1,1,1,1));
|
||||
STATIC_REQUIRE(unit3x3<int>() == mat3i(1,1,1,1,1,1,1,1,1));
|
||||
STATIC_REQUIRE(unit4x4<int>() == mat4i(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1));
|
||||
|
||||
STATIC_REQUIRE(identity2x2<int>() == mat2i());
|
||||
STATIC_REQUIRE(identity3x3<int>() == mat3i());
|
||||
STATIC_REQUIRE(identity4x4<int>() == mat4i());
|
||||
}
|
||||
|
||||
SECTION("hash") {
|
||||
REQUIRE(std::hash<mat2i>{}({1,2,3,4}) == std::hash<mat2i>{}({1,2,3,4}));
|
||||
REQUIRE_FALSE(std::hash<mat2i>{}({1,2,3,4}) == std::hash<mat2i>{}({1,2,4,3}));
|
||||
|
||||
@@ -18,6 +18,27 @@ namespace
|
||||
}
|
||||
|
||||
TEST_CASE("vmath/vec_ext") {
|
||||
SECTION("units") {
|
||||
STATIC_REQUIRE(zero2<int>() == vec2i(0,0));
|
||||
STATIC_REQUIRE(zero3<int>() == vec3i(0,0,0));
|
||||
STATIC_REQUIRE(zero4<int>() == vec4i(0,0,0,0));
|
||||
|
||||
STATIC_REQUIRE(unit2<int>() == vec2i(1,1));
|
||||
STATIC_REQUIRE(unit2_x<int>() == vec2i(1,0));
|
||||
STATIC_REQUIRE(unit2_y<int>() == vec2i(0,1));
|
||||
|
||||
STATIC_REQUIRE(unit3<int>() == vec3i(1,1,1));
|
||||
STATIC_REQUIRE(unit3_x<int>() == vec3i(1,0,0));
|
||||
STATIC_REQUIRE(unit3_y<int>() == vec3i(0,1,0));
|
||||
STATIC_REQUIRE(unit3_z<int>() == vec3i(0,0,1));
|
||||
|
||||
STATIC_REQUIRE(unit4<int>() == vec4i(1,1,1,1));
|
||||
STATIC_REQUIRE(unit4_x<int>() == vec4i(1,0,0,0));
|
||||
STATIC_REQUIRE(unit4_y<int>() == vec4i(0,1,0,0));
|
||||
STATIC_REQUIRE(unit4_z<int>() == vec4i(0,0,1,0));
|
||||
STATIC_REQUIRE(unit4_w<int>() == vec4i(0,0,0,1));
|
||||
}
|
||||
|
||||
SECTION("hash") {
|
||||
REQUIRE(std::hash<vec2i>{}({1,2}) == std::hash<vec2i>{}({1,2}));
|
||||
REQUIRE_FALSE(std::hash<vec2i>{}({1,2}) == std::hash<vec2i>{}({2,1}));
|
||||
|
||||
Reference in New Issue
Block a user