mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-14 20:31:25 +07:00
vector and matrix deduction guides
This commit is contained in:
@@ -230,6 +230,44 @@ namespace vmath_hpp
|
||||
return rows[index];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
namespace vmath_hpp
|
||||
{
|
||||
// mat2
|
||||
|
||||
template < typename T >
|
||||
mat(T, T, T, T) -> mat<T, 2>;
|
||||
|
||||
template < typename T >
|
||||
mat(const vec<T, 2>&, const vec<T, 2>&) -> mat<T, 2>;
|
||||
|
||||
template < typename T >
|
||||
mat(std::initializer_list<T>, std::initializer_list<T>) -> mat<T, 2>;
|
||||
|
||||
// mat3
|
||||
|
||||
template < typename T >
|
||||
mat(T, T, T, T, T, T, T, T, T) -> mat<T, 3>;
|
||||
|
||||
template < typename T >
|
||||
mat(const vec<T, 3>&, const vec<T, 3>&, const vec<T, 3>&) -> mat<T, 3>;
|
||||
|
||||
template < typename T >
|
||||
mat(std::initializer_list<T>, std::initializer_list<T>, std::initializer_list<T>) -> mat<T, 3>;
|
||||
|
||||
// mat4
|
||||
|
||||
template < typename T >
|
||||
mat(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) -> mat<T, 4>;
|
||||
|
||||
template < typename T >
|
||||
mat(const vec<T, 4>&, const vec<T, 4>&, const vec<T, 4>&, const vec<T, 4>&) -> mat<T, 4>;
|
||||
|
||||
template < typename T >
|
||||
mat(std::initializer_list<T>, std::initializer_list<T>, std::initializer_list<T>, std::initializer_list<T>) -> mat<T, 4>;
|
||||
|
||||
// swap
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
void swap(mat<T, Size>& l, mat<T, Size>& r) noexcept(noexcept(l.swap(r))) {
|
||||
|
||||
@@ -189,6 +189,50 @@ namespace vmath_hpp
|
||||
return (*this)[index];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
namespace vmath_hpp
|
||||
{
|
||||
// vec2
|
||||
|
||||
template < typename T >
|
||||
vec(T, T) -> vec<T, 2>;
|
||||
|
||||
// vec3
|
||||
|
||||
template < typename T >
|
||||
vec(T, T, T) -> vec<T, 3>;
|
||||
|
||||
template < typename T >
|
||||
vec(const vec<T, 2>&, T) -> vec<T, 3>;
|
||||
|
||||
template < typename T >
|
||||
vec(T, const vec<T, 2>&) -> vec<T, 3>;
|
||||
|
||||
// vec4
|
||||
|
||||
template < typename T >
|
||||
vec(T, T, T, T) -> vec<T, 4>;
|
||||
|
||||
template < typename T >
|
||||
vec(const vec<T, 2>&, T, T) -> vec<T, 4>;
|
||||
|
||||
template < typename T >
|
||||
vec(T, const vec<T, 2>&, T) -> vec<T, 4>;
|
||||
|
||||
template < typename T >
|
||||
vec(T, T, const vec<T, 2>&) -> vec<T, 4>;
|
||||
|
||||
template < typename T >
|
||||
vec(const vec<T, 2>&, const vec<T, 2>&) -> vec<T, 4>;
|
||||
|
||||
template < typename T >
|
||||
vec(const vec<T, 3>&, T) -> vec<T, 4>;
|
||||
|
||||
template < typename T >
|
||||
vec(T, const vec<T, 3>&) -> vec<T, 4>;
|
||||
|
||||
// swap
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
void swap(vec<T, Size>& l, vec<T, Size>& r) noexcept(noexcept(l.swap(r))) {
|
||||
|
||||
@@ -24,6 +24,20 @@ TEST_CASE("vmath/mat") {
|
||||
STATIC_REQUIRE(sizeof(int4x4{}) == sizeof(int) * 4 * 4);
|
||||
}
|
||||
|
||||
SUBCASE("guides") {
|
||||
STATIC_REQUIRE(mat{1,2,3,4}.size == 2);
|
||||
STATIC_REQUIRE(mat{{1,2},{3,4}}.size == 2);
|
||||
STATIC_REQUIRE(mat{vec{1,2},vec{3,4}}.size == 2);
|
||||
|
||||
STATIC_REQUIRE(mat{1,2,3,4,5,6,7,8,9}.size == 3);
|
||||
STATIC_REQUIRE(mat{{1,2,3},{4,5,6},{7,8,9}}.size == 3);
|
||||
STATIC_REQUIRE(mat{vec{1,2,3},vec{4,5,6},vec{7,8,9}}.size == 3);
|
||||
|
||||
STATIC_REQUIRE(mat{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}.size == 4);
|
||||
STATIC_REQUIRE(mat{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}.size == 4);
|
||||
STATIC_REQUIRE(mat{vec{1,2,3,4},vec{5,6,7,8},vec{9,10,11,12},vec{13,14,15,16}}.size == 4);
|
||||
}
|
||||
|
||||
SUBCASE("ctors") {
|
||||
{
|
||||
STATIC_REQUIRE(int2x2()[0] == int2(1,0));
|
||||
|
||||
@@ -24,6 +24,22 @@ TEST_CASE("vmath/vec") {
|
||||
STATIC_REQUIRE(sizeof(int4{}) == sizeof(int) * 4);
|
||||
}
|
||||
|
||||
SUBCASE("guides") {
|
||||
STATIC_REQUIRE(vec{1,2}.size == 2);
|
||||
|
||||
STATIC_REQUIRE(vec{1,2,3}.size == 3);
|
||||
STATIC_REQUIRE(vec{{1,2},3}.size == 3);
|
||||
STATIC_REQUIRE(vec{1,{2,3}}.size == 3);
|
||||
|
||||
STATIC_REQUIRE(vec{1,2,3,4}.size == 4);
|
||||
STATIC_REQUIRE(vec{vec{1,2},3,4}.size == 4);
|
||||
STATIC_REQUIRE(vec{1,vec{2,3},4}.size == 4);
|
||||
STATIC_REQUIRE(vec{1,2,vec{3,4}}.size == 4);
|
||||
STATIC_REQUIRE(vec{vec{1,2},vec{3,4}}.size == 4);
|
||||
STATIC_REQUIRE(vec{vec{1,2,3},4}.size == 4);
|
||||
STATIC_REQUIRE(vec{1,vec{2,3,4}}.size == 4);
|
||||
}
|
||||
|
||||
SUBCASE("ctors") {
|
||||
{
|
||||
STATIC_REQUIRE(int2().x == 0);
|
||||
|
||||
Reference in New Issue
Block a user