mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-16 14:11:28 +07:00
more constexpr
This commit is contained in:
@@ -17,7 +17,7 @@ namespace vmath_hpp
|
|||||||
// identity
|
// identity
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> identity() {
|
constexpr mat<T, 4> identity() {
|
||||||
return {
|
return {
|
||||||
{1, 0, 0, 0},
|
{1, 0, 0, 0},
|
||||||
{0, 1, 0, 0},
|
{0, 1, 0, 0},
|
||||||
@@ -28,7 +28,7 @@ namespace vmath_hpp
|
|||||||
// translate
|
// translate
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> translate(T x, T y, T z) {
|
constexpr mat<T, 4> translate(T x, T y, T z) {
|
||||||
return {
|
return {
|
||||||
{1, 0, 0, 0},
|
{1, 0, 0, 0},
|
||||||
{0, 1, 0, 0},
|
{0, 1, 0, 0},
|
||||||
@@ -37,17 +37,17 @@ namespace vmath_hpp
|
|||||||
}
|
}
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> translate(const vec<T, 3>& xyz) {
|
constexpr mat<T, 4> translate(const vec<T, 3>& xyz) {
|
||||||
return translate(xyz.x, xyz.y, xyz.z);
|
return translate(xyz.x, xyz.y, xyz.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> translate(const mat<T, 4>& m, T x, T y, T z) {
|
constexpr mat<T, 4> translate(const mat<T, 4>& m, T x, T y, T z) {
|
||||||
return m * translate(x, y, z);
|
return m * translate(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> translate(const mat<T, 4>& m, const vec<T, 3>& xyz) {
|
constexpr mat<T, 4> translate(const mat<T, 4>& m, const vec<T, 3>& xyz) {
|
||||||
return m * translate(xyz);
|
return m * translate(xyz);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ namespace vmath_hpp
|
|||||||
// scale
|
// scale
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> scale(T x, T y, T z) {
|
constexpr mat<T, 4> scale(T x, T y, T z) {
|
||||||
return {
|
return {
|
||||||
{x, 0, 0, 0},
|
{x, 0, 0, 0},
|
||||||
{0, y, 0, 0},
|
{0, y, 0, 0},
|
||||||
@@ -104,17 +104,17 @@ namespace vmath_hpp
|
|||||||
}
|
}
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> scale(const vec<T, 3>& xyz) {
|
constexpr mat<T, 4> scale(const vec<T, 3>& xyz) {
|
||||||
return scale(xyz.x, xyz.y, xyz.z);
|
return scale(xyz.x, xyz.y, xyz.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> scale(const mat<T, 4>& m, T x, T y, T z) {
|
constexpr mat<T, 4> scale(const mat<T, 4>& m, T x, T y, T z) {
|
||||||
return m * scale(x, y, z);
|
return m * scale(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
mat<T, 4> scale(const mat<T, 4>& m, const vec<T, 3>& xyz) {
|
constexpr mat<T, 4> scale(const mat<T, 4>& m, const vec<T, 3>& xyz) {
|
||||||
return m * scale(xyz);
|
return m * scale(xyz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,16 +73,16 @@ namespace
|
|||||||
|
|
||||||
TEST_CASE("vmath/mat_ext") {
|
TEST_CASE("vmath/mat_ext") {
|
||||||
SECTION("identity") {
|
SECTION("identity") {
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * identity<float>() == approx4(2.f,3.f,4.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * identity<float>() == approx4(2.f,3.f,4.f,1.f));
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * identity<float>() == approx4(2.f,3.f,4.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * identity<float>() == approx4(2.f,3.f,4.f,1.f));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("translate") {
|
SECTION("translate") {
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * translate(1.f,2.f,3.f) == approx4(3.f,5.f,7.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * translate(1.f,2.f,3.f) == approx4(3.f,5.f,7.f,1.f));
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * translate(vec3f{1.f,2.f,3.f}) == approx4(3.f,5.f,7.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * translate(vec3f{1.f,2.f,3.f}) == approx4(3.f,5.f,7.f,1.f));
|
||||||
|
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * translate(translate(1.f,2.f,3.f), 1.f,2.f,3.f) == approx4(4.f,7.f,10.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * translate(translate(1.f,2.f,3.f), 1.f,2.f,3.f) == approx4(4.f,7.f,10.f,1.f));
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * translate(translate(1.f,2.f,3.f), vec3f{1.f,2.f,3.f}) == approx4(4.f,7.f,10.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * translate(translate(1.f,2.f,3.f), vec3f{1.f,2.f,3.f}) == approx4(4.f,7.f,10.f,1.f));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("rotate") {
|
SECTION("rotate") {
|
||||||
@@ -94,10 +94,10 @@ TEST_CASE("vmath/mat_ext") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SECTION("scale") {
|
SECTION("scale") {
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * scale(2.f,3.f,4.f) == approx4(4.f,9.f,16.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * scale(2.f,3.f,4.f) == approx4(4.f,9.f,16.f,1.f));
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * scale(vec3f{2.f,3.f,4.f}) == approx4(4.f,9.f,16.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * scale(vec3f{2.f,3.f,4.f}) == approx4(4.f,9.f,16.f,1.f));
|
||||||
|
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * scale(scale(2.f,2.f,2.f), 2.f,3.f,4.f) == approx4(8.f,18.f,32.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * scale(scale(2.f,2.f,2.f), 2.f,3.f,4.f) == approx4(8.f,18.f,32.f,1.f));
|
||||||
REQUIRE(vec4f(2.f,3.f,4.f,1.f) * scale(scale(2.f,2.f,2.f), vec3f{2.f,3.f,4.f}) == approx4(8.f,18.f,32.f,1.f));
|
STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * scale(scale(2.f,2.f,2.f), vec3f{2.f,3.f,4.f}) == approx4(8.f,18.f,32.f,1.f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,11 +213,11 @@ TEST_CASE("vmath/mat_fun") {
|
|||||||
STATIC_REQUIRE(inverse(mat3i()) == mat3i());
|
STATIC_REQUIRE(inverse(mat3i()) == mat3i());
|
||||||
STATIC_REQUIRE(inverse(mat4i()) == mat4i());
|
STATIC_REQUIRE(inverse(mat4i()) == mat4i());
|
||||||
|
|
||||||
REQUIRE(inverse(mat2f(0.5)) == mat2f(2.f));
|
STATIC_REQUIRE(inverse(mat2f(0.5)) == mat2f(2.f));
|
||||||
REQUIRE(inverse(mat3f(0.5)) == mat3f(2.f));
|
STATIC_REQUIRE(inverse(mat3f(0.5)) == mat3f(2.f));
|
||||||
REQUIRE(inverse(mat4f(0.5)) == mat4f(2.f));
|
STATIC_REQUIRE(inverse(mat4f(0.5)) == mat4f(2.f));
|
||||||
|
|
||||||
REQUIRE(inverse(translate(1.f,2.f,3.f)) == approx4x4(translate(-1.f,-2.f,-3.f)));
|
STATIC_REQUIRE(inverse(translate(1.f,2.f,3.f)) == approx4x4(translate(-1.f,-2.f,-3.f)));
|
||||||
|
|
||||||
REQUIRE(inverse(rotate(0.5f,normalize(vec3f{1.f,2.f,3.f}))) == approx4x4(rotate(-0.5f,normalize(vec3f{1.f,2.f,3.f}))));
|
REQUIRE(inverse(rotate(0.5f,normalize(vec3f{1.f,2.f,3.f}))) == approx4x4(rotate(-0.5f,normalize(vec3f{1.f,2.f,3.f}))));
|
||||||
REQUIRE(inverse(mat3f(rotate(0.5f,normalize(vec3f{1.f,2.f,3.f})))) == approx3x3(mat3f(rotate(-0.5f,normalize(vec3f{1.f,2.f,3.f})))));
|
REQUIRE(inverse(mat3f(rotate(0.5f,normalize(vec3f{1.f,2.f,3.f})))) == approx3x3(mat3f(rotate(-0.5f,normalize(vec3f{1.f,2.f,3.f})))));
|
||||||
|
|||||||
Reference in New Issue
Block a user