diff --git a/README.md b/README.md index 0663c02..248db58 100644 --- a/README.md +++ b/README.md @@ -194,33 +194,25 @@ public: const_reference operator[](size_t index) const; }; -using bool2 = vec; -using bool3 = vec; -using bool4 = vec; +using bvec2 = vec; +using bvec3 = vec; +using bvec4 = vec; -using int2 = vec; -using int3 = vec; -using int4 = vec; +using ivec2 = vec; +using ivec3 = vec; +using ivec4 = vec; -using uint2 = vec; -using uint3 = vec; -using uint4 = vec; +using uvec2 = vec; +using uvec3 = vec; +using uvec4 = vec; -using float2 = vec; -using float3 = vec; -using float4 = vec; +using fvec2 = vec; +using fvec3 = vec; +using fvec4 = vec; -using double2 = vec; -using double3 = vec; -using double4 = vec; - -using size2_t = vec; -using size3_t = vec; -using size4_t = vec; - -using ptrdiff2_t = vec; -using ptrdiff3_t = vec; -using ptrdiff4_t = vec; +using dvec2 = vec; +using dvec3 = vec; +using dvec4 = vec; ``` ### Matrix Types @@ -379,33 +371,25 @@ public: const_reference operator[](size_t index) const; }; -using bool2x2 = mat; -using bool3x3 = mat; -using bool4x4 = mat; +using bmat2 = mat; +using bmat3 = mat; +using bmat4 = mat; -using int2x2 = mat; -using int3x3 = mat; -using int4x4 = mat; +using imat2 = mat; +using imat3 = mat; +using imat4 = mat; -using uint2x2 = mat; -using uint3x3 = mat; -using uint4x4 = mat; +using umat2 = mat; +using umat3 = mat; +using umat4 = mat; -using float2x2 = mat; -using float3x3 = mat; -using float4x4 = mat; +using fmat2 = mat; +using fmat3 = mat; +using fmat4 = mat; -using double2x2 = mat; -using double3x3 = mat; -using double4x4 = mat; - -using size2x2_t = mat; -using size3x3_t = mat; -using size4x4_t = mat; - -using ptrdiff2x2_t = mat; -using ptrdiff3x3_t = mat; -using ptrdiff4x4_t = mat; +using dmat2 = mat; +using dmat3 = mat; +using dmat4 = mat; ``` ### Quaternion Types @@ -481,8 +465,8 @@ public: const_reference operator[](size_t index) const; }; -using qfloat = qua; -using qdouble = qua; +using fqua = qua; +using dqua = qua; ``` ### Vector Operators @@ -1746,17 +1730,17 @@ template < typename T > inline vec unit4_y; template < typename T > inline vec unit4_z; template < typename T > inline vec unit4_w; -template < typename T > inline mat zero2x2; -template < typename T > inline mat zero3x3; -template < typename T > inline mat zero4x4; +template < typename T > inline mat mzero2; +template < typename T > inline mat mzero3; +template < typename T > inline mat mzero4; -template < typename T > inline mat unit2x2; -template < typename T > inline mat unit3x3; -template < typename T > inline mat unit4x4; +template < typename T > inline mat munit2; +template < typename T > inline mat munit3; +template < typename T > inline mat munit4; -template < typename T > inline mat identity2x2; -template < typename T > inline mat identity3x3; -template < typename T > inline mat identity4x4; +template < typename T > inline mat midentity2; +template < typename T > inline mat midentity3; +template < typename T > inline mat midentity4; template < typename T > inline qua qzero; template < typename T > inline qua qidentity; @@ -1816,62 +1800,65 @@ qua imag(qua q, const vec& imag); ```cpp template < typename T > -mat translate(T x, T y, T z); +mat trs(const vec& t, const mat& r); template < typename T > -mat translate(const mat& m, T x, T y, T z); +mat trs(const vec& t, const mat& r, const vec& s); + +template < typename T > +mat trs(const vec& t, const qua& r); + +template < typename T > +mat trs(const vec& t, const qua& r, const vec& s); template < typename T > mat translate(const vec& v); template < typename T > -mat translate(const mat& m, const vec& v); +mat rotate(const qua& q); template < typename T > -mat rotate(const qua& q); +mat rotate4(const qua& q); template < typename T > -mat rotate(const mat& m, const qua& q); +mat rotate(T angle, const vec& axis); template < typename T > -mat rotate(T angle, const vec& axis); +mat rotate4(T angle, const vec& axis); template < typename T > -mat rotate(const mat& m, T angle, const vec& axis); +mat rotate_x(T angle); template < typename T > -mat rotate_x(T angle); +mat rotate4_x(T angle); template < typename T > -mat rotate_x(const mat& m, T angle); +mat rotate_y(T angle); template < typename T > -mat rotate_y(T angle); +mat rotate4_y(T angle); template < typename T > -mat rotate_y(const mat& m, T angle); +mat rotate_z(T angle); template < typename T > -mat rotate_z(T angle); +mat rotate4_z(T angle); template < typename T > -mat rotate_z(const mat& m, T angle); +mat scale(const vec& v); template < typename T > -mat scale(T x, T y, T z); +mat scale4(const vec& v); template < typename T > -mat scale(const mat& m, T x, T y, T z); - -template < typename T > -mat scale(const vec& v); - -template < typename T > -mat scale(const mat& m, const vec& v); +mat look_at_lh(const vec& dir, const vec& up); template < typename T > mat look_at_lh(const vec& eye, const vec& at, const vec& up); +template < typename T > +mat look_at_rh(const vec& dir, const vec& up); + template < typename T > mat look_at_rh(const vec& eye, const vec& at, const vec& up); ``` @@ -1880,58 +1867,31 @@ mat look_at_rh(const vec& eye, const vec& at, const vec& ```cpp template < typename T > -mat translate(T x, T y); +mat trs(const vec& t, const mat& r); template < typename T > -mat translate(const mat& m, T x, T y); +mat trs(const vec& t, const mat& r, const vec& s); template < typename T > mat translate(const vec& v); template < typename T > -mat translate(const mat& m, const vec& v); +mat rotate(T angle); template < typename T > -mat rotate(T angle); +mat rotate3(T angle); template < typename T > -mat rotate(const mat& m, T angle); +mat scale(const vec& v); template < typename T > -mat scale(T x, T y); +mat scale3(const vec& v); template < typename T > -mat scale(const mat& m, T x, T y); +mat shear(const vec& v); template < typename T > -mat scale(const vec& v); - -template < typename T > -mat scale(const mat& m, const vec& v); - -template < typename T > -mat shear(T x, T y); - -template < typename T > -mat shear(const mat& m, T x, T y); - -template < typename T > -mat shear(const vec& v); - -template < typename T > -mat shear(const mat& m, const vec& v); - -template < typename T > -mat shear_x(T y); - -template < typename T > -mat shear_x(const mat& m, T y); - -template < typename T > -mat shear_y(T x); - -template < typename T > -mat shear_y(const mat& m, T x); +mat shear3(const vec& v); ``` ### Matrix Projections @@ -1986,9 +1946,6 @@ vec rotate_y(const vec& v, T angle); template < typename T > vec rotate_z(const vec& v, T angle); -template < typename T > -vec rotate(const vec& v, const qua& q); - template < typename T > vec rotate(const vec& v, T angle, const vec& axis); diff --git a/headers/vmath.hpp/vmath_ext.hpp b/headers/vmath.hpp/vmath_ext.hpp index 0e66998..af55c0f 100644 --- a/headers/vmath.hpp/vmath_ext.hpp +++ b/headers/vmath.hpp/vmath_ext.hpp @@ -39,17 +39,17 @@ namespace vmath_hpp template < typename T > inline constexpr vec unit4_z{T{0}, T{0}, T{1}, T{0}}; template < typename T > inline constexpr vec unit4_w{T{0}, T{0}, T{0}, T{1}}; - template < typename T > inline constexpr mat zero2x2{zero_init}; - template < typename T > inline constexpr mat zero3x3{zero_init}; - template < typename T > inline constexpr mat zero4x4{zero_init}; + template < typename T > inline constexpr mat mzero2{zero_init}; + template < typename T > inline constexpr mat mzero3{zero_init}; + template < typename T > inline constexpr mat mzero4{zero_init}; - template < typename T > inline constexpr mat unit2x2{unit_init}; - template < typename T > inline constexpr mat unit3x3{unit_init}; - template < typename T > inline constexpr mat unit4x4{unit_init}; + template < typename T > inline constexpr mat munit2{unit_init}; + template < typename T > inline constexpr mat munit3{unit_init}; + template < typename T > inline constexpr mat munit4{unit_init}; - template < typename T > inline constexpr mat identity2x2{identity_init}; - template < typename T > inline constexpr mat identity3x3{identity_init}; - template < typename T > inline constexpr mat identity4x4{identity_init}; + template < typename T > inline constexpr mat midentity2{identity_init}; + template < typename T > inline constexpr mat midentity3{identity_init}; + template < typename T > inline constexpr mat midentity4{identity_init}; template < typename T > inline constexpr qua qzero{zero_init}; template < typename T > inline constexpr qua qidentity{identity_init}; @@ -230,39 +230,54 @@ namespace vmath_hpp namespace vmath_hpp { + // trs + + template < typename T > + [[nodiscard]] constexpr mat trs(const vec& t, const mat& r) { + return { + { r[0], T{0} }, + { r[1], T{0} }, + { r[2], T{0} }, + { t, T{1} }}; + } + + template < typename T > + [[nodiscard]] constexpr mat trs(const vec& t, const mat& r, const vec& s) { + return { + { r[0] * s[0], T{0} }, + { r[1] * s[1], T{0} }, + { r[2] * s[2], T{0} }, + { t, T{1} }}; + } + + template < typename T > + [[nodiscard]] constexpr mat trs(const vec& t, const qua& r) { + return trs(t, rotate(r)); + } + + template < typename T > + [[nodiscard]] constexpr mat trs(const vec& t, const qua& r, const vec& s) { + return trs(t, rotate(r), s); + } + // translate template < typename T > - [[nodiscard]] constexpr mat translate(T x, T y, T z) { + [[nodiscard]] constexpr mat translate(const vec& v) { /// REFERENCE: /// https://en.wikipedia.org/wiki/Translation_(geometry) return { - {T{1}, T{0}, T{0}, T{0}}, - {T{0}, T{1}, T{0}, T{0}}, - {T{0}, T{0}, T{1}, T{0}}, - { x, y, z, T{1}}}; - } - - template < typename T > - [[nodiscard]] constexpr mat translate(const mat& m, T x, T y, T z) { - return m * translate(x, y, z); - } - - template < typename T > - [[nodiscard]] constexpr mat translate(const vec& v) { - return translate(v.x, v.y, v.z); - } - - template < typename T > - [[nodiscard]] constexpr mat translate(const mat& m, const vec& v) { - return m * translate(v); + { T{1}, T{0}, T{0}, T{0} }, + { T{0}, T{1}, T{0}, T{0} }, + { T{0}, T{0}, T{1}, T{0} }, + { v.x, v.y, v.z, T{1} }}; } // rotate template < typename T > - [[nodiscard]] constexpr mat rotate(const qua& q) { + [[nodiscard]] constexpr mat rotate(const qua& q) { /// REFERENCE: /// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToMatrix/ @@ -285,19 +300,18 @@ namespace vmath_hpp const T zz2 = qv.z * z2; return { - T{1} - (yy2 + zz2), (xy2 + sz2), (xz2 - sy2), T{0}, - (xy2 - sz2), T{1} - (xx2 + zz2), (yz2 + sx2), T{0}, - (xz2 + sy2), (yz2 - sx2), T{1} - (xx2 + yy2), T{0}, - T{0}, T{0}, T{0}, T{1}}; + { T{1} - (yy2 + zz2), (xy2 + sz2), (xz2 - sy2) }, + { (xy2 - sz2), T{1} - (xx2 + zz2), (yz2 + sx2) }, + { (xz2 + sy2), (yz2 - sx2), T{1} - (xx2 + yy2) }}; } template < typename T > - [[nodiscard]] constexpr mat rotate(const mat& m, const qua& q) { - return m * rotate(q); + [[nodiscard]] constexpr mat rotate4(const qua& q) { + return mat(rotate(q)); } template < typename T > - [[nodiscard]] constexpr mat rotate(T angle, const vec& axis) { + [[nodiscard]] constexpr mat rotate(T angle, const vec& axis) { /// REFERENCE: /// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToMatrix/ @@ -323,107 +337,120 @@ namespace vmath_hpp const T yzm = y * z * ic; return { - xxm + c, xym + zs, xzm - ys, T{0}, - xym - zs, yym + c, yzm + xs, T{0}, - xzm + ys, yzm - xs, zzm + c, T{0}, - T{0}, T{0}, T{0}, T{1}}; + { xxm + c, xym + zs, xzm - ys }, + { xym - zs, yym + c, yzm + xs }, + { xzm + ys, yzm - xs, zzm + c }}; } template < typename T > - [[nodiscard]] constexpr mat rotate(const mat& m, T angle, const vec& axis) { - return m * rotate(angle, axis); + [[nodiscard]] constexpr mat rotate4(T angle, const vec& axis) { + return mat(rotate(angle, axis)); } + // rotate_x + template < typename T > - [[nodiscard]] constexpr mat rotate_x(T angle) { + [[nodiscard]] constexpr mat rotate_x(T angle) { /// REFERENCE: /// http://www.euclideanspace.com/maths/algebra/matrix/orthogonal/rotation/ const auto [s, c] = sincos(angle); return { - T{1}, T{0}, T{0}, T{0}, - T{0}, c, s, T{0}, - T{0}, -s, c, T{0}, - T{0}, T{0}, T{0}, T{1}}; + { T{1}, T{0}, T{0} }, + { T{0}, c, s }, + { T{0}, -s, c }}; } template < typename T > - [[nodiscard]] constexpr mat rotate_x(const mat& m, T angle) { - return m * rotate_x(angle); + [[nodiscard]] constexpr mat rotate4_x(T angle) { + return mat(rotate_x(angle)); } + // rotate_y + template < typename T > - [[nodiscard]] constexpr mat rotate_y(T angle) { + [[nodiscard]] constexpr mat rotate_y(T angle) { /// REFERENCE: /// http://www.euclideanspace.com/maths/algebra/matrix/orthogonal/rotation/ const auto [s, c] = sincos(angle); return { - c, T{0}, -s, T{0}, - T{0}, T{1}, T{0}, T{0}, - s, T{0}, c, T{0}, - T{0}, T{0}, T{0}, T{1}}; + { c, T{0}, -s }, + { T{0}, T{1}, T{0} }, + { s, T{0}, c }}; } template < typename T > - [[nodiscard]] constexpr mat rotate_y(const mat& m, T angle) { - return m * rotate_y(angle); + [[nodiscard]] constexpr mat rotate4_y(T angle) { + return mat(rotate_y(angle)); } + // rotate_z + template < typename T > - [[nodiscard]] constexpr mat rotate_z(T angle) { + [[nodiscard]] constexpr mat rotate_z(T angle) { /// REFERENCE: /// http://www.euclideanspace.com/maths/algebra/matrix/orthogonal/rotation/ const auto [s, c] = sincos(angle); return { - c, s, T{0}, T{0}, - -s, c, T{0}, T{0}, - T{0}, T{0}, T{1}, T{0}, - T{0}, T{0}, T{0}, T{1}}; + { c, s, T{0} }, + { -s, c, T{0} }, + { T{0}, T{0}, T{1} }}; } template < typename T > - [[nodiscard]] constexpr mat rotate_z(const mat& m, T angle) { - return m * rotate_z(angle); + [[nodiscard]] constexpr mat rotate4_z(T angle) { + return mat(rotate_z(angle)); } // scale template < typename T > - [[nodiscard]] constexpr mat scale(T x, T y, T z) { + [[nodiscard]] constexpr mat scale(const vec& v) { /// REFERENCE: /// https://en.wikipedia.org/wiki/Scaling_(geometry) return { - { x, T{0}, T{0}, T{0}}, - {T{0}, y, T{0}, T{0}}, - {T{0}, T{0}, z, T{0}}, - {T{0}, T{0}, T{0}, T{1}}}; + { v.x, T{0}, T{0} }, + { T{0}, v.y, T{0} }, + { T{0}, T{0}, v.z }}; } template < typename T > - [[nodiscard]] constexpr mat scale(const mat& m, T x, T y, T z) { - return m * scale(x, y, z); - } - - template < typename T > - [[nodiscard]] constexpr mat scale(const vec& v) { - return scale(v.x, v.y, v.z); - } - - template < typename T > - [[nodiscard]] constexpr mat scale(const mat& m, const vec& v) { - return m * scale(v); + [[nodiscard]] constexpr mat scale4(const vec& v) { + return mat(scale(v)); } // look_at template < typename T > - [[nodiscard]] constexpr mat look_at_lh(const vec& eye, const vec& at, const vec& up) { + [[nodiscard]] constexpr mat look_at_lh( + const vec& dir, + const vec& up) + { + /// REFERENCE: + /// https://www.euclideanspace.com/maths/algebra/vectors/lookat/ + + const vec az = normalize(dir); + const vec ax = normalize(cross(up, az)); + const vec ay = cross(az, ax); + + return { + { ax.x, ay.x, az.x }, + { ax.y, ay.y, az.y }, + { ax.z, ay.z, az.z }}; + } + + template < typename T > + [[nodiscard]] constexpr mat look_at_lh( + const vec& eye, + const vec& at, + const vec& up) + { /// REFERENCE: /// https://www.euclideanspace.com/maths/algebra/vectors/lookat/ @@ -436,14 +463,36 @@ namespace vmath_hpp const T dz = dot(az, eye); return { - ax.x, ay.x, az.x, T{0}, - ax.y, ay.y, az.y, T{0}, - ax.z, ay.z, az.z, T{0}, - -dx, -dy, -dz, T{1}}; + { ax.x, ay.x, az.x, T{0} }, + { ax.y, ay.y, az.y, T{0} }, + { ax.z, ay.z, az.z, T{0} }, + { -dx, -dy, -dz, T{1} }}; } template < typename T > - [[nodiscard]] constexpr mat look_at_rh(const vec& eye, const vec& at, const vec& up) { + [[nodiscard]] constexpr mat look_at_rh( + const vec& dir, + const vec& up) + { + /// REFERENCE: + /// https://www.euclideanspace.com/maths/algebra/vectors/lookat/ + + const vec az = normalize(-dir); + const vec ax = normalize(cross(up, az)); + const vec ay = cross(az, ax); + + return { + { ax.x, ay.x, az.x }, + { ax.y, ay.y, az.y }, + { ax.z, ay.z, az.z }}; + } + + template < typename T > + [[nodiscard]] constexpr mat look_at_rh( + const vec& eye, + const vec& at, + const vec& up) + { /// REFERENCE: /// https://www.euclideanspace.com/maths/algebra/vectors/lookat/ @@ -456,10 +505,10 @@ namespace vmath_hpp const T dz = dot(az, eye); return { - ax.x, ay.x, az.x, T{0}, - ax.y, ay.y, az.y, T{0}, - ax.z, ay.z, az.z, T{0}, - -dx, -dy, -dz, T{1}}; + { ax.x, ay.x, az.x, T{0} }, + { ax.y, ay.y, az.y, T{0} }, + { ax.z, ay.z, az.z, T{0} }, + { -dx, -dy, -dz, T{1} }}; } } @@ -469,140 +518,88 @@ namespace vmath_hpp namespace vmath_hpp { + // trs + + template < typename T > + [[nodiscard]] constexpr mat trs(const vec& t, const mat& r) { + return { + { r[0], T{0} }, + { r[1], T{0} }, + { t, T{1} }}; + } + + template < typename T > + [[nodiscard]] constexpr mat trs(const vec& t, const mat& r, const vec& s) { + return { + { r[0] * s[0], T{0} }, + { r[1] * s[1], T{0} }, + { t, T{1} }}; + } + // translate template < typename T > - [[nodiscard]] constexpr mat translate(T x, T y) { + [[nodiscard]] constexpr mat translate(const vec& v) { /// REFERENCE: /// https://en.wikipedia.org/wiki/Translation_(geometry) return { - {T{1}, T{0}, T{0}}, - {T{0}, T{1}, T{0}}, - { x, y, T{1}}}; - } - - template < typename T > - [[nodiscard]] constexpr mat translate(const mat& m, T x, T y) { - return m * translate(x, y); - } - - template < typename T > - [[nodiscard]] constexpr mat translate(const vec& v) { - return translate(v.x, v.y); - } - - template < typename T > - [[nodiscard]] constexpr mat translate(const mat& m, const vec& v) { - return m * translate(v); + { T{1}, T{0}, T{0} }, + { T{0}, T{1}, T{0} }, + { v.x, v.y, T{1} }}; } // rotate template < typename T > - [[nodiscard]] constexpr mat rotate(T angle) { + [[nodiscard]] constexpr mat rotate(T angle) { /// REFERENCE: /// http://www.euclideanspace.com/maths/algebra/matrix/orthogonal/rotation/ const auto [s, c] = sincos(angle); return { - c, s, T{0}, - -s, c, T{0}, - T{0}, T{0}, T{1}}; + { c, s }, + { -s, c }}; } template < typename T > - [[nodiscard]] constexpr mat rotate(const mat& m, T angle) { - return m * rotate(angle); + [[nodiscard]] constexpr mat rotate3(T angle) { + return mat(rotate(angle)); } // scale template < typename T > - [[nodiscard]] constexpr mat scale(T x, T y) { + [[nodiscard]] constexpr mat scale(const vec& v) { /// REFERENCE: /// https://en.wikipedia.org/wiki/Scaling_(geometry) return { - { x, T{0}, T{0}}, - {T{0}, y, T{0}}, - {T{0}, T{0}, T{1}}}; + { v.x, T{0} }, + { T{0}, v.y }}; } template < typename T > - [[nodiscard]] constexpr mat scale(const mat& m, T x, T y) { - return m * scale(x, y); - } - - template < typename T > - [[nodiscard]] constexpr mat scale(const vec& v) { - return scale(v.x, v.y); - } - - template < typename T > - [[nodiscard]] constexpr mat scale(const mat& m, const vec& v) { - return m * scale(v); + [[nodiscard]] constexpr mat scale3(const vec& v) { + return mat(scale(v)); } // shear template < typename T > - [[nodiscard]] constexpr mat shear(T x, T y) { + [[nodiscard]] constexpr mat shear(const vec& v) { /// REFERENCE: /// https://en.wikipedia.org/wiki/Shear_matrix return { - {T{1}, y, T{0}}, - { x, T{1}, T{0}}, - {T{0}, T{0}, T{1}}}; + { T{1}, v.y }, + { v.x, T{1} }}; } template < typename T > - [[nodiscard]] constexpr mat shear(const mat& m, T x, T y) { - return m * shear(x, y); - } - - template < typename T > - [[nodiscard]] constexpr mat shear(const vec& v) { - return shear(v.x, v.y); - } - - template < typename T > - [[nodiscard]] constexpr mat shear(const mat& m, const vec& v) { - return m * shear(v); - } - - template < typename T > - [[nodiscard]] constexpr mat shear_x(T x) { - /// REFERENCE: - /// https://en.wikipedia.org/wiki/Shear_matrix - - return { - {T{1}, T{0}, T{0}}, - { x, T{1}, T{0}}, - {T{0}, T{0}, T{1}}}; - } - - template < typename T > - [[nodiscard]] constexpr mat shear_x(const mat& m, T x) { - return m * shear_x(x); - } - - template < typename T > - [[nodiscard]] constexpr mat shear_y(T y) { - /// REFERENCE: - /// https://en.wikipedia.org/wiki/Shear_matrix - - return { - {T{1}, y, T{0}}, - {T{0}, T{1}, T{0}}, - {T{0}, T{0}, T{1}}}; - } - - template < typename T > - [[nodiscard]] constexpr mat shear_y(const mat& m, T y) { - return m * shear_y(y); + [[nodiscard]] constexpr mat shear3(const vec& v) { + return mat(shear(v)); } } @@ -629,10 +626,10 @@ namespace vmath_hpp const T tz = -frange * znear; return { - sx, T{0}, T{0}, T{0}, - T{0}, sy, T{0}, T{0}, - T{0}, T{0}, sz, T{0}, - T{0}, T{0}, tz, T{1}}; + { sx, T{0}, T{0}, T{0} }, + { T{0}, sy, T{0}, T{0} }, + { T{0}, T{0}, sz, T{0} }, + { T{0}, T{0}, tz, T{1} }}; } template < typename T > @@ -650,10 +647,10 @@ namespace vmath_hpp const T tz = frange * znear; return { - sx, T{0}, T{0}, T{0}, - T{0}, sy, T{0}, T{0}, - T{0}, T{0}, sz, T{0}, - T{0}, T{0}, tz, T{1}}; + { sx, T{0}, T{0}, T{0} }, + { T{0}, sy, T{0}, T{0} }, + { T{0}, T{0}, sz, T{0} }, + { T{0}, T{0}, tz, T{1} }}; } template < typename T > @@ -666,10 +663,10 @@ namespace vmath_hpp const T frange = rcp(zfar - znear); return { - T{2} * rwidth, T{0}, T{0}, T{0}, - T{0}, T{2} * rheight, T{0}, T{0}, - T{0}, T{0}, frange, T{0}, - -(left + right) * rwidth, -(top + bottom) * rheight, -frange * znear, T{1}}; + { T{2} * rwidth, T{0}, T{0}, T{0} }, + { T{0}, T{2} * rheight, T{0}, T{0} }, + { T{0}, T{0}, frange, T{0} }, + { -(left + right) * rwidth, -(top + bottom) * rheight, -frange * znear, T{1} }}; } template < typename T > @@ -682,10 +679,10 @@ namespace vmath_hpp const T frange = rcp(znear - zfar); return { - T{2} * rwidth, T{0}, T{0}, T{0}, - T{0}, T{2} * rheight, T{0}, T{0}, - T{0}, T{0}, frange, T{0}, - -(left + right) * rwidth, -(top + bottom) * rheight, frange * znear, T{1}}; + { T{2} * rwidth, T{0}, T{0}, T{0} }, + { T{0}, T{2} * rheight, T{0}, T{0} }, + { T{0}, T{0}, frange, T{0} }, + { -(left + right) * rwidth, -(top + bottom) * rheight, frange * znear, T{1} }}; } // perspective @@ -701,10 +698,10 @@ namespace vmath_hpp const T tz = (znear * zfar) * rcp(znear - zfar); return { - T{sx}, T{0}, T{0}, T{0}, - T{0}, T{sy}, T{0}, T{0}, - T{0}, T{0}, T{sz}, T{1}, - T{0}, T{0}, T{tz}, T{0}}; + { T{sx}, T{0}, T{0}, T{0} }, + { T{0}, T{sy}, T{0}, T{0} }, + { T{0}, T{0}, T{sz}, T{1} }, + { T{0}, T{0}, T{tz}, T{0} }}; } template < typename T > @@ -718,10 +715,10 @@ namespace vmath_hpp const T tz = (znear * zfar) * rcp(znear - zfar); return { - sx, T{0}, T{0}, T{0}, - T{0}, sy, T{0}, T{0}, - T{0}, T{0}, sz, -T{1}, - T{0}, T{0}, tz, T{0}}; + { sx, T{0}, T{0}, T{0} }, + { T{0}, sy, T{0}, T{0} }, + { T{0}, T{0}, sz, -T{1} }, + { T{0}, T{0}, tz, T{0} }}; } template < typename T > @@ -735,10 +732,10 @@ namespace vmath_hpp const T frange = zfar * rcp(zfar - znear); return { - znear2 * rwidth, T{0}, T{0}, T{0}, - T{0}, znear2 * rheight, T{0}, T{0}, - -(left + right) * rwidth, -(top + bottom) * rheight, frange, T{1}, - T{0}, T{0}, -frange * znear, T{0}}; + { znear2 * rwidth, T{0}, T{0}, T{0} }, + { T{0}, znear2 * rheight, T{0}, T{0} }, + { -(left + right) * rwidth, -(top + bottom) * rheight, frange, T{1} }, + { T{0}, T{0}, -frange * znear, T{0} }}; } template < typename T > @@ -752,10 +749,10 @@ namespace vmath_hpp const T frange = zfar * rcp(znear - zfar); return { - znear2 * rwidth, T{0}, T{0}, T{0}, - T{0}, znear2 * rheight, T{0}, T{0}, - (left + right) * rwidth, (top + bottom) * rheight, frange, -T{1}, - T{0}, T{0}, frange * znear, T{0}}; + { znear2 * rwidth, T{0}, T{0}, T{0} }, + { T{0}, znear2 * rheight, T{0}, T{0} }, + { (left + right) * rwidth, (top + bottom) * rheight, frange, -T{1} }, + { T{0}, T{0}, frange * znear, T{0} }}; } template < typename T > @@ -769,10 +766,10 @@ namespace vmath_hpp const T tz = (znear * zfar) * rcp(znear - zfar); return { - sx, T{0}, T{0}, T{0}, - T{0}, sy, T{0}, T{0}, - T{0}, T{0}, sz, T{1}, - T{0}, T{0}, tz, T{0}}; + { sx, T{0}, T{0}, T{0} }, + { T{0}, sy, T{0}, T{0} }, + { T{0}, T{0}, sz, T{1} }, + { T{0}, T{0}, tz, T{0} }}; } template < typename T > @@ -785,10 +782,10 @@ namespace vmath_hpp const T sz = zfar * rcp(znear - zfar); const T tz = (znear * zfar) * rcp(znear - zfar); return { - sx, T{0}, T{0}, T{0}, - T{0}, sy, T{0}, T{0}, - T{0}, T{0}, sz, -T{1}, - T{0}, T{0}, tz, T{0}}; + { sx, T{0}, T{0}, T{0} }, + { T{0}, sy, T{0}, T{0} }, + { T{0}, T{0}, sz, -T{1} }, + { T{0}, T{0}, tz, T{0} }}; } } @@ -810,10 +807,7 @@ namespace vmath_hpp template < typename T > [[nodiscard]] constexpr vec rotate(const vec& v, T angle) { - const auto [s, c] = sincos(angle); - return { - v.x * c - v.y * s, - v.x * s + v.y * c}; + return v * rotate(angle); } template < typename T > @@ -831,11 +825,6 @@ namespace vmath_hpp return v * qrotate(angle, unit3_z); } - template < typename T > - [[nodiscard]] constexpr vec rotate(const vec& v, const qua& q) { - return v * q; - } - template < typename T > [[nodiscard]] constexpr vec rotate(const vec& v, T angle, const vec& axis) { return v * qrotate(angle, axis); @@ -882,11 +871,6 @@ namespace vmath_hpp T{1}})); } - template < typename T > - [[nodiscard]] constexpr qua qrotate(const qua& q, const mat& m) { - return q * qrotate(m); - } - template < typename T > [[nodiscard]] constexpr qua qrotate(const vec& from, const vec& to) { /// REFERENCE: @@ -904,11 +888,6 @@ namespace vmath_hpp return normalize(qua{cross(from, to), s}); } - template < typename T > - [[nodiscard]] constexpr qua qrotate(const qua& q, const vec& from, const vec& to) { - return q * qrotate(from, to); - } - template < typename T > [[nodiscard]] constexpr qua qrotate(T angle, const vec& axis) { /// REFERENCE: @@ -920,11 +899,6 @@ namespace vmath_hpp return {vec{x, y, z} * s, c}; } - template < typename T > - [[nodiscard]] constexpr qua qrotate(const qua& q, T angle, const vec& axis) { - return q * qrotate(angle, axis); - } - template < typename T > [[nodiscard]] constexpr qua qrotate_x(T angle) { /// REFERENCE: @@ -935,11 +909,6 @@ namespace vmath_hpp return {vec{s, T{0}, T{0}}, c}; } - template < typename T > - [[nodiscard]] constexpr qua qrotate_x(const qua& q, T angle) { - return qrotate(q, angle, unit3_x); - } - template < typename T > [[nodiscard]] constexpr qua qrotate_y(T angle) { /// REFERENCE: @@ -950,11 +919,6 @@ namespace vmath_hpp return {vec{T{0}, s, T{0}}, c}; } - template < typename T > - [[nodiscard]] constexpr qua qrotate_y(const qua& q, T angle) { - return qrotate(q, angle, unit3_y); - } - template < typename T > [[nodiscard]] constexpr qua qrotate_z(T angle) { /// REFERENCE: @@ -965,40 +929,15 @@ namespace vmath_hpp return {vec{T{0}, T{0}, s}, c}; } - template < typename T > - [[nodiscard]] constexpr qua qrotate_z(const qua& q, T angle) { - return qrotate(q, angle, unit3_z); - } - - // look_at + // qlook_at template < typename T > [[nodiscard]] constexpr qua qlook_at_lh(const vec& dir, const vec& up) { - /// REFERENCE: - /// https://www.euclideanspace.com/maths/algebra/vectors/lookat/ - - const vec az = normalize(dir); - const vec ax = normalize(cross(up, az)); - const vec ay = cross(az, ax); - - return qrotate(mat{ - ax.x, ay.x, az.x, - ax.y, ay.y, az.y, - ax.z, ay.z, az.z}); + return qrotate(look_at_lh(dir, up)); } template < typename T > [[nodiscard]] constexpr qua qlook_at_rh(const vec& dir, const vec& up) { - /// REFERENCE: - /// https://www.euclideanspace.com/maths/algebra/vectors/lookat/ - - const vec az = normalize(-dir); - const vec ax = normalize(cross(up, az)); - const vec ay = cross(az, ax); - - return qrotate(mat{ - ax.x, ay.x, az.x, - ax.y, ay.y, az.y, - ax.z, ay.z, az.z}); + return qrotate(look_at_rh(dir, up)); } } diff --git a/headers/vmath.hpp/vmath_fwd.hpp b/headers/vmath.hpp/vmath_fwd.hpp index 6cde45b..31749b6 100644 --- a/headers/vmath.hpp/vmath_fwd.hpp +++ b/headers/vmath.hpp/vmath_fwd.hpp @@ -58,33 +58,25 @@ namespace vmath_hpp template < typename T, std::size_t Size > class vec; - using bool2 = vec; - using bool3 = vec; - using bool4 = vec; + using bvec2 = vec; + using bvec3 = vec; + using bvec4 = vec; - using int2 = vec; - using int3 = vec; - using int4 = vec; + using ivec2 = vec; + using ivec3 = vec; + using ivec4 = vec; - using uint2 = vec; - using uint3 = vec; - using uint4 = vec; + using uvec2 = vec; + using uvec3 = vec; + using uvec4 = vec; - using float2 = vec; - using float3 = vec; - using float4 = vec; + using fvec2 = vec; + using fvec3 = vec; + using fvec4 = vec; - using double2 = vec; - using double3 = vec; - using double4 = vec; - - using size2_t = vec; - using size3_t = vec; - using size4_t = vec; - - using ptrdiff2_t = vec; - using ptrdiff3_t = vec; - using ptrdiff4_t = vec; + using dvec2 = vec; + using dvec3 = vec; + using dvec4 = vec; } namespace vmath_hpp @@ -92,33 +84,25 @@ namespace vmath_hpp template < typename T, std::size_t Size > class mat; - using bool2x2 = mat; - using bool3x3 = mat; - using bool4x4 = mat; + using bmat2 = mat; + using bmat3 = mat; + using bmat4 = mat; - using int2x2 = mat; - using int3x3 = mat; - using int4x4 = mat; + using imat2 = mat; + using imat3 = mat; + using imat4 = mat; - using uint2x2 = mat; - using uint3x3 = mat; - using uint4x4 = mat; + using umat2 = mat; + using umat3 = mat; + using umat4 = mat; - using float2x2 = mat; - using float3x3 = mat; - using float4x4 = mat; + using fmat2 = mat; + using fmat3 = mat; + using fmat4 = mat; - using double2x2 = mat; - using double3x3 = mat; - using double4x4 = mat; - - using size2x2_t = mat; - using size3x3_t = mat; - using size4x4_t = mat; - - using ptrdiff2x2_t = mat; - using ptrdiff3x3_t = mat; - using ptrdiff4x4_t = mat; + using dmat2 = mat; + using dmat3 = mat; + using dmat4 = mat; } namespace vmath_hpp @@ -126,6 +110,6 @@ namespace vmath_hpp template < typename T > class qua; - using qfloat = qua; - using qdouble = qua; + using fqua = qua; + using dqua = qua; } diff --git a/untests/vmath_ext_tests.cpp b/untests/vmath_ext_tests.cpp index 7a4fcf7..2ca03e0 100644 --- a/untests/vmath_ext_tests.cpp +++ b/untests/vmath_ext_tests.cpp @@ -18,119 +18,118 @@ namespace constexpr float pi = radians(180.f); constexpr float pi_2 = radians(90.f); - constexpr float pi_4 = radians(45.f); } TEST_CASE("vmath/ext/units") { - STATIC_CHECK(zero2 == int2(0,0)); - STATIC_CHECK(zero3 == int3(0,0,0)); - STATIC_CHECK(zero4 == int4(0,0,0,0)); + STATIC_CHECK(zero2 == ivec2(0,0)); + STATIC_CHECK(zero3 == ivec3(0,0,0)); + STATIC_CHECK(zero4 == ivec4(0,0,0,0)); - STATIC_CHECK(unit2 == int2(1,1)); - STATIC_CHECK(unit2_x == int2(1,0)); - STATIC_CHECK(unit2_y == int2(0,1)); + STATIC_CHECK(unit2 == ivec2(1,1)); + STATIC_CHECK(unit2_x == ivec2(1,0)); + STATIC_CHECK(unit2_y == ivec2(0,1)); - STATIC_CHECK(unit3 == int3(1,1,1)); - STATIC_CHECK(unit3_x == int3(1,0,0)); - STATIC_CHECK(unit3_y == int3(0,1,0)); - STATIC_CHECK(unit3_z == int3(0,0,1)); + STATIC_CHECK(unit3 == ivec3(1,1,1)); + STATIC_CHECK(unit3_x == ivec3(1,0,0)); + STATIC_CHECK(unit3_y == ivec3(0,1,0)); + STATIC_CHECK(unit3_z == ivec3(0,0,1)); - STATIC_CHECK(unit4 == int4(1,1,1,1)); - STATIC_CHECK(unit4_x == int4(1,0,0,0)); - STATIC_CHECK(unit4_y == int4(0,1,0,0)); - STATIC_CHECK(unit4_z == int4(0,0,1,0)); - STATIC_CHECK(unit4_w == int4(0,0,0,1)); + STATIC_CHECK(unit4 == ivec4(1,1,1,1)); + STATIC_CHECK(unit4_x == ivec4(1,0,0,0)); + STATIC_CHECK(unit4_y == ivec4(0,1,0,0)); + STATIC_CHECK(unit4_z == ivec4(0,0,1,0)); + STATIC_CHECK(unit4_w == ivec4(0,0,0,1)); - STATIC_CHECK(zero2x2 == int2x2(0,0,0,0)); - STATIC_CHECK(zero3x3 == int3x3(0,0,0,0,0,0,0,0,0)); - STATIC_CHECK(zero4x4 == int4x4(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); + STATIC_CHECK(mzero2 == imat2(0,0,0,0)); + STATIC_CHECK(mzero3 == imat3(0,0,0,0,0,0,0,0,0)); + STATIC_CHECK(mzero4 == imat4(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); - STATIC_CHECK(unit2x2 == int2x2(1,1,1,1)); - STATIC_CHECK(unit3x3 == int3x3(1,1,1,1,1,1,1,1,1)); - STATIC_CHECK(unit4x4 == int4x4(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)); + STATIC_CHECK(munit2 == imat2(1,1,1,1)); + STATIC_CHECK(munit3 == imat3(1,1,1,1,1,1,1,1,1)); + STATIC_CHECK(munit4 == imat4(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)); - STATIC_CHECK(identity2x2 == int2x2()); - STATIC_CHECK(identity3x3 == int3x3()); - STATIC_CHECK(identity4x4 == int4x4()); + STATIC_CHECK(midentity2 == imat2()); + STATIC_CHECK(midentity3 == imat3()); + STATIC_CHECK(midentity4 == imat4()); - STATIC_CHECK(qzero == qfloat(zero_init)); - STATIC_CHECK(qidentity == qfloat(identity_init)); + STATIC_CHECK(qzero == fqua(zero_init)); + STATIC_CHECK(qidentity == fqua(identity_init)); } TEST_CASE("vmath/ext/hash") { SUBCASE("vector") { - CHECK(std::hash{}({1,2}) == std::hash{}({1,2})); - CHECK_FALSE(std::hash{}({1,2}) == std::hash{}({2,1})); + CHECK(std::hash{}({1,2}) == std::hash{}({1,2})); + CHECK_FALSE(std::hash{}({1,2}) == std::hash{}({2,1})); - CHECK(std::hash{}({1,2,3}) == std::hash{}({1,2,3})); - CHECK_FALSE(std::hash{}({1,2,3}) == std::hash{}({3,2,1})); + CHECK(std::hash{}({1,2,3}) == std::hash{}({1,2,3})); + CHECK_FALSE(std::hash{}({1,2,3}) == std::hash{}({3,2,1})); - CHECK(std::hash{}({1,2,3,4}) == std::hash{}({1,2,3,4})); - CHECK_FALSE(std::hash{}({1,2,3,4}) == std::hash{}({3,2,1,4})); + CHECK(std::hash{}({1,2,3,4}) == std::hash{}({1,2,3,4})); + CHECK_FALSE(std::hash{}({1,2,3,4}) == std::hash{}({3,2,1,4})); { - std::set s; - s.insert(int2(1,2)); - CHECK(s.count(int2(1,2)) > 0); - CHECK_FALSE(s.count(int2(1,1)) > 0); + std::set s; + s.insert(ivec2(1,2)); + CHECK(s.count(ivec2(1,2)) > 0); + CHECK_FALSE(s.count(ivec2(1,1)) > 0); } { - std::map s; - s.emplace(int2(1,2),3); - s.emplace(int2(2,3),5); - CHECK(s[int2(1,2)] == 3); - CHECK(s[int2(2,3)] == 5); + std::map s; + s.emplace(ivec2(1,2),3); + s.emplace(ivec2(2,3),5); + CHECK(s[ivec2(1,2)] == 3); + CHECK(s[ivec2(2,3)] == 5); } { - std::unordered_set s; - s.insert(int2(1,2)); - CHECK(s.count(int2(1,2)) > 0); - CHECK_FALSE(s.count(int2(1,1)) > 0); + std::unordered_set s; + s.insert(ivec2(1,2)); + CHECK(s.count(ivec2(1,2)) > 0); + CHECK_FALSE(s.count(ivec2(1,1)) > 0); } { - std::unordered_map s; - s.emplace(int2(1,2),3); - s.emplace(int2(2,3),5); - CHECK(s[int2(1,2)] == 3); - CHECK(s[int2(2,3)] == 5); + std::unordered_map s; + s.emplace(ivec2(1,2),3); + s.emplace(ivec2(2,3),5); + CHECK(s[ivec2(1,2)] == 3); + CHECK(s[ivec2(2,3)] == 5); } } SUBCASE("matrix") { - CHECK(std::hash{}({1,2,3,4}) == std::hash{}({1,2,3,4})); - CHECK_FALSE(std::hash{}({1,2,3,4}) == std::hash{}({1,2,4,3})); + CHECK(std::hash{}({1,2,3,4}) == std::hash{}({1,2,3,4})); + CHECK_FALSE(std::hash{}({1,2,3,4}) == std::hash{}({1,2,4,3})); { - std::set s; - s.insert(int2x2(1,2,3,4)); - CHECK(s.count(int2x2(1,2,3,4)) > 0); - CHECK_FALSE(s.count(int2x2(1,1,1,1)) > 0); + std::set s; + s.insert(imat2(1,2,3,4)); + CHECK(s.count(imat2(1,2,3,4)) > 0); + CHECK_FALSE(s.count(imat2(1,1,1,1)) > 0); } { - std::map s; - s.emplace(int2x2(1,2,3,4),3); - s.emplace(int2x2(2,3,4,5),5); - CHECK(s[int2x2(1,2,3,4)] == 3); - CHECK(s[int2x2(2,3,4,5)] == 5); + std::map s; + s.emplace(imat2(1,2,3,4),3); + s.emplace(imat2(2,3,4,5),5); + CHECK(s[imat2(1,2,3,4)] == 3); + CHECK(s[imat2(2,3,4,5)] == 5); } { - std::unordered_set s; - s.insert(int2x2(1,2,3,4)); - CHECK(s.count(int2x2(1,2,3,4)) > 0); - CHECK_FALSE(s.count(int2x2(1,1,1,1)) > 0); + std::unordered_set s; + s.insert(imat2(1,2,3,4)); + CHECK(s.count(imat2(1,2,3,4)) > 0); + CHECK_FALSE(s.count(imat2(1,1,1,1)) > 0); } { - std::unordered_map s; - s.emplace(int2x2(1,2,3,4),3); - s.emplace(int2x2(2,3,4,5),5); - CHECK(s[int2x2(1,2,3,4)] == 3); - CHECK(s[int2x2(2,3,4,5)] == 5); + std::unordered_map s; + s.emplace(imat2(1,2,3,4),3); + s.emplace(imat2(2,3,4,5),5); + CHECK(s[imat2(1,2,3,4)] == 3); + CHECK(s[imat2(2,3,4,5)] == 5); } } SUBCASE("quaternion") { - CHECK(std::hash{}({1,2,3,4}) == std::hash{}({1,2,3,4})); - CHECK_FALSE(std::hash{}({1,2,3,4}) == std::hash{}({3,2,1,4})); + CHECK(std::hash{}({1,2,3,4}) == std::hash{}({1,2,3,4})); + CHECK_FALSE(std::hash{}({1,2,3,4}) == std::hash{}({3,2,1,4})); { std::set> s; @@ -167,15 +166,15 @@ TEST_CASE("vmath/ext/cast") { STATIC_CHECK(i == 1); STATIC_CHECK(std::is_same_v); - constexpr auto v = cast_to(float2(1.5f)); - STATIC_CHECK(v == int2(1)); + constexpr auto v = cast_to(fvec2(1.5f)); + STATIC_CHECK(v == ivec2(1)); STATIC_CHECK(std::is_same_v); - constexpr auto m = cast_to(float2x2(1.5f)); - STATIC_CHECK(m == int2x2(1)); - STATIC_CHECK(std::is_same_v); + constexpr auto m = cast_to(fmat2(1.5f)); + STATIC_CHECK(m == imat2(1)); + STATIC_CHECK(std::is_same_v); - constexpr auto q = cast_to(qfloat(1.5f, 2.2f, 3.6f, 4.5f)); + constexpr auto q = cast_to(fqua(1.5f, 2.2f, 3.6f, 4.5f)); STATIC_CHECK(q == qua(1,2,3,4)); STATIC_CHECK(std::is_same_v); } @@ -183,27 +182,27 @@ TEST_CASE("vmath/ext/cast") { TEST_CASE("vmath/ext/access") { SUBCASE("component") { - STATIC_CHECK(component(int2{1,2}, 0) == 1); - STATIC_CHECK(component(int2{1,2}, 1) == 2); + STATIC_CHECK(component(ivec2{1,2}, 0) == 1); + STATIC_CHECK(component(ivec2{1,2}, 1) == 2); - STATIC_CHECK(component(int2{0,0}, 0, 1) == int2{1,0}); - STATIC_CHECK(component(int2{0,0}, 1, 2) == int2{0,2}); + STATIC_CHECK(component(ivec2{0,0}, 0, 1) == ivec2{1,0}); + STATIC_CHECK(component(ivec2{0,0}, 1, 2) == ivec2{0,2}); } SUBCASE("row") { - STATIC_CHECK(row(int2x2(1,2,3,4), 0) == int2(1,2)); - STATIC_CHECK(row(int2x2(1,2,3,4), 1) == int2(3,4)); + STATIC_CHECK(row(imat2(1,2,3,4), 0) == ivec2(1,2)); + STATIC_CHECK(row(imat2(1,2,3,4), 1) == ivec2(3,4)); - STATIC_CHECK(row(int2x2(), 0, {1,2}) == int2x2(1,2,0,1)); - STATIC_CHECK(row(int2x2(), 1, {3,4}) == int2x2(1,0,3,4)); + STATIC_CHECK(row(imat2(), 0, {1,2}) == imat2(1,2,0,1)); + STATIC_CHECK(row(imat2(), 1, {3,4}) == imat2(1,0,3,4)); } SUBCASE("column") { - STATIC_CHECK(column(int2x2(1,2,3,4), 0) == int2(1,3)); - STATIC_CHECK(column(int2x2(1,2,3,4), 1) == int2(2,4)); + STATIC_CHECK(column(imat2(1,2,3,4), 0) == ivec2(1,3)); + STATIC_CHECK(column(imat2(1,2,3,4), 1) == ivec2(2,4)); - STATIC_CHECK(column(int2x2(), 0, {2,3}) == int2x2(2,0,3,1)); - STATIC_CHECK(column(int2x2(), 1, {3,4}) == int2x2(1,3,0,4)); + STATIC_CHECK(column(imat2(), 0, {2,3}) == imat2(2,0,3,1)); + STATIC_CHECK(column(imat2(), 1, {3,4}) == imat2(1,3,0,4)); } SUBCASE("real") { @@ -218,65 +217,75 @@ TEST_CASE("vmath/ext/access") { } TEST_CASE("vmath/ext/matrix_transform") { - SUBCASE("translate") { - STATIC_CHECK(float3(2.f,3.f,1.f) * translate(float2{1.f,2.f}) == uapprox3(3.f,5.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * translate(translate(float2{1.f,2.f}), float2{1.f,2.f}) == uapprox3(4.f,7.f,1.f)); + SUBCASE("trs") { + CHECK(all(approx( + trs(fvec3(1,2,3), rotate(pi, fvec3{1,2,3})), + rotate4(pi, fvec3{1,2,3}) * translate(fvec3(1,2,3))))); + CHECK(all(approx( + trs(fvec3(1,2,3), rotate(pi, fvec3{1,2,3}), fvec3(2,3,4)), + scale4(fvec3(2,3,4)) * rotate4(pi, fvec3(1,2,3)) * translate(fvec3(1,2,3))))); - STATIC_CHECK(float4(2.f,3.f,4.f,1.f) * translate(float3{1.f,2.f,3.f}) == uapprox4(3.f,5.f,7.f,1.f)); - STATIC_CHECK(float4(2.f,3.f,4.f,1.f) * translate(translate(float3{1.f,2.f,3.f}), float3{1.f,2.f,3.f}) == uapprox4(4.f,7.f,10.f,1.f)); + CHECK(all(approx( + trs(fvec3(1,2,3), qrotate(pi, fvec3{1,2,3})), + rotate4(qrotate(pi, fvec3{1,2,3})) * translate(fvec3(1,2,3))))); + CHECK(all(approx( + trs(fvec3(1,2,3), qrotate(pi, fvec3{1,2,3}), fvec3(2,3,4)), + scale4(fvec3(2,3,4)) * rotate4(qrotate(pi, fvec3{1,2,3})) * translate(fvec3(1,2,3))))); + + CHECK(all(approx( + trs(fvec2(1,2), rotate(pi)), + rotate3(pi) * translate(fvec2(1,2))))); + CHECK(all(approx( + trs(fvec2(1,2), rotate(pi), fvec2(2,3)), + scale3(fvec2(2,3)) * rotate3(pi) * translate(fvec2(1,2))))); + } + + SUBCASE("translate") { + STATIC_CHECK(fvec3(2.f,3.f,1.f) * translate(fvec2{1.f,2.f}) == uapprox3(3.f,5.f,1.f)); + STATIC_CHECK(fvec4(2.f,3.f,4.f,1.f) * translate(fvec3{1.f,2.f,3.f}) == uapprox4(3.f,5.f,7.f,1.f)); } SUBCASE("rotate") { - CHECK(float4(0.f,1.f,0.f,1.f) * rotate_x(pi_2) == uapprox4(0.f,0.f,1.f,1.f)); - CHECK(float4(0.f,0.f,1.f,1.f) * rotate_y(pi_2) == uapprox4(1.f,0.f,0.f,1.f)); - CHECK(float4(1.f,0.f,0.f,1.f) * rotate_z(pi_2) == uapprox4(0.f,1.f,0.f,1.f)); + CHECK(fvec3(0.f,1.f,0.f) * rotate_x(pi_2) == uapprox3(0.f,0.f,1.f)); + CHECK(fvec3(0.f,0.f,1.f) * rotate_y(pi_2) == uapprox3(1.f,0.f,0.f)); + CHECK(fvec3(1.f,0.f,0.f) * rotate_z(pi_2) == uapprox3(0.f,1.f,0.f)); + CHECK(fvec4(0.f,1.f,0.f,1.f) * rotate4_x(pi_2) == uapprox4(0.f,0.f,1.f,1.f)); + CHECK(fvec4(0.f,0.f,1.f,1.f) * rotate4_y(pi_2) == uapprox4(1.f,0.f,0.f,1.f)); + CHECK(fvec4(1.f,0.f,0.f,1.f) * rotate4_z(pi_2) == uapprox4(0.f,1.f,0.f,1.f)); - CHECK(float4(0.f,1.f,0.f,1.f) * rotate_x(rotate_x(pi_4),pi_4) == uapprox4(0.f,0.f,1.f,1.f)); - CHECK(float4(0.f,0.f,1.f,1.f) * rotate_y(rotate_y(pi_4),pi_4) == uapprox4(1.f,0.f,0.f,1.f)); - CHECK(float4(1.f,0.f,0.f,1.f) * rotate_z(rotate_z(pi_4),pi_4) == uapprox4(0.f,1.f,0.f,1.f)); + CHECK(fvec2(2.f,3.f) * rotate(pi) == uapprox2(-2.f,-3.f)); + CHECK(fvec3(2.f,3.f,1) * rotate3(pi) == uapprox3(-2.f,-3.f,1.f)); - CHECK(float3(2.f,3.f,1.f) * rotate(pi) == uapprox3(-2.f,-3.f,1.f)); - CHECK(float4(2.f,3.f,4.f,1.f) * rotate(pi,{0.f,0.f,1.f}) == uapprox4(-2.f,-3.f,4.f,1.f)); - CHECK(float4(2.f,3.f,4.f,1.f) * rotate(pi,float3{0.f,0.f,1.f}) == uapprox4(-2.f,-3.f,4.f,1.f)); - CHECK(float4(2.f,3.f,4.f,1.f) * rotate(qrotate(pi,float3{0.f,0.f,1.f})) == uapprox4(-2.f,-3.f,4.f,1.f)); - - CHECK(float3(2.f,3.f,1.f) * rotate(rotate(pi_2),pi_2) == uapprox3(-2.f,-3.f,1.f)); - CHECK(float4(2.f,3.f,4.f,1.f) * rotate(rotate(pi_2,{0.f,0.f,1.f}),pi_2,{0.f,0.f,1.f}) == uapprox4(-2.f,-3.f,4.f,1.f)); - CHECK(float4(2.f,3.f,4.f,1.f) * rotate(rotate(pi_2,float3{0.f,0.f,1.f}),pi_2,float3{0.f,0.f,1.f}) == uapprox4(-2.f,-3.f,4.f,1.f)); - CHECK(float4(2.f,3.f,4.f,1.f) * rotate(rotate(qrotate(pi_2,float3{0.f,0.f,1.f})),qrotate(pi_2,float3{0.f,0.f,1.f})) == uapprox4(-2.f,-3.f,4.f,1.f)); + CHECK(fvec3(2.f,3.f,4.f) * rotate(pi,{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); + CHECK(fvec3(2.f,3.f,4.f) * rotate(pi,fvec3{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); + CHECK(fvec3(2.f,3.f,4.f) * rotate(qrotate(pi,fvec3{0.f,0.f,1.f})) == uapprox3(-2.f,-3.f,4.f)); + CHECK(fvec4(2.f,3.f,4.f,1.f) * rotate4(pi,{0.f,0.f,1.f}) == uapprox4(-2.f,-3.f,4.f,1.f)); + CHECK(fvec4(2.f,3.f,4.f,1.f) * rotate4(pi,fvec3{0.f,0.f,1.f}) == uapprox4(-2.f,-3.f,4.f,1.f)); + CHECK(fvec4(2.f,3.f,4.f,1.f) * rotate4(qrotate(pi,fvec3{0.f,0.f,1.f})) == uapprox4(-2.f,-3.f,4.f,1.f)); } - SUBCASE("scale") { - STATIC_CHECK(float3(2.f,3.f,1.f) * scale(float2{2.f,3.f}) == uapprox3(4.f,9.f,1.f)); - STATIC_CHECK(float4(2.f,3.f,4.f,1.f) * scale(float3{2.f,3.f,4.f}) == uapprox4(4.f,9.f,16.f,1.f)); - STATIC_CHECK(float4(2.f,3.f,4.f,1.f) * scale(float3{2.f,3.f,4.f}) == uapprox4(4.f,9.f,16.f,1.f)); + SUBCASE("scale2d") { + STATIC_CHECK(fvec2(2.f,3.f) * scale(fvec2{2.f,3.f}) == uapprox2(4.f,9.f)); + STATIC_CHECK(fvec3(2.f,3.f,1.f) * scale3(fvec2{2.f,3.f}) == uapprox3(4.f,9.f,1.f)); + } - STATIC_CHECK(float3(2.f,3.f,1.f) * scale(scale(float2{2.f,2.f}), {2.f,3.f}) == uapprox3(8.f,18.f,1.f)); - STATIC_CHECK(float4(2.f,3.f,4.f,1.f) * scale(scale(float3{2.f,2.f,2.f}), {2.f,3.f,4.f}) == uapprox4(8.f,18.f,32.f,1.f)); - STATIC_CHECK(float4(2.f,3.f,4.f,1.f) * scale(scale(float3{2.f,2.f,2.f}), float3{2.f,3.f,4.f}) == uapprox4(8.f,18.f,32.f,1.f)); + SUBCASE("scale3d") { + STATIC_CHECK(fvec3(2.f,3.f,4.f) * scale(fvec3{2.f,3.f,4.f}) == uapprox3(4.f,9.f,16.f)); + STATIC_CHECK(fvec4(2.f,3.f,4.f,1.f) * scale4(fvec3{2.f,3.f,4.f}) == uapprox4(4.f,9.f,16.f,1.f)); } SUBCASE("shear") { - STATIC_CHECK(float3(2.f,3.f,1.f) * shear_x(0.f) == uapprox3(2.f,3.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear_x(1.f) == uapprox3(5.f,3.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear_x(2.f) == uapprox3(8.f,3.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear_x(shear_x(1.f),1.f) == uapprox3(8.f,3.f,1.f)); - - STATIC_CHECK(float3(2.f,3.f,1.f) * shear_y(0.f) == uapprox3(2.f,3.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear_y(1.f) == uapprox3(2.f,5.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear_y(2.f) == uapprox3(2.f,7.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear_y(shear_y(1.f),1.f) == uapprox3(2.f,7.f,1.f)); - - STATIC_CHECK(float3(2.f,3.f,1.f) * shear(float2(0.f,0.f)) == uapprox3(2.f,3.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear(float2(2.f,0.f)) == uapprox3(8.f,3.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear(float2(0.f,2.f)) == uapprox3(2.f,7.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear(shear(float2(1.f,0.f)),float2(1.f,0.f)) == uapprox3(8.f,3.f,1.f)); - STATIC_CHECK(float3(2.f,3.f,1.f) * shear(shear(float2(0.f,1.f)),float2(0.f,1.f)) == uapprox3(2.f,7.f,1.f)); + STATIC_CHECK(fvec2(2.f,3.f) * shear(fvec2(0.f,0.f)) == uapprox2(2.f,3.f)); + STATIC_CHECK(fvec2(2.f,3.f) * shear(fvec2(2.f,0.f)) == uapprox2(8.f,3.f)); + STATIC_CHECK(fvec2(2.f,3.f) * shear(fvec2(0.f,2.f)) == uapprox2(2.f,7.f)); + STATIC_CHECK(fvec3(2.f,3.f,1.f) * shear3(fvec2(0.f,0.f)) == uapprox3(2.f,3.f,1.f)); + STATIC_CHECK(fvec3(2.f,3.f,1.f) * shear3(fvec2(2.f,0.f)) == uapprox3(8.f,3.f,1.f)); + STATIC_CHECK(fvec3(2.f,3.f,1.f) * shear3(fvec2(0.f,2.f)) == uapprox3(2.f,7.f,1.f)); } SUBCASE("matrix look_at") { - (void)look_at_lh(float3(1,2,3), float3(0,0,0), float3(0,2,0)); - (void)look_at_rh(float3(1,2,3), float3(0,0,0), float3(0,2,0)); + (void)look_at_lh(fvec3(1,2,3), fvec3(0,0,0), fvec3(0,2,0)); + (void)look_at_rh(fvec3(1,2,3), fvec3(0,0,0), fvec3(0,2,0)); } } @@ -284,83 +293,72 @@ TEST_CASE("vmath/ext/matrix_projections") { SUBCASE("orthographic") { CHECK(all(approx( orthographic_lh(800.f, 600.f, 5.f, 10.f), - scale(1.f,1.f,-1.f) * orthographic_rh(800.f, 600.f, 5.f, 10.f)))); + scale4(vec{1.f,1.f,-1.f}) * orthographic_rh(800.f, 600.f, 5.f, 10.f)))); CHECK(all(approx( orthographic_lh(100.f, 800.f, 50.f, 640.f, 5.f, 10.f), - scale(1.f,1.f,-1.f) * orthographic_rh(100.f, 800.f, 50.f, 640.f, 5.f, 10.f)))); + scale4(vec{1.f,1.f,-1.f}) * orthographic_rh(100.f, 800.f, 50.f, 640.f, 5.f, 10.f)))); } SUBCASE("perspective") { CHECK(all(approx( perspective_lh(800.f, 600.f, 5.f, 10.f), - scale(1.f,1.f,-1.f) * perspective_rh(800.f, 600.f, 5.f, 10.f)))); + scale4(vec{1.f,1.f,-1.f}) * perspective_rh(800.f, 600.f, 5.f, 10.f)))); CHECK(all(approx( perspective_fov_lh(1.5f, 1.3f, 0.f, 10.f), - scale(1.f,1.f,-1.f) * perspective_fov_rh(1.5f, 1.3f, 0.f, 10.f)))); + scale4(vec{1.f,1.f,-1.f}) * perspective_fov_rh(1.5f, 1.3f, 0.f, 10.f)))); CHECK(all(approx( perspective_lh(100.f, 800.f, 50.f, 600.f, 5.f, 10.f), - scale(1.f,1.f,-1.f) * perspective_rh(100.f, 800.f, 50.f, 600.f, 5.f, 10.f)))); + scale4(vec{1.f,1.f,-1.f}) * perspective_rh(100.f, 800.f, 50.f, 600.f, 5.f, 10.f)))); } } TEST_CASE("vmath/ext/vector_transform") { SUBCASE("angle") { - CHECK(angle(float2(2.f,0.f), float2(0.f,1.f)) == uapprox(radians(90.f))); - CHECK(angle(float2(0.f,3.f), float2(1.f,0.f)) == uapprox(radians(90.f))); - CHECK(angle(float2(0.5f,0.f), float2(-1.f,0.f)) == uapprox(radians(180.f))); - CHECK(angle(float2(-0.2f,0.f), float2(1.f,0.f)) == uapprox(radians(180.f))); - CHECK(angle(float3(0.f,2.f,0.f), float3(0.f,0.f,1.f)) == uapprox(radians(90.f))); - CHECK(angle(float3(0.f,0.f,3.f), float3(0.f,1.f,0.f)) == uapprox(radians(90.f))); + CHECK(angle(fvec2(2.f,0.f), fvec2(0.f,1.f)) == uapprox(radians(90.f))); + CHECK(angle(fvec2(0.f,3.f), fvec2(1.f,0.f)) == uapprox(radians(90.f))); + CHECK(angle(fvec2(0.5f,0.f), fvec2(-1.f,0.f)) == uapprox(radians(180.f))); + CHECK(angle(fvec2(-0.2f,0.f), fvec2(1.f,0.f)) == uapprox(radians(180.f))); + CHECK(angle(fvec3(0.f,2.f,0.f), fvec3(0.f,0.f,1.f)) == uapprox(radians(90.f))); + CHECK(angle(fvec3(0.f,0.f,3.f), fvec3(0.f,1.f,0.f)) == uapprox(radians(90.f))); } SUBCASE("rotate") { - CHECK(rotate(float2(2.f,0.f), radians(90.f)) == uapprox2(0.f,2.f)); - CHECK(rotate(float2(1.5f,0.f), radians(-90.f)) == uapprox2(0.f,-1.5f)); + CHECK(rotate(fvec2(2.f,0.f), radians(90.f)) == uapprox2(0.f,2.f)); + CHECK(rotate(fvec2(1.5f,0.f), radians(-90.f)) == uapprox2(0.f,-1.5f)); - CHECK(rotate_x(float3(0.f,1.5f,0.f), radians(90.f)) == uapprox3(0.f,0.f,1.5f)); - CHECK(rotate_y(float3(0.f,0.f,1.5f), radians(90.f)) == uapprox3(1.5f,0.f,0.f)); - CHECK(rotate_z(float3(1.5f,0.f,0.f), radians(90.f)) == uapprox3(0.f,1.5f,0.f)); + CHECK(rotate_x(fvec3(0.f,1.5f,0.f), radians(90.f)) == uapprox3(0.f,0.f,1.5f)); + CHECK(rotate_y(fvec3(0.f,0.f,1.5f), radians(90.f)) == uapprox3(1.5f,0.f,0.f)); + CHECK(rotate_z(fvec3(1.5f,0.f,0.f), radians(90.f)) == uapprox3(0.f,1.5f,0.f)); - CHECK(rotate(float3(1.5f,0.f,0.f), qrotate_z(radians(90.f))) == uapprox3(0.f,1.5f,0.f)); - CHECK(rotate(float3(1.5f,0.f,0.f), radians(90.f), float3(0,0,1)) == uapprox3(0.f,1.5f,0.f)); + CHECK(rotate(fvec3(1.5f,0.f,0.f), radians(90.f), fvec3(0,0,1)) == uapprox3(0.f,1.5f,0.f)); } SUBCASE("project") { - STATIC_CHECK(project(float2(2.f, 2.f), float2(0.f, 1.f)) == uapprox2(0.f, 2.f)); - STATIC_CHECK(project(float3(2.f, 2.f, 2.f), float3(0.f, 0.f, 1.f)) == uapprox3(0.f, 0.f, 2.f)); + STATIC_CHECK(project(fvec2(2.f, 2.f), fvec2(0.f, 1.f)) == uapprox2(0.f, 2.f)); + STATIC_CHECK(project(fvec3(2.f, 2.f, 2.f), fvec3(0.f, 0.f, 1.f)) == uapprox3(0.f, 0.f, 2.f)); } SUBCASE("perpendicular") { - STATIC_CHECK(perpendicular(float2(2.f, 2.f), float2(0.f, 1.f)) == uapprox2(2.f, 0.f)); - STATIC_CHECK(perpendicular(float3(2.f, 2.f, 2.f), float3(0.f, 0.f, 1.f)) == uapprox3(2.f, 2.f, 0.f)); + STATIC_CHECK(perpendicular(fvec2(2.f, 2.f), fvec2(0.f, 1.f)) == uapprox2(2.f, 0.f)); + STATIC_CHECK(perpendicular(fvec3(2.f, 2.f, 2.f), fvec3(0.f, 0.f, 1.f)) == uapprox3(2.f, 2.f, 0.f)); } } TEST_CASE("vmath/ext/quaternion_transform") { SUBCASE("qrotate(m)") { CHECK(all(approx( - vec{4.f,3.f,2.f,1.f} * rotate(qrotate(float3x3(rotate(0.f, vec{1.f,2.f,3.f})))), - vec{4.f,3.f,2.f,1.f} * rotate(0.f, vec{1.f,2.f,3.f}), 0.001f))); + vec{4.f,3.f,2.f} * rotate(qrotate(rotate(0.f, vec{1.f,2.f,3.f}))), + vec{4.f,3.f,2.f} * rotate(0.f, vec{1.f,2.f,3.f}), 0.001f))); CHECK(all(approx( - vec{4.f,3.f,2.f,1.f} * rotate(qrotate(float3x3(rotate(radians(12.5f), vec{1.f,2.f,3.f})))), - vec{4.f,3.f,2.f,1.f} * rotate(radians(12.5f), vec{1.f,2.f,3.f}), 0.001f))); + vec{4.f,3.f,2.f} * rotate(qrotate(rotate(radians(12.5f), vec{1.f,2.f,3.f}))), + vec{4.f,3.f,2.f} * rotate(radians(12.5f), vec{1.f,2.f,3.f}), 0.001f))); CHECK(all(approx( - vec{4.f,3.f,2.f,1.f} * rotate(qrotate(float3x3(rotate(radians(-190.5f), vec{1.f,2.f,3.f})))), - vec{4.f,3.f,2.f,1.f} * rotate(radians(-190.5f), vec{1.f,2.f,3.f}), 0.001f))); - } - - SUBCASE("qrotate(q, m)") { - CHECK(all(approx( - vec{4.f,3.f,2.f} * qrotate( - qrotate(float3x3(rotate(0.f, vec{1.f,2.f,3.f}))), - float3x3(rotate(0.f, vec{3.f,2.f,1.f}))), - vec{4.f,3.f,2.f} * - float3x3(rotate(0.f, vec{1.f,2.f,3.f})) * - float3x3(rotate(0.f, vec{3.f,2.f,1.f}))))); + vec{4.f,3.f,2.f} * rotate(qrotate(rotate(radians(-190.5f), vec{1.f,2.f,3.f}))), + vec{4.f,3.f,2.f} * rotate(radians(-190.5f), vec{1.f,2.f,3.f}), 0.001f))); } SUBCASE("qrotate(from, to)") { @@ -371,47 +369,29 @@ TEST_CASE("vmath/ext/quaternion_transform") { CHECK(vec{-2.f,1.f,3.f} * qrotate(vec{-2.f,1.f,3.f}, vec{1.f,2.f,3.f}) == uapprox3(1.f,2.f,3.f)); } - SUBCASE("qrotate(q, from, to)") { - CHECK(vec{1.f,2.f,3.f} * - inverse(qrotate(float3x3(rotate(radians(12.f), {2.f,2.f,2.f})))) * - qrotate( - qrotate(float3x3(rotate(radians(12.f), {2.f,2.f,2.f}))), - vec{1.f,2.f,3.f}, - vec{-2.f,1.f,3.f}) == uapprox3(vec{-2.f,1.f,3.f})); - } - SUBCASE("qrotate(angle, axis)") { CHECK(all(approx( - rotate(12.3f, float3(1.f,2.f,3.f)), - rotate(qrotate(12.3f, float3(1.f,2.f,3.f)) * 2.f)))); + rotate(12.3f, fvec3(1.f,2.f,3.f)), + rotate(qrotate(12.3f, fvec3(1.f,2.f,3.f)) * 2.f)))); - CHECK(float3(0.f,1.f,0.f) * qrotate_x(pi_2) == uapprox3(0.f,0.f,1.f)); - CHECK(float3(0.f,0.f,1.f) * qrotate_y(pi_2) == uapprox3(1.f,0.f,0.f)); - CHECK(float3(1.f,0.f,0.f) * qrotate_z(pi_2) == uapprox3(0.f,1.f,0.f)); + CHECK(fvec3(0.f,1.f,0.f) * qrotate_x(pi_2) == uapprox3(0.f,0.f,1.f)); + CHECK(fvec3(0.f,0.f,1.f) * qrotate_y(pi_2) == uapprox3(1.f,0.f,0.f)); + CHECK(fvec3(1.f,0.f,0.f) * qrotate_z(pi_2) == uapprox3(0.f,1.f,0.f)); - CHECK(float3(2.f,3.f,4.f) * qrotate(pi,{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); - CHECK(float3(2.f,3.f,4.f) * qrotate(pi,float3{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); + CHECK(fvec3(2.f,3.f,4.f) * qrotate(pi,{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); + CHECK(fvec3(2.f,3.f,4.f) * qrotate(pi,fvec3{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); CHECK(qrotate_x(12.3f) == qrotate(12.3f, unit3_x * 2.f)); CHECK(qrotate_y(12.3f) == qrotate(12.3f, unit3_y * 2.f)); CHECK(qrotate_z(12.3f) == qrotate(12.3f, unit3_z * 2.f)); } - SUBCASE("qrotate(q, angle, axis)") { - CHECK(float3(0.f,1.f,0.f) * qrotate_x(qrotate_x(pi_4),pi_4) == uapprox3(0.f,0.f,1.f)); - CHECK(float3(0.f,0.f,1.f) * qrotate_y(qrotate_y(pi_4),pi_4) == uapprox3(1.f,0.f,0.f)); - CHECK(float3(1.f,0.f,0.f) * qrotate_z(qrotate_z(pi_4),pi_4) == uapprox3(0.f,1.f,0.f)); - - CHECK(float3(2.f,3.f,4.f) * qrotate(qrotate(pi_2,{0.f,0.f,1.f}),pi_2,{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); - CHECK(float3(2.f,3.f,4.f) * qrotate(qrotate(pi_2,float3{0.f,0.f,1.f}),pi_2,float3{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); - } - SUBCASE("qlook_at") { CHECK(all(approx( - qlook_at_lh(float3(1.f,2.f,3.f), float3(0,1,0)), - qrotate(float3x3(look_at_lh(float3(), float3(1.f,2.f,3.f), float3(0,1,0))))))); + qlook_at_lh(fvec3(1.f,2.f,3.f), fvec3(0,1,0)), + qrotate(fmat3(look_at_lh(fvec3(), fvec3(1.f,2.f,3.f), fvec3(0,1,0))))))); CHECK(all(approx( - qlook_at_rh(float3(1.f,2.f,3.f), float3(0,1,0)), - qrotate(float3x3(look_at_rh(float3(), float3(1.f,2.f,3.f), float3(0,1,0))))))); + qlook_at_rh(fvec3(1.f,2.f,3.f), fvec3(0,1,0)), + qrotate(fmat3(look_at_rh(fvec3(), fvec3(1.f,2.f,3.f), fvec3(0,1,0))))))); } } diff --git a/untests/vmath_fix_tests.cpp b/untests/vmath_fix_tests.cpp index 8e33736..5c89095 100644 --- a/untests/vmath_fix_tests.cpp +++ b/untests/vmath_fix_tests.cpp @@ -383,31 +383,35 @@ namespace vmath_hpp namespace vmath_hpp { - template fix4x4f translate(fix x, fix y, fix z); - template fix4x4f translate(const fix4x4f&, fix, fix, fix); + template fix4x4f trs(const fix3f&, const fix3x3f&); + template fix4x4f trs(const fix3f&, const fix3x3f&, const fix3f&); + template fix4x4f trs(const fix3f&, const qfix&); + template fix4x4f trs(const fix3f&, const qfix&, const fix3f&); + template fix4x4f translate(const fix3f&); - template fix4x4f translate(const fix4x4f&, const fix3f&); - template fix4x4f rotate(const qfix&); - template fix4x4f rotate(const fix4x4f&, const qfix&); - template fix4x4f rotate(fix, const fix3f&); - template fix4x4f rotate(const fix4x4f&, fix, const fix3f&); + template fix3x3f rotate(const qfix&); + template fix4x4f rotate4(const qfix&); - template fix4x4f rotate_x(fix); - template fix4x4f rotate_x(const fix4x4f&, fix); + template fix3x3f rotate(fix, const fix3f&); + template fix4x4f rotate4(fix, const fix3f&); - template fix4x4f rotate_y(fix); - template fix4x4f rotate_y(const fix4x4f&, fix); + template fix3x3f rotate_x(fix); + template fix4x4f rotate4_x(fix); - template fix4x4f rotate_z(fix); - template fix4x4f rotate_z(const fix4x4f&, fix); + template fix3x3f rotate_y(fix); + template fix4x4f rotate4_y(fix); - template fix4x4f scale(fix, fix, fix); - template fix4x4f scale(const fix4x4f&, fix, fix, fix); - template fix4x4f scale(const fix3f&); - template fix4x4f scale(const fix4x4f&, const fix3f&); + template fix3x3f rotate_z(fix); + template fix4x4f rotate4_z(fix); + template fix3x3f scale(const fix3f&); + template fix4x4f scale4(const fix3f&); + + template fix3x3f look_at_lh(const fix3f&, const fix3f&); template fix4x4f look_at_lh(const fix3f&, const fix3f&, const fix3f&); + + template fix3x3f look_at_rh(const fix3f&, const fix3f&); template fix4x4f look_at_rh(const fix3f&, const fix3f&, const fix3f&); } @@ -417,29 +421,19 @@ namespace vmath_hpp namespace vmath_hpp { - template fix3x3f translate(fix, fix); - template fix3x3f translate(const fix3x3f&, fix, fix); + template fix3x3f trs(const fix2f&, const fix2x2f&); + template fix3x3f trs(const fix2f&, const fix2x2f&, const fix2f&); + template fix3x3f translate(const fix2f&); - template fix3x3f translate(const fix3x3f&, const fix2f&); - template fix3x3f rotate(fix); - template fix3x3f rotate(const fix3x3f&, fix); + template fix2x2f rotate(fix); + template fix3x3f rotate3(fix); - template fix3x3f scale(fix, fix); - template fix3x3f scale(const fix3x3f&, fix, fix); - template fix3x3f scale(const fix2f&); - template fix3x3f scale(const fix3x3f&, const fix2f&); + template fix2x2f scale(const fix2f&); + template fix3x3f scale3(const fix2f&); - template fix3x3f shear(fix, fix); - template fix3x3f shear(const fix3x3f&, fix, fix); - template fix3x3f shear(const fix2f&); - template fix3x3f shear(const fix3x3f&, const fix2f&); - - template fix3x3f shear_x(fix); - template fix3x3f shear_x(const fix3x3f&, fix); - - template fix3x3f shear_y(fix); - template fix3x3f shear_y(const fix3x3f&, fix); + template fix2x2f shear(const fix2f&); + template fix3x3f shear3(const fix2f&); } // @@ -475,7 +469,6 @@ namespace vmath_hpp template fix3f rotate_x(const fix3f&, fix); template fix3f rotate_y(const fix3f&, fix); template fix3f rotate_z(const fix3f&, fix); - template fix3f rotate(const fix3f&, const qfix&); template fix3f rotate(const fix3f&, fix, const fix3f&); template fix3f project(const fix3f&, const fix3f&); template fix3f perpendicular(const fix3f&, const fix3f&); @@ -488,22 +481,12 @@ namespace vmath_hpp namespace vmath_hpp { template qfix qrotate(const fix3x3f&); - template qfix qrotate(const qfix&, const fix3x3f&); - template qfix qrotate(const fix3f&, const fix3f&); - template qfix qrotate(const qfix&, const fix3f&, const fix3f&); - template qfix qrotate(fix, const fix3f&); - template qfix qrotate(const qfix&, fix, const fix3f&); template qfix qrotate_x(fix); - template qfix qrotate_x(const qfix&, fix); - template qfix qrotate_y(fix); - template qfix qrotate_y(const qfix&, fix); - template qfix qrotate_z(fix); - template qfix qrotate_z(const qfix&, fix); template qfix qlook_at_lh(const fix3f&, const fix3f&); template qfix qlook_at_rh(const fix3f&, const fix3f&); @@ -942,42 +925,42 @@ TEST_CASE("vmath/fix_units") { STATIC_CHECK(unit4_w> == fix4f{fix(0.f),fix(0.f),fix(0.f),fix(1.f)}); } { - STATIC_CHECK(zero2x2> == fix2x2f{ + STATIC_CHECK(mzero2> == fix2x2f{ fix(0.f),fix(0.f), fix(0.f),fix(0.f)}); - STATIC_CHECK(zero3x3> == fix3x3f{ + STATIC_CHECK(mzero3> == fix3x3f{ fix(0.f),fix(0.f),fix(0.f), fix(0.f),fix(0.f),fix(0.f), fix(0.f),fix(0.f),fix(0.f)}); - STATIC_CHECK(zero4x4> == fix4x4f{ + STATIC_CHECK(mzero4> == fix4x4f{ fix(0.f),fix(0.f),fix(0.f),fix(0.f), fix(0.f),fix(0.f),fix(0.f),fix(0.f), fix(0.f),fix(0.f),fix(0.f),fix(0.f), fix(0.f),fix(0.f),fix(0.f),fix(0.f)}); } { - STATIC_CHECK(unit2x2> == fix2x2f{ + STATIC_CHECK(munit2> == fix2x2f{ fix(1.f),fix(1.f), fix(1.f),fix(1.f)}); - STATIC_CHECK(unit3x3> == fix3x3f{ + STATIC_CHECK(munit3> == fix3x3f{ fix(1.f),fix(1.f),fix(1.f), fix(1.f),fix(1.f),fix(1.f), fix(1.f),fix(1.f),fix(1.f)}); - STATIC_CHECK(unit4x4> == fix4x4f{ + STATIC_CHECK(munit4> == fix4x4f{ fix(1.f),fix(1.f),fix(1.f),fix(1.f), fix(1.f),fix(1.f),fix(1.f),fix(1.f), fix(1.f),fix(1.f),fix(1.f),fix(1.f), fix(1.f),fix(1.f),fix(1.f),fix(1.f)}); } { - STATIC_CHECK(identity2x2> == fix2x2f{ + STATIC_CHECK(midentity2> == fix2x2f{ fix(1.f),fix(0.f), fix(0.f),fix(1.f)}); - STATIC_CHECK(identity3x3> == fix3x3f{ + STATIC_CHECK(midentity3> == fix3x3f{ fix(1.f),fix(0.f),fix(0.f), fix(0.f),fix(1.f),fix(0.f), fix(0.f),fix(0.f),fix(1.f)}); - STATIC_CHECK(identity4x4> == fix4x4f{ + STATIC_CHECK(midentity4> == fix4x4f{ fix(1.f),fix(0.f),fix(0.f),fix(0.f), fix(0.f),fix(1.f),fix(0.f),fix(0.f), fix(0.f),fix(0.f),fix(1.f),fix(0.f), diff --git a/untests/vmath_mat_fun_tests.cpp b/untests/vmath_mat_fun_tests.cpp index 01378ce..ba6d96e 100644 --- a/untests/vmath_mat_fun_tests.cpp +++ b/untests/vmath_mat_fun_tests.cpp @@ -31,241 +31,241 @@ namespace TEST_CASE("vmath/mat_fun") { SUBCASE("operators") { - STATIC_CHECK(+int2x2(1,-2,3,-4) == int2x2(1,-2,3,-4)); - STATIC_CHECK(-int2x2(1,-2,3,-4) == int2x2(-1,2,-3,4)); - STATIC_CHECK(~uint2x2(0xF0F0F0F0,0x0F0F0F0F,0xF0F0F0F0,0x0F0F0F0F) == uint2x2(0x0F0F0F0F,0xF0F0F0F0,0x0F0F0F0F,0xF0F0F0F0)); - STATIC_CHECK((!int2x2(-1,0,1,2)) == bool2x2(false,true,false,false)); + STATIC_CHECK(+imat2(1,-2,3,-4) == imat2(1,-2,3,-4)); + STATIC_CHECK(-imat2(1,-2,3,-4) == imat2(-1,2,-3,4)); + STATIC_CHECK(~umat2(0xF0F0F0F0,0x0F0F0F0F,0xF0F0F0F0,0x0F0F0F0F) == umat2(0x0F0F0F0F,0xF0F0F0F0,0x0F0F0F0F,0xF0F0F0F0)); + STATIC_CHECK((!imat2(-1,0,1,2)) == bmat2(false,true,false,false)); - STATIC_CHECK(int2x2(1,2,3,4) + 2 == int2x2(3,4,5,6)); - STATIC_CHECK(int2x2(1,2,3,4) - 2 == int2x2(-1,0,1,2)); - STATIC_CHECK(int2x2(1,2,3,4) * 2 == int2x2(2,4,6,8)); - STATIC_CHECK(int2x2(1,2,3,4) / 2 == int2x2(0,1,1,2)); - STATIC_CHECK((int2x2(11,12,11,12) & 6) == int2x2(2,4,2,4)); - STATIC_CHECK((int2x2(11,12,11,12) | 6) == int2x2(15,14,15,14)); - STATIC_CHECK((int2x2(11,12,11,12) ^ 6) == int2x2(13,10,13,10)); - STATIC_CHECK((int2x2(1,0,1,0) && 1) == bool2x2(1,0,1,0)); - STATIC_CHECK((int2x2(1,0,1,0) || 1) == bool2x2(1,1,1,1)); + STATIC_CHECK(imat2(1,2,3,4) + 2 == imat2(3,4,5,6)); + STATIC_CHECK(imat2(1,2,3,4) - 2 == imat2(-1,0,1,2)); + STATIC_CHECK(imat2(1,2,3,4) * 2 == imat2(2,4,6,8)); + STATIC_CHECK(imat2(1,2,3,4) / 2 == imat2(0,1,1,2)); + STATIC_CHECK((imat2(11,12,11,12) & 6) == imat2(2,4,2,4)); + STATIC_CHECK((imat2(11,12,11,12) | 6) == imat2(15,14,15,14)); + STATIC_CHECK((imat2(11,12,11,12) ^ 6) == imat2(13,10,13,10)); + STATIC_CHECK((imat2(1,0,1,0) && 1) == bmat2(1,0,1,0)); + STATIC_CHECK((imat2(1,0,1,0) || 1) == bmat2(1,1,1,1)); - STATIC_CHECK(4 + int2x2(1,2,3,4) == int2x2(5,6,7,8)); - STATIC_CHECK(4 - int2x2(1,2,3,4) == int2x2(3,2,1,0)); - STATIC_CHECK(4 * int2x2(1,2,3,4) == int2x2(4,8,12,16)); - STATIC_CHECK(4 / int2x2(1,2,3,4) == int2x2(4,2,1,1)); - STATIC_CHECK((6 &int2x2(11,12,11,12)) == int2x2(2,4,2,4)); - STATIC_CHECK((6 |int2x2(11,12,11,12)) == int2x2(15,14,15,14)); - STATIC_CHECK((6 ^ int2x2(11,12,11,12)) == int2x2(13,10,13,10)); - STATIC_CHECK((1 && int2x2(1,0,1,0)) == bool2x2(1,0,1,0)); - STATIC_CHECK((1 || int2x2(1,0,1,0)) == bool2x2(1,1,1,1)); + STATIC_CHECK(4 + imat2(1,2,3,4) == imat2(5,6,7,8)); + STATIC_CHECK(4 - imat2(1,2,3,4) == imat2(3,2,1,0)); + STATIC_CHECK(4 * imat2(1,2,3,4) == imat2(4,8,12,16)); + STATIC_CHECK(4 / imat2(1,2,3,4) == imat2(4,2,1,1)); + STATIC_CHECK((6 &imat2(11,12,11,12)) == imat2(2,4,2,4)); + STATIC_CHECK((6 |imat2(11,12,11,12)) == imat2(15,14,15,14)); + STATIC_CHECK((6 ^ imat2(11,12,11,12)) == imat2(13,10,13,10)); + STATIC_CHECK((1 && imat2(1,0,1,0)) == bmat2(1,0,1,0)); + STATIC_CHECK((1 || imat2(1,0,1,0)) == bmat2(1,1,1,1)); - STATIC_CHECK(int2x2(1,2,3,4) + int2x2(5,6,7,8) == int2x2(6,8,10,12)); - STATIC_CHECK(int2x2(1,2,3,4) - int2x2(5,6,7,8) == int2x2(-4,-4,-4,-4)); + STATIC_CHECK(imat2(1,2,3,4) + imat2(5,6,7,8) == imat2(6,8,10,12)); + STATIC_CHECK(imat2(1,2,3,4) - imat2(5,6,7,8) == imat2(-4,-4,-4,-4)); - STATIC_CHECK(int2x2() * int2x2() == int2x2()); - STATIC_CHECK(int3x3() * int3x3() == int3x3()); + STATIC_CHECK(imat2() * imat2() == imat2()); + STATIC_CHECK(imat3() * imat3() == imat3()); - STATIC_CHECK(int2(1,2) * int2x2() == int2(1,2)); - STATIC_CHECK(int3(1,2,3) * int3x3() == int3(1,2,3)); - STATIC_CHECK(int4(1,2,3,4) * int4x4() == int4(1,2,3,4)); + STATIC_CHECK(ivec2(1,2) * imat2() == ivec2(1,2)); + STATIC_CHECK(ivec3(1,2,3) * imat3() == ivec3(1,2,3)); + STATIC_CHECK(ivec4(1,2,3,4) * imat4() == ivec4(1,2,3,4)); - STATIC_CHECK((int2x2(6,7,6,7) & int2x2(11,12,11,12)) == int2x2(2,4,2,4)); - STATIC_CHECK((int2x2(6,7,6,7) | int2x2(11,12,11,12)) == int2x2(15,15,15,15)); - STATIC_CHECK((int2x2(6,7,6,7) ^ int2x2(11,12,11,12)) == int2x2(13,11,13,11)); - STATIC_CHECK((int2x2(0,1,0,1) && int2x2(1,0,1,0)) == bool2x2(0,0,0,0)); - STATIC_CHECK((int2x2(0,1,0,1) || int2x2(1,0,1,0)) == bool2x2(1,1,1,1)); + STATIC_CHECK((imat2(6,7,6,7) & imat2(11,12,11,12)) == imat2(2,4,2,4)); + STATIC_CHECK((imat2(6,7,6,7) | imat2(11,12,11,12)) == imat2(15,15,15,15)); + STATIC_CHECK((imat2(6,7,6,7) ^ imat2(11,12,11,12)) == imat2(13,11,13,11)); + STATIC_CHECK((imat2(0,1,0,1) && imat2(1,0,1,0)) == bmat2(0,0,0,0)); + STATIC_CHECK((imat2(0,1,0,1) || imat2(1,0,1,0)) == bmat2(1,1,1,1)); { - int2x2 v{1,2,3,4}; + imat2 v{1,2,3,4}; CHECK(&v == &(++v)); - CHECK(v == int2x2{2,3,4,5}); + CHECK(v == imat2{2,3,4,5}); CHECK(&v == &(--v)); - CHECK(v == int2x2{1,2,3,4}); + CHECK(v == imat2{1,2,3,4}); } { - int2x2 v{1,2,3,4}; - CHECK(v++ == int2x2{1,2,3,4}); - CHECK(v == int2x2{2,3,4,5}); - CHECK(v-- == int2x2{2,3,4,5}); - CHECK(v == int2x2{1,2,3,4}); + imat2 v{1,2,3,4}; + CHECK(v++ == imat2{1,2,3,4}); + CHECK(v == imat2{2,3,4,5}); + CHECK(v-- == imat2{2,3,4,5}); + CHECK(v == imat2{1,2,3,4}); } { - int2x2 v{1,2,3,4}; + imat2 v{1,2,3,4}; CHECK(&v == &(v += 3)); - CHECK(v == int2x2{4,5,6,7}); - CHECK(&v == &(v += int2x2{1,2,3,4})); - CHECK(v == int2x2{5,7,9,11}); + CHECK(v == imat2{4,5,6,7}); + CHECK(&v == &(v += imat2{1,2,3,4})); + CHECK(v == imat2{5,7,9,11}); } { - int2x2 v{4,5,6,7}; + imat2 v{4,5,6,7}; CHECK(&v == &(v -= 3)); - CHECK(v == int2x2{1,2,3,4}); - CHECK(&v == &(v -= int2x2{2,4,6,8})); - CHECK(v == int2x2{-1,-2,-3,-4}); + CHECK(v == imat2{1,2,3,4}); + CHECK(&v == &(v -= imat2{2,4,6,8})); + CHECK(v == imat2{-1,-2,-3,-4}); } { - int2x2 v{1,2,3,4}; + imat2 v{1,2,3,4}; CHECK(&v == &(v *= 3)); - CHECK(v == int2x2{3,6,9,12}); + CHECK(v == imat2{3,6,9,12}); } { - int4 v{0, 0, 0, 1}; - CHECK(&v == &(v *= translate(int3{1,2,3}))); + ivec4 v{0, 0, 0, 1}; + CHECK(&v == &(v *= translate(ivec3{1,2,3}))); CHECK(v == uapprox4(1,2,3,1)); } { - int3 v{1, 2, 3}; - CHECK(&v == &(v *= int3x3(scale(int3{2,3,4})))); - CHECK(v == int3(2,6,12)); + ivec3 v{1, 2, 3}; + CHECK(&v == &(v *= imat3(scale(ivec3{2,3,4})))); + CHECK(v == ivec3(2,6,12)); } { - int4x4 v = translate(int3{1, 2, 3}); - CHECK(&v == &(v *= translate(int3{1,2,3}))); - CHECK(v == translate(int3{2,4,6})); + imat4 v = translate(ivec3{1, 2, 3}); + CHECK(&v == &(v *= translate(ivec3{1,2,3}))); + CHECK(v == translate(ivec3{2,4,6})); } { - int3x3 v = int3x3(scale(int3{1, 2, 3})); - CHECK(&v == &(v *= int3x3(scale(int3{2,3,4})))); - CHECK(v == int3x3(scale(int3{2,6,12}))); + imat3 v = imat3(scale(ivec3{1, 2, 3})); + CHECK(&v == &(v *= imat3(scale(ivec3{2,3,4})))); + CHECK(v == imat3(scale(ivec3{2,6,12}))); } { - int2x2 v1{11,12,11,12}; + imat2 v1{11,12,11,12}; CHECK(&v1 == &(v1 &= 6)); - CHECK(v1 == int2x2(2,4,2,4)); - int2x2 v2{6,7,6,7}; - CHECK(&v2 == &(v2 &= int2x2(11,12,11,12))); - CHECK(v2 == int2x2(2,4,2,4)); + CHECK(v1 == imat2(2,4,2,4)); + imat2 v2{6,7,6,7}; + CHECK(&v2 == &(v2 &= imat2(11,12,11,12))); + CHECK(v2 == imat2(2,4,2,4)); } { - int2x2 v1{11,12,11,12}; + imat2 v1{11,12,11,12}; CHECK(&v1 == &(v1 |= 6)); - CHECK(v1 == int2x2(15,14,15,14)); - int2x2 v2{6,7,6,7}; - CHECK(&v2 == &(v2 |= int2x2(11,12,11,12))); - CHECK(v2 == int2x2(15,15,15,15)); + CHECK(v1 == imat2(15,14,15,14)); + imat2 v2{6,7,6,7}; + CHECK(&v2 == &(v2 |= imat2(11,12,11,12))); + CHECK(v2 == imat2(15,15,15,15)); } { - int2x2 v1{11,12,11,12}; + imat2 v1{11,12,11,12}; CHECK(&v1 == &(v1 ^= 6)); - CHECK(v1 == int2x2(13,10,13,10)); - int2x2 v2{6,7,6,7}; - CHECK(&v2 == &(v2 ^= int2x2(11,12,11,12))); - CHECK(v2 == int2x2(13,11,13,11)); + CHECK(v1 == imat2(13,10,13,10)); + imat2 v2{6,7,6,7}; + CHECK(&v2 == &(v2 ^= imat2(11,12,11,12))); + CHECK(v2 == imat2(13,11,13,11)); } } SUBCASE("Operators2") { - STATIC_CHECK(int2x2{} + 0.0 == double2x2{}); - STATIC_CHECK(0.0 + int2x2{} == double2x2{}); - STATIC_CHECK(int2x2{} + double2x2{} == double2x2{2.0}); - STATIC_CHECK(double2x2{} + int2x2{} == double2x2{2.0}); + STATIC_CHECK(imat2{} + 0.0 == dmat2{}); + STATIC_CHECK(0.0 + imat2{} == dmat2{}); + STATIC_CHECK(imat2{} + dmat2{} == dmat2{2.0}); + STATIC_CHECK(dmat2{} + imat2{} == dmat2{2.0}); - STATIC_CHECK(int2x2{} - 0.0 == double2x2{}); - STATIC_CHECK(0.0 - int2x2{} == double2x2{-1.0}); - STATIC_CHECK(int2x2{} - double2x2{} == double2x2{0.0}); - STATIC_CHECK(double2x2{} - int2x2{} == double2x2{0.0}); + STATIC_CHECK(imat2{} - 0.0 == dmat2{}); + STATIC_CHECK(0.0 - imat2{} == dmat2{-1.0}); + STATIC_CHECK(imat2{} - dmat2{} == dmat2{0.0}); + STATIC_CHECK(dmat2{} - imat2{} == dmat2{0.0}); - STATIC_CHECK(int2x2{} * 1.0 == double2x2{}); - STATIC_CHECK(0.0 * int2x2{1} == double2x2{0.0}); - STATIC_CHECK(int2{} * double2x2{} == double2{}); - STATIC_CHECK(int2x2{} * double2x2{} == double2x2{}); - STATIC_CHECK(double2x2{} * int2x2{1} == double2x2{}); + STATIC_CHECK(imat2{} * 1.0 == dmat2{}); + STATIC_CHECK(0.0 * imat2{1} == dmat2{0.0}); + STATIC_CHECK(ivec2{} * dmat2{} == dvec2{}); + STATIC_CHECK(imat2{} * dmat2{} == dmat2{}); + STATIC_CHECK(dmat2{} * imat2{1} == dmat2{}); - STATIC_CHECK(int2x2{} / 1.0 == double2x2{}); - STATIC_CHECK(0.0 / int2x2{1,1,1,1} == double2x2{0.0}); + STATIC_CHECK(imat2{} / 1.0 == dmat2{}); + STATIC_CHECK(0.0 / imat2{1,1,1,1} == dmat2{0.0}); } SUBCASE("Conversions2") { { - STATIC_CHECK(double2x2(1.0) == double2x2(1)); - STATIC_CHECK(double2x2(int2(1,2)) == double2x2(double2(1,2))); - STATIC_CHECK(double2x2(int2(1,2),float2(3,4)) == double2x2(1,2,3,4)); + STATIC_CHECK(dmat2(1.0) == dmat2(1)); + STATIC_CHECK(dmat2(ivec2(1,2)) == dmat2(dvec2(1,2))); + STATIC_CHECK(dmat2(ivec2(1,2),fvec2(3,4)) == dmat2(1,2,3,4)); - STATIC_CHECK(double2x2(int2x2(1)) == double2x2(1)); - STATIC_CHECK(double2x2(int3x3(1)) == double2x2(1)); - STATIC_CHECK(double2x2(int4x4(1)) == double2x2(1)); + STATIC_CHECK(dmat2(imat2(1)) == dmat2(1)); + STATIC_CHECK(dmat2(imat3(1)) == dmat2(1)); + STATIC_CHECK(dmat2(imat4(1)) == dmat2(1)); } { - STATIC_CHECK(double3x3(1.0) == double3x3(1)); - STATIC_CHECK(double3x3(int3(1,2,3)) == double3x3(double3(1,2,3))); - STATIC_CHECK(double3x3(int3(1,2,3),float3(2,3,4),uint3(3,4,5)) == double3x3(1,2,3,2,3,4,3,4,5)); + STATIC_CHECK(dmat3(1.0) == dmat3(1)); + STATIC_CHECK(dmat3(ivec3(1,2,3)) == dmat3(dvec3(1,2,3))); + STATIC_CHECK(dmat3(ivec3(1,2,3),fvec3(2,3,4),uvec3(3,4,5)) == dmat3(1,2,3,2,3,4,3,4,5)); - STATIC_CHECK(double3x3(int2x2(1),uint2(2)) == double3x3(double2x2(1),double2(2))); + STATIC_CHECK(dmat3(imat2(1),uvec2(2)) == dmat3(dmat2(1),dvec2(2))); - STATIC_CHECK(double3x3(int2x2(1)) == double3x3(1)); - STATIC_CHECK(double3x3(int3x3(1)) == double3x3(1)); - STATIC_CHECK(double3x3(int4x4(1)) == double3x3(1)); + STATIC_CHECK(dmat3(imat2(1)) == dmat3(1)); + STATIC_CHECK(dmat3(imat3(1)) == dmat3(1)); + STATIC_CHECK(dmat3(imat4(1)) == dmat3(1)); } { - STATIC_CHECK(double4x4(1.0) == double4x4(1)); - STATIC_CHECK(double4x4(int4(1,2,3,4)) == double4x4(double4(1,2,3,4))); - STATIC_CHECK(double4x4(int4(1,2,3,4),float4(2,3,4,5),uint4(3,4,5,6),int4(4,5,6,7)) == double4x4(1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7)); + STATIC_CHECK(dmat4(1.0) == dmat4(1)); + STATIC_CHECK(dmat4(ivec4(1,2,3,4)) == dmat4(dvec4(1,2,3,4))); + STATIC_CHECK(dmat4(ivec4(1,2,3,4),fvec4(2,3,4,5),uvec4(3,4,5,6),ivec4(4,5,6,7)) == dmat4(1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7)); - STATIC_CHECK(double4x4(int3x3(1),uint3(2)) == double4x4(double3x3(1),double3(2))); + STATIC_CHECK(dmat4(imat3(1),uvec3(2)) == dmat4(dmat3(1),dvec3(2))); - STATIC_CHECK(double4x4(int2x2(1)) == double4x4(1)); - STATIC_CHECK(double4x4(int3x3(1)) == double4x4(1)); - STATIC_CHECK(double4x4(int4x4(1)) == double4x4(1)); + STATIC_CHECK(dmat4(imat2(1)) == dmat4(1)); + STATIC_CHECK(dmat4(imat3(1)) == dmat4(1)); + STATIC_CHECK(dmat4(imat4(1)) == dmat4(1)); } } SUBCASE("relational functions") { - STATIC_CHECK_FALSE(any(bool2x2(false, false, false, false))); - STATIC_CHECK(any(bool2x2(true, false, true, false))); - STATIC_CHECK(any(bool2x2(false, true, false, true))); - STATIC_CHECK(any(bool2x2(true, true, true, true))); + STATIC_CHECK_FALSE(any(bmat2(false, false, false, false))); + STATIC_CHECK(any(bmat2(true, false, true, false))); + STATIC_CHECK(any(bmat2(false, true, false, true))); + STATIC_CHECK(any(bmat2(true, true, true, true))); - STATIC_CHECK_FALSE(any(int2x2(0, 0, 0, 0))); - STATIC_CHECK(any(int2x2(1, 0, 1, 0))); - STATIC_CHECK(any(int2x2(0, 1, 0, 1))); - STATIC_CHECK(any(int2x2(1, 1, 1, 1))); + STATIC_CHECK_FALSE(any(imat2(0, 0, 0, 0))); + STATIC_CHECK(any(imat2(1, 0, 1, 0))); + STATIC_CHECK(any(imat2(0, 1, 0, 1))); + STATIC_CHECK(any(imat2(1, 1, 1, 1))); - STATIC_CHECK_FALSE(all(bool2x2(false, false, false, false))); - STATIC_CHECK_FALSE(all(bool2x2(true, false, true, false))); - STATIC_CHECK_FALSE(all(bool2x2(false, true, false, true))); - STATIC_CHECK(all(bool2x2(true, true, true, true))); + STATIC_CHECK_FALSE(all(bmat2(false, false, false, false))); + STATIC_CHECK_FALSE(all(bmat2(true, false, true, false))); + STATIC_CHECK_FALSE(all(bmat2(false, true, false, true))); + STATIC_CHECK(all(bmat2(true, true, true, true))); - STATIC_CHECK_FALSE(all(int2x2(0, 0, 0, 0))); - STATIC_CHECK_FALSE(all(int2x2(1, 0, 1, 0))); - STATIC_CHECK_FALSE(all(int2x2(0, 1, 0, 1))); - STATIC_CHECK(all(int2x2(1, 1, 1, 1))); + STATIC_CHECK_FALSE(all(imat2(0, 0, 0, 0))); + STATIC_CHECK_FALSE(all(imat2(1, 0, 1, 0))); + STATIC_CHECK_FALSE(all(imat2(0, 1, 0, 1))); + STATIC_CHECK(all(imat2(1, 1, 1, 1))); - STATIC_CHECK(approx(int2x2(1,1,1,1), int2x2(0,1,2,3)) == bool2x2(false, true, false, false)); - STATIC_CHECK(approx(int2x2(1,1,1,1), int2x2(0,1,2,3), 0) == bool2x2(false, true, false, false)); - STATIC_CHECK(approx(int2x2(1,1,1,1), int2x2(0,1,2,3), 1) == bool2x2(true, true, true, false)); - STATIC_CHECK(approx(int2x2(1,1,1,1), int2x2(0,1,2,3), 2) == bool2x2(true, true, true, true)); + STATIC_CHECK(approx(imat2(1,1,1,1), imat2(0,1,2,3)) == bmat2(false, true, false, false)); + STATIC_CHECK(approx(imat2(1,1,1,1), imat2(0,1,2,3), 0) == bmat2(false, true, false, false)); + STATIC_CHECK(approx(imat2(1,1,1,1), imat2(0,1,2,3), 1) == bmat2(true, true, true, false)); + STATIC_CHECK(approx(imat2(1,1,1,1), imat2(0,1,2,3), 2) == bmat2(true, true, true, true)); - STATIC_CHECK(less(int2x2(1,1,1,1), int2x2(0,1,2,3)) == bool2x2(false, false, true, true)); - STATIC_CHECK(less_equal(int2x2(1,1,1,1), int2x2(0,1,2,3)) == bool2x2(false, true, true, true)); - STATIC_CHECK(greater(int2x2(1,1,1,1), int2x2(0,1,2,3)) == bool2x2(true, false, false, false)); - STATIC_CHECK(greater_equal(int2x2(1,1,1,1), int2x2(0,1,2,3)) == bool2x2(true, true, false, false)); + STATIC_CHECK(less(imat2(1,1,1,1), imat2(0,1,2,3)) == bmat2(false, false, true, true)); + STATIC_CHECK(less_equal(imat2(1,1,1,1), imat2(0,1,2,3)) == bmat2(false, true, true, true)); + STATIC_CHECK(greater(imat2(1,1,1,1), imat2(0,1,2,3)) == bmat2(true, false, false, false)); + STATIC_CHECK(greater_equal(imat2(1,1,1,1), imat2(0,1,2,3)) == bmat2(true, true, false, false)); - STATIC_CHECK(equal_to(int2x2(1,1,1,1), int2x2(0,1,2,3)) == bool2x2(false, true, false, false)); - STATIC_CHECK(not_equal_to(int2x2(1,1,1,1), int2x2(0,1,2,3)) == bool2x2(true, false, true, true)); + STATIC_CHECK(equal_to(imat2(1,1,1,1), imat2(0,1,2,3)) == bmat2(false, true, false, false)); + STATIC_CHECK(not_equal_to(imat2(1,1,1,1), imat2(0,1,2,3)) == bmat2(true, false, true, true)); } SUBCASE("transpose") { - STATIC_CHECK(transpose(int2x2( + STATIC_CHECK(transpose(imat2( 1, 2, 3, 4 - )) == int2x2( + )) == imat2( 1, 3, 2, 4 )); - STATIC_CHECK(transpose(int3x3( + STATIC_CHECK(transpose(imat3( 1, 2, 3, 4, 5, 6, 7, 8, 9 - )) == int3x3( + )) == imat3( 1, 4, 7, 2, 5, 8, 3, 6, 9 )); - STATIC_CHECK(transpose(int4x4( + STATIC_CHECK(transpose(imat4( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 - )) == int4x4( + )) == imat4( 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, @@ -274,9 +274,9 @@ TEST_CASE("vmath/mat_fun") { } SUBCASE("determinant") { - constexpr int2x2 m2{1,2,3,4}; - constexpr int3x3 m3{1,2,3,4,5,6,7,8,9}; - constexpr int4x4 m4{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; + constexpr imat2 m2{1,2,3,4}; + constexpr imat3 m3{1,2,3,4,5,6,7,8,9}; + constexpr imat4 m4{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; STATIC_CHECK(determinant(m2) == determinant(transpose(m2))); STATIC_CHECK(determinant(m3) == determinant(transpose(m3))); STATIC_CHECK(determinant(m4) == determinant(transpose(m4))); @@ -291,44 +291,44 @@ TEST_CASE("vmath/mat_fun") { } SUBCASE("inverse") { - STATIC_CHECK(inverse(float2x2()) == float2x2()); - STATIC_CHECK(inverse(float3x3()) == float3x3()); - STATIC_CHECK(inverse(float4x4()) == float4x4()); + STATIC_CHECK(inverse(fmat2()) == fmat2()); + STATIC_CHECK(inverse(fmat3()) == fmat3()); + STATIC_CHECK(inverse(fmat4()) == fmat4()); - STATIC_CHECK(inverse(float2x2(0.5)) == float2x2(2.f)); - STATIC_CHECK(inverse(float3x3(0.5)) == float3x3(2.f)); - STATIC_CHECK(inverse(float4x4(0.5)) == float4x4(2.f)); + STATIC_CHECK(inverse(fmat2(0.5)) == fmat2(2.f)); + STATIC_CHECK(inverse(fmat3(0.5)) == fmat3(2.f)); + STATIC_CHECK(inverse(fmat4(0.5)) == fmat4(2.f)); { - constexpr float4x4 m1 = translate(float3(1.f, 2.f, 3.f)); - constexpr float4x4 rm1 = inverse(m1); + constexpr fmat4 m1 = translate(fvec3(1.f, 2.f, 3.f)); + constexpr fmat4 rm1 = inverse(m1); STATIC_CHECK(all(approx( unit4_z * m1 * rm1, unit4_z))); } { - const float3 axis2 = normalize(float3(1.f, 2.f, 3.f)); - const float4x4 m2 = rotate(0.5f,axis2); - const float4x4 rm2 = inverse(m2); + const fvec3 axis2 = normalize(fvec3(1.f, 2.f, 3.f)); + const fmat4 m2 = fmat4(rotate(0.5f,axis2)); + const fmat4 rm2 = inverse(m2); CHECK(all(approx( unit4_z * m2 * rm2, unit4_z))); } { - const float3 axis3 = normalize(float3(1.f, 2.f, 3.f)); - const float3x3 m3 = float3x3(rotate(0.5f,axis3)); - const float3x3 rm3 = inverse(m3); + const fvec3 axis3 = normalize(fvec3(1.f, 2.f, 3.f)); + const fmat3 m3 = fmat3(rotate(0.5f,axis3)); + const fmat3 rm3 = inverse(m3); CHECK(all(approx( unit3_z * m3 * rm3, unit3_z))); } { - const float3 axis4 = normalize(float3(0.f, 0.f, 3.f)); - const float2x2 m4 = float2x2(rotate(0.5f,axis4)); - const float2x2 rm4 = inverse(m4); + const fvec3 axis4 = normalize(fvec3(0.f, 0.f, 3.f)); + const fmat2 m4 = fmat2(rotate(0.5f,axis4)); + const fmat2 rm4 = inverse(m4); CHECK(all(approx( unit2_y * m4 * rm4, unit2_y))); diff --git a/untests/vmath_mat_tests.cpp b/untests/vmath_mat_tests.cpp index d522741..bf5c226 100644 --- a/untests/vmath_mat_tests.cpp +++ b/untests/vmath_mat_tests.cpp @@ -14,13 +14,13 @@ namespace TEST_CASE("vmath/mat") { SUBCASE("size/sizeof") { - STATIC_CHECK(int2x2{}.size == 2); - STATIC_CHECK(int3x3{}.size == 3); - STATIC_CHECK(int4x4{}.size == 4); + STATIC_CHECK(imat2{}.size == 2); + STATIC_CHECK(imat3{}.size == 3); + STATIC_CHECK(imat4{}.size == 4); - STATIC_CHECK(sizeof(int2x2{}) == sizeof(int) * 2 * 2); - STATIC_CHECK(sizeof(int3x3{}) == sizeof(int) * 3 * 3); - STATIC_CHECK(sizeof(int4x4{}) == sizeof(int) * 4 * 4); + STATIC_CHECK(sizeof(imat2{}) == sizeof(int) * 2 * 2); + STATIC_CHECK(sizeof(imat3{}) == sizeof(int) * 3 * 3); + STATIC_CHECK(sizeof(imat4{}) == sizeof(int) * 4 * 4); } SUBCASE("guides") { @@ -42,127 +42,127 @@ TEST_CASE("vmath/mat") { SUBCASE("ctors") { { mat m2; - CHECK(m2.rows[0] == int2(1,0)); - CHECK(m2.rows[1] == int2(0,1)); + CHECK(m2.rows[0] == ivec2(1,0)); + CHECK(m2.rows[1] == ivec2(0,1)); mat m3; - CHECK(m3.rows[0] == int3(1,0,0)); - CHECK(m3.rows[1] == int3(0,1,0)); - CHECK(m3.rows[2] == int3(0,0,1)); + CHECK(m3.rows[0] == ivec3(1,0,0)); + CHECK(m3.rows[1] == ivec3(0,1,0)); + CHECK(m3.rows[2] == ivec3(0,0,1)); mat m4; - CHECK(m4.rows[0] == int4(1,0,0,0)); - CHECK(m4.rows[1] == int4(0,1,0,0)); - CHECK(m4.rows[2] == int4(0,0,1,0)); - CHECK(m4.rows[3] == int4(0,0,0,1)); + CHECK(m4.rows[0] == ivec4(1,0,0,0)); + CHECK(m4.rows[1] == ivec4(0,1,0,0)); + CHECK(m4.rows[2] == ivec4(0,0,1,0)); + CHECK(m4.rows[3] == ivec4(0,0,0,1)); - STATIC_CHECK(int2x2() == int2x2({1,0},{0,1})); - STATIC_CHECK(int3x3() == int3x3({1,0,0},{0,1,0},{0,0,1})); - STATIC_CHECK(int4x4() == int4x4({1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1})); + STATIC_CHECK(imat2() == imat2({1,0},{0,1})); + STATIC_CHECK(imat3() == imat3({1,0,0},{0,1,0},{0,0,1})); + STATIC_CHECK(imat4() == imat4({1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1})); - (void)int2x2(uninit); - (void)int3x3(uninit); - (void)int4x4(uninit); + (void)imat2(uninit); + (void)imat3(uninit); + (void)imat4(uninit); - STATIC_CHECK(int2x2(zero_init) == int2x2({0,0},{0,0})); - STATIC_CHECK(int3x3(zero_init) == int3x3({0,0,0},{0,0,0},{0,0,0})); - STATIC_CHECK(int4x4(zero_init) == int4x4({0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0})); + STATIC_CHECK(imat2(zero_init) == imat2({0,0},{0,0})); + STATIC_CHECK(imat3(zero_init) == imat3({0,0,0},{0,0,0},{0,0,0})); + STATIC_CHECK(imat4(zero_init) == imat4({0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0})); - STATIC_CHECK(int2x2(unit_init) == int2x2({1,1},{1,1})); - STATIC_CHECK(int3x3(unit_init) == int3x3({1,1,1},{1,1,1},{1,1,1})); - STATIC_CHECK(int4x4(unit_init) == int4x4({1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1})); + STATIC_CHECK(imat2(unit_init) == imat2({1,1},{1,1})); + STATIC_CHECK(imat3(unit_init) == imat3({1,1,1},{1,1,1},{1,1,1})); + STATIC_CHECK(imat4(unit_init) == imat4({1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1})); - STATIC_CHECK(int2x2(identity_init) == int2x2({1,0},{0,1})); - STATIC_CHECK(int3x3(identity_init) == int3x3({1,0,0},{0,1,0},{0,0,1})); - STATIC_CHECK(int4x4(identity_init) == int4x4({1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1})); + STATIC_CHECK(imat2(identity_init) == imat2({1,0},{0,1})); + STATIC_CHECK(imat3(identity_init) == imat3({1,0,0},{0,1,0},{0,0,1})); + STATIC_CHECK(imat4(identity_init) == imat4({1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1})); } { - STATIC_CHECK(int2x2()[0] == int2(1,0)); - STATIC_CHECK(int2x2()[1] == int2(0,1)); + STATIC_CHECK(imat2()[0] == ivec2(1,0)); + STATIC_CHECK(imat2()[1] == ivec2(0,1)); - STATIC_CHECK(int2x2(1,2,3,4)[0] == int2(1,2)); - STATIC_CHECK(int2x2(1,2,3,4)[1] == int2(3,4)); + STATIC_CHECK(imat2(1,2,3,4)[0] == ivec2(1,2)); + STATIC_CHECK(imat2(1,2,3,4)[1] == ivec2(3,4)); - STATIC_CHECK(int2x2({1,2},{3,4})[0] == int2(1,2)); - STATIC_CHECK(int2x2({1,2},{3,4})[1] == int2(3,4)); + STATIC_CHECK(imat2({1,2},{3,4})[0] == ivec2(1,2)); + STATIC_CHECK(imat2({1,2},{3,4})[1] == ivec2(3,4)); } { - constexpr int2x2 v(1,2,3,4); - constexpr int2x2 v2 = v; - STATIC_CHECK(v2 == int2x2(1,2,3,4)); + constexpr imat2 v(1,2,3,4); + constexpr imat2 v2 = v; + STATIC_CHECK(v2 == imat2(1,2,3,4)); } { - constexpr int2x2 v(1,2,3,4); - constexpr int2x2 v2 = std::move(v); - STATIC_CHECK(v2 == int2x2(1,2,3,4)); + constexpr imat2 v(1,2,3,4); + constexpr imat2 v2 = std::move(v); + STATIC_CHECK(v2 == imat2(1,2,3,4)); } { - STATIC_CHECK(int2x2() == int2x2(1,0,0,1)); - STATIC_CHECK(int2x2(2) == int2x2(2,0,0,2)); - STATIC_CHECK(int2x2(int2{2,3}) == int2x2(2,0,0,3)); - STATIC_CHECK(int2x2(1,2,3,4) == int2x2(1,2,3,4)); - STATIC_CHECK(int2x2({1,2},{3,4}) == int2x2(1,2,3,4)); - STATIC_CHECK(int2x2(int2x2({1,2},{3,4})) == int2x2(1,2,3,4)); - STATIC_CHECK(int2x2(int3x3({1,2,3},{4,5,6},{7,8,9})) == int2x2(1,2,4,5)); - STATIC_CHECK(int2x2(int4x4({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16})) == int2x2(1,2,5,6)); + STATIC_CHECK(imat2() == imat2(1,0,0,1)); + STATIC_CHECK(imat2(2) == imat2(2,0,0,2)); + STATIC_CHECK(imat2(ivec2{2,3}) == imat2(2,0,0,3)); + STATIC_CHECK(imat2(1,2,3,4) == imat2(1,2,3,4)); + STATIC_CHECK(imat2({1,2},{3,4}) == imat2(1,2,3,4)); + STATIC_CHECK(imat2(imat2({1,2},{3,4})) == imat2(1,2,3,4)); + STATIC_CHECK(imat2(imat3({1,2,3},{4,5,6},{7,8,9})) == imat2(1,2,4,5)); + STATIC_CHECK(imat2(imat4({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16})) == imat2(1,2,5,6)); - STATIC_CHECK(int3x3() == int3x3(1,0,0,0,1,0,0,0,1)); - STATIC_CHECK(int3x3(2) == int3x3(2,0,0,0,2,0,0,0,2)); - STATIC_CHECK(int3x3(int3{2,3,4}) == int3x3(2,0,0,0,3,0,0,0,4)); - STATIC_CHECK(int3x3(1,2,3,4,5,6,7,8,9) == int3x3(1,2,3,4,5,6,7,8,9)); - STATIC_CHECK(int3x3({1,2,3},{4,5,6},{7,8,9}) == int3x3(1,2,3,4,5,6,7,8,9)); - STATIC_CHECK(int3x3(int2x2({1,2},{3,4}),int2{5,6}) == int3x3(1,2,0,3,4,0,5,6,1)); - STATIC_CHECK(int3x3(int3x3({1,2,3},{4,5,6},{7,8,9})) == int3x3(1,2,3,4,5,6,7,8,9)); - STATIC_CHECK(int3x3(int2x2({1,2},{3,4})) == int3x3(1,2,0,3,4,0,0,0,1)); - STATIC_CHECK(int3x3(int4x4({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16})) == int3x3(1,2,3,5,6,7,9,10,11)); + STATIC_CHECK(imat3() == imat3(1,0,0,0,1,0,0,0,1)); + STATIC_CHECK(imat3(2) == imat3(2,0,0,0,2,0,0,0,2)); + STATIC_CHECK(imat3(ivec3{2,3,4}) == imat3(2,0,0,0,3,0,0,0,4)); + STATIC_CHECK(imat3(1,2,3,4,5,6,7,8,9) == imat3(1,2,3,4,5,6,7,8,9)); + STATIC_CHECK(imat3({1,2,3},{4,5,6},{7,8,9}) == imat3(1,2,3,4,5,6,7,8,9)); + STATIC_CHECK(imat3(imat2({1,2},{3,4}),ivec2{5,6}) == imat3(1,2,0,3,4,0,5,6,1)); + STATIC_CHECK(imat3(imat3({1,2,3},{4,5,6},{7,8,9})) == imat3(1,2,3,4,5,6,7,8,9)); + STATIC_CHECK(imat3(imat2({1,2},{3,4})) == imat3(1,2,0,3,4,0,0,0,1)); + STATIC_CHECK(imat3(imat4({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16})) == imat3(1,2,3,5,6,7,9,10,11)); - STATIC_CHECK(int4x4() == int4x4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)); - STATIC_CHECK(int4x4(2) == int4x4(2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2)); - STATIC_CHECK(int4x4(int4{2,3,4,5}) == int4x4(2,0,0,0,0,3,0,0,0,0,4,0,0,0,0,5)); - STATIC_CHECK(int4x4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) == int4x4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)); - STATIC_CHECK(int4x4({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}) == int4x4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)); - STATIC_CHECK(int4x4(int3x3({1,2,3},{4,5,6},{7,8,9}),int3{10,11,12}) == int4x4(1,2,3,0,4,5,6,0,7,8,9,0,10,11,12,1)); - STATIC_CHECK(int4x4(int4x4({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16})) == int4x4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)); - STATIC_CHECK(int4x4(int2x2({1,2},{3,4})) == int4x4(1,2,0,0,3,4,0,0,0,0,1,0,0,0,0,1)); - STATIC_CHECK(int4x4(int3x3({1,2,3},{4,5,6},{7,8,9})) == int4x4(1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,1)); + STATIC_CHECK(imat4() == imat4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)); + STATIC_CHECK(imat4(2) == imat4(2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2)); + STATIC_CHECK(imat4(ivec4{2,3,4,5}) == imat4(2,0,0,0,0,3,0,0,0,0,4,0,0,0,0,5)); + STATIC_CHECK(imat4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) == imat4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)); + STATIC_CHECK(imat4({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}) == imat4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)); + STATIC_CHECK(imat4(imat3({1,2,3},{4,5,6},{7,8,9}),ivec3{10,11,12}) == imat4(1,2,3,0,4,5,6,0,7,8,9,0,10,11,12,1)); + STATIC_CHECK(imat4(imat4({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16})) == imat4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)); + STATIC_CHECK(imat4(imat2({1,2},{3,4})) == imat4(1,2,0,0,3,4,0,0,0,0,1,0,0,0,0,1)); + STATIC_CHECK(imat4(imat3({1,2,3},{4,5,6},{7,8,9})) == imat4(1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,1)); } } SUBCASE("operator=") { { - int2x2 v(1,2,3,4); - int2x2 v2; + imat2 v(1,2,3,4); + imat2 v2; v2 = v; - CHECK(v2 == int2x2(1,2,3,4)); + CHECK(v2 == imat2(1,2,3,4)); } { - int2x2 v(1,2,3,4); - int2x2 v2; + imat2 v(1,2,3,4); + imat2 v2; v2 = std::move(v); - CHECK(v2 == int2x2(1,2,3,4)); + CHECK(v2 == imat2(1,2,3,4)); } } SUBCASE("swap") { { - int2x2 v1(1,2,3,4); - int2x2 v2(4,5,6,7); + imat2 v1(1,2,3,4); + imat2 v2(4,5,6,7); v1.swap(v2); - CHECK(v1 == int2x2(4,5,6,7)); - CHECK(v2 == int2x2(1,2,3,4)); + CHECK(v1 == imat2(4,5,6,7)); + CHECK(v2 == imat2(1,2,3,4)); } { - int2x2 v1(1,2,3,4); - int2x2 v2(4,5,6,7); + imat2 v1(1,2,3,4); + imat2 v2(4,5,6,7); swap(v1, v2); - CHECK(v1 == int2x2(4,5,6,7)); - CHECK(v2 == int2x2(1,2,3,4)); + CHECK(v1 == imat2(4,5,6,7)); + CHECK(v2 == imat2(1,2,3,4)); } } SUBCASE("iter") { { - int2x2 m{1,2,3,4}; + imat2 m{1,2,3,4}; CHECK(*m.begin() == vec{1,2}); CHECK(*(m.begin() + 1) == vec{3,4}); @@ -193,12 +193,12 @@ TEST_CASE("vmath/mat") { CHECK(m.crend() - 2 == m.crbegin()); *m.begin() = {5,6}; - CHECK(m == int2x2{5,6,3,4}); + CHECK(m == imat2{5,6,3,4}); *m.rbegin() = {7,8}; - CHECK(m == int2x2{5,6,7,8}); + CHECK(m == imat2{5,6,7,8}); } { - const int2x2 m{1,2,3,4}; + const imat2 m{1,2,3,4}; CHECK(*m.begin() == vec{1,2}); CHECK(*(m.begin() + 1) == vec{3,4}); @@ -232,98 +232,98 @@ TEST_CASE("vmath/mat") { SUBCASE("data") { { - int2x2 m2; + imat2 m2; CHECK(m2.data() == &m2[0]); - int3x3 m3; + imat3 m3; CHECK(m3.data() == &m3[0]); - int4x4 m4; + imat4 m4; CHECK(m4.data() == &m4[0]); } { - const int2x2 m2; + const imat2 m2; CHECK(m2.data() == &m2[0]); - const int3x3 m3; + const imat3 m3; CHECK(m3.data() == &m3[0]); - const int4x4 m4; + const imat4 m4; CHECK(m4.data() == &m4[0]); } } SUBCASE("operator[]") { { - STATIC_CHECK(int2x2()[0] == int2(1,0)); - STATIC_CHECK(int2x2()[1] == int2(0,1)); + STATIC_CHECK(imat2()[0] == ivec2(1,0)); + STATIC_CHECK(imat2()[1] == ivec2(0,1)); - STATIC_CHECK(int3x3()[0] == int3(1,0,0)); - STATIC_CHECK(int3x3()[1] == int3(0,1,0)); - STATIC_CHECK(int3x3()[2] == int3(0,0,1)); + STATIC_CHECK(imat3()[0] == ivec3(1,0,0)); + STATIC_CHECK(imat3()[1] == ivec3(0,1,0)); + STATIC_CHECK(imat3()[2] == ivec3(0,0,1)); - STATIC_CHECK(int4x4()[0] == int4(1,0,0,0)); - STATIC_CHECK(int4x4()[1] == int4(0,1,0,0)); - STATIC_CHECK(int4x4()[2] == int4(0,0,1,0)); - STATIC_CHECK(int4x4()[3] == int4(0,0,0,1)); + STATIC_CHECK(imat4()[0] == ivec4(1,0,0,0)); + STATIC_CHECK(imat4()[1] == ivec4(0,1,0,0)); + STATIC_CHECK(imat4()[2] == ivec4(0,0,1,0)); + STATIC_CHECK(imat4()[3] == ivec4(0,0,0,1)); } { - int2x2 v; - v[0] = int2(1,2); - v[1] = int2(3,4); - CHECK(v == int2x2(1,2,3,4)); - CHECK(std::as_const(v).at(0) == int2(1,2)); - CHECK(std::as_const(v).at(1) == int2(3,4)); + imat2 v; + v[0] = ivec2(1,2); + v[1] = ivec2(3,4); + CHECK(v == imat2(1,2,3,4)); + CHECK(std::as_const(v).at(0) == ivec2(1,2)); + CHECK(std::as_const(v).at(1) == ivec2(3,4)); } { - int3x3 v; - v[0] = int3(1,2,3); - v[1] = int3(4,5,6); - v[2] = int3(7,8,9); - CHECK(v == int3x3(1,2,3,4,5,6,7,8,9)); - CHECK(std::as_const(v).at(0) == int3(1,2,3)); - CHECK(std::as_const(v).at(1) == int3(4,5,6)); - CHECK(std::as_const(v).at(2) == int3(7,8,9)); + imat3 v; + v[0] = ivec3(1,2,3); + v[1] = ivec3(4,5,6); + v[2] = ivec3(7,8,9); + CHECK(v == imat3(1,2,3,4,5,6,7,8,9)); + CHECK(std::as_const(v).at(0) == ivec3(1,2,3)); + CHECK(std::as_const(v).at(1) == ivec3(4,5,6)); + CHECK(std::as_const(v).at(2) == ivec3(7,8,9)); } { - int4x4 v; - v[0] = int4(1,2,3,4); - v[1] = int4(5,6,7,8); - v[2] = int4(9,10,11,12); - v[3] = int4(13,14,15,16); - CHECK(v == int4x4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)); - CHECK(std::as_const(v).at(0) == int4(1,2,3,4)); - CHECK(std::as_const(v).at(1) == int4(5,6,7,8)); - CHECK(std::as_const(v).at(2) == int4(9,10,11,12)); - CHECK(std::as_const(v).at(3) == int4(13,14,15,16)); + imat4 v; + v[0] = ivec4(1,2,3,4); + v[1] = ivec4(5,6,7,8); + v[2] = ivec4(9,10,11,12); + v[3] = ivec4(13,14,15,16); + CHECK(v == imat4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)); + CHECK(std::as_const(v).at(0) == ivec4(1,2,3,4)); + CHECK(std::as_const(v).at(1) == ivec4(5,6,7,8)); + CHECK(std::as_const(v).at(2) == ivec4(9,10,11,12)); + CHECK(std::as_const(v).at(3) == ivec4(13,14,15,16)); } } SUBCASE("at") { - STATIC_CHECK(int2x2(1,2,3,4).at(0) == int2(1,2)); - STATIC_CHECK(int2x2(1,2,3,4).at(1) == int2(3,4)); + STATIC_CHECK(imat2(1,2,3,4).at(0) == ivec2(1,2)); + STATIC_CHECK(imat2(1,2,3,4).at(1) == ivec2(3,4)); #ifndef VMATH_HPP_NO_EXCEPTIONS - CHECK_THROWS_AS((void)int2x2(1,2,3,4).at(2), std::out_of_range); + CHECK_THROWS_AS((void)imat2(1,2,3,4).at(2), std::out_of_range); #endif } SUBCASE("operator==/operator!=") { - STATIC_CHECK(int2x2(1,2,3,4) == int2x2(1,2,3,4)); - STATIC_CHECK_FALSE(int2x2(1,2,3,4) == int2x2(2,2,3,4)); - STATIC_CHECK_FALSE(int2x2(1,2,3,4) == int2x2(1,3,3,4)); + STATIC_CHECK(imat2(1,2,3,4) == imat2(1,2,3,4)); + STATIC_CHECK_FALSE(imat2(1,2,3,4) == imat2(2,2,3,4)); + STATIC_CHECK_FALSE(imat2(1,2,3,4) == imat2(1,3,3,4)); - STATIC_CHECK_FALSE(int2x2(1,2,3,4) != int2x2(1,2,3,4)); - STATIC_CHECK(int2x2(1,2,3,4) != int2x2(2,2,3,4)); - STATIC_CHECK(int2x2(1,2,3,4) != int2x2(1,3,3,4)); + STATIC_CHECK_FALSE(imat2(1,2,3,4) != imat2(1,2,3,4)); + STATIC_CHECK(imat2(1,2,3,4) != imat2(2,2,3,4)); + STATIC_CHECK(imat2(1,2,3,4) != imat2(1,3,3,4)); } SUBCASE("operator<") { - STATIC_CHECK_FALSE(int2x2(1,2,3,4) < int2x2(1,2,3,4)); + STATIC_CHECK_FALSE(imat2(1,2,3,4) < imat2(1,2,3,4)); - STATIC_CHECK(int2x2(1,1,3,4) < int2x2(1,2,3,4)); - STATIC_CHECK_FALSE(int2x2(1,2,3,4) < int2x2(1,1,3,4)); + STATIC_CHECK(imat2(1,1,3,4) < imat2(1,2,3,4)); + STATIC_CHECK_FALSE(imat2(1,2,3,4) < imat2(1,1,3,4)); - STATIC_CHECK(int2x2(0,3,3,4) < int2x2(1,2,3,4)); - STATIC_CHECK_FALSE(int2x2(1,2,3,4) < int2x2(0,3,3,4)); + STATIC_CHECK(imat2(0,3,3,4) < imat2(1,2,3,4)); + STATIC_CHECK_FALSE(imat2(1,2,3,4) < imat2(0,3,3,4)); } } diff --git a/untests/vmath_qua_fun_tests.cpp b/untests/vmath_qua_fun_tests.cpp index 0e4f9bc..f617689 100644 --- a/untests/vmath_qua_fun_tests.cpp +++ b/untests/vmath_qua_fun_tests.cpp @@ -53,37 +53,37 @@ TEST_CASE("vmath/qua_fun") { } { - float3 v{1,0,0}; - CHECK(&v == &(v *= qfloat{0,0,0.7071067812f,0.7071067812f})); + fvec3 v{1,0,0}; + CHECK(&v == &(v *= fqua{0,0,0.7071067812f,0.7071067812f})); CHECK(v == uapprox3(0.f,1.f,0.f)); } - STATIC_CHECK(qfloat{} * qfloat{} == qfloat{}); - STATIC_CHECK(float3{1,2,3} * qfloat{} == uapprox3(1.f,2.f,3.f)); - STATIC_CHECK(float3{1,0,0} * qfloat{0,0,0.7071067812f,0.7071067812f} == uapprox3(0.f,1.f,0.f)); + STATIC_CHECK(fqua{} * fqua{} == fqua{}); + STATIC_CHECK(fvec3{1,2,3} * fqua{} == uapprox3(1.f,2.f,3.f)); + STATIC_CHECK(fvec3{1,0,0} * fqua{0,0,0.7071067812f,0.7071067812f} == uapprox3(0.f,1.f,0.f)); } SUBCASE("Operators2") { - STATIC_CHECK(qfloat{} + qdouble{} == qdouble{0,0,0,2}); - STATIC_CHECK(qfloat{} - qdouble{} == qdouble{0,0,0,0}); + STATIC_CHECK(fqua{} + dqua{} == dqua{0,0,0,2}); + STATIC_CHECK(fqua{} - dqua{} == dqua{0,0,0,0}); - STATIC_CHECK(qfloat{} * 1.0 == qdouble{}); - STATIC_CHECK(1.0 * qfloat{} == qdouble{}); - STATIC_CHECK(float3{} * qdouble{} == double3{}); - STATIC_CHECK(qfloat{} * qdouble{} == qdouble{}); + STATIC_CHECK(fqua{} * 1.0 == dqua{}); + STATIC_CHECK(1.0 * fqua{} == dqua{}); + STATIC_CHECK(fvec3{} * dqua{} == dvec3{}); + STATIC_CHECK(fqua{} * dqua{} == dqua{}); - STATIC_CHECK(qfloat{} / 1.0 == qdouble{}); - STATIC_CHECK(1.0 / qfloat{1,1,1,1} == qdouble{1,1,1,1}); + STATIC_CHECK(fqua{} / 1.0 == dqua{}); + STATIC_CHECK(1.0 / fqua{1,1,1,1} == dqua{1,1,1,1}); } SUBCASE("Conversions2") { - STATIC_CHECK(qdouble(1,2.f,3.0,4u) == qdouble(1,2,3,4)); - STATIC_CHECK(qdouble(int3(1,2,3),4u) == qdouble(1,2,3,4)); - STATIC_CHECK(qdouble(int4(1,2,3,4)) == qdouble(1,2,3,4)); - STATIC_CHECK(qdouble(qfloat(1,2,3,4)) == qdouble(1,2,3,4)); + STATIC_CHECK(dqua(1,2.f,3.0,4u) == dqua(1,2,3,4)); + STATIC_CHECK(dqua(ivec3(1,2,3),4u) == dqua(1,2,3,4)); + STATIC_CHECK(dqua(ivec4(1,2,3,4)) == dqua(1,2,3,4)); + STATIC_CHECK(dqua(fqua(1,2,3,4)) == dqua(1,2,3,4)); - STATIC_CHECK(float4(qfloat(1,2,3,4)) == float4(1,2,3,4)); - STATIC_CHECK(double4(qfloat(1,2,3,4)) == double4(1,2,3,4)); + STATIC_CHECK(fvec4(fqua(1,2,3,4)) == fvec4(1,2,3,4)); + STATIC_CHECK(dvec4(fqua(1,2,3,4)) == dvec4(1,2,3,4)); } SUBCASE("Common Functions") { @@ -155,19 +155,19 @@ TEST_CASE("vmath/qua_fun") { SUBCASE("Geometric Functions") { STATIC_CHECK(dot(qua(1,2,3,4),qua(3,4,5,6)) == 50); - STATIC_CHECK(dot(qfloat(1,2,3,4),qdouble(3,4,5,6)) == uapprox(50.0)); + STATIC_CHECK(dot(fqua(1,2,3,4),dqua(3,4,5,6)) == uapprox(50.0)); - CHECK(length(qfloat(10.f,0.f,0.f,0.f)) == uapprox(10.f)); - CHECK(length(qfloat(-10.f,0.f,0.f,0.f)) == uapprox(10.f)); + CHECK(length(fqua(10.f,0.f,0.f,0.f)) == uapprox(10.f)); + CHECK(length(fqua(-10.f,0.f,0.f,0.f)) == uapprox(10.f)); - CHECK(rlength(qfloat(10.f,0.f,0.f,0.f)) == uapprox(0.1f)); - CHECK(rlength(qfloat(-10.f,0.f,0.f,0.f)) == uapprox(0.1f)); + CHECK(rlength(fqua(10.f,0.f,0.f,0.f)) == uapprox(0.1f)); + CHECK(rlength(fqua(-10.f,0.f,0.f,0.f)) == uapprox(0.1f)); - STATIC_CHECK(length2(qfloat(10.f,0.f,0.f,0.f)) == uapprox(100.f)); - STATIC_CHECK(length2(qfloat(-10.f,0.f,0.f,0.f)) == uapprox(100.f)); + STATIC_CHECK(length2(fqua(10.f,0.f,0.f,0.f)) == uapprox(100.f)); + STATIC_CHECK(length2(fqua(-10.f,0.f,0.f,0.f)) == uapprox(100.f)); - STATIC_CHECK(rlength2(qfloat(10.f,0.f,0.f,0.f)) == uapprox(0.01f)); - STATIC_CHECK(rlength2(qfloat(-10.f,0.f,0.f,0.f)) == uapprox(0.01f)); + STATIC_CHECK(rlength2(fqua(10.f,0.f,0.f,0.f)) == uapprox(0.01f)); + STATIC_CHECK(rlength2(fqua(-10.f,0.f,0.f,0.f)) == uapprox(0.01f)); CHECK(distance(qrotate_z(radians(0.f)) * 2.f, qrotate_z(radians(0.f)) * 1.5f) == uapprox(radians(0.f))); CHECK(distance(qrotate_z(radians(0.f)) * 3.f, qrotate_z(radians(360.f)) * 2.5f) == uapprox(radians(0.f))); @@ -176,7 +176,7 @@ TEST_CASE("vmath/qua_fun") { CHECK(distance(qrotate_z(radians(15.f)) * 6.f, qrotate_z(radians(350.f)) * 5.5f) == uapprox(radians(25.f))); CHECK(distance(qrotate_z(radians(350.f)) * 7.f, qrotate_z(radians(15.f)) * 6.5f) == uapprox(radians(25.f))); - CHECK(normalize(qfloat(0.5f,0.f,0.f,0.f)).v == uapprox3(1.f,0.f,0.f)); + CHECK(normalize(fqua(0.5f,0.f,0.f,0.f)).v == uapprox3(1.f,0.f,0.f)); } SUBCASE("Relational Functions") { @@ -193,18 +193,18 @@ TEST_CASE("vmath/qua_fun") { STATIC_CHECK(all(qua(1,1,1,1))); STATIC_CHECK_FALSE(all(qua(0,0,0,0))); - STATIC_CHECK(approx(qua(1,1,1,1), qua(0,1,2,3)) == bool4(false, true, false, false)); - STATIC_CHECK(approx(qua(1,1,1,1), qua(0,1,2,3), 0) == bool4(false, true, false, false)); - STATIC_CHECK(approx(qua(1,1,1,1), qua(0,1,2,3), 1) == bool4(true, true, true, false)); - STATIC_CHECK(approx(qua(1,1,1,1), qua(0,1,2,3), 2) == bool4(true, true, true, true)); + STATIC_CHECK(approx(qua(1,1,1,1), qua(0,1,2,3)) == bvec4(false, true, false, false)); + STATIC_CHECK(approx(qua(1,1,1,1), qua(0,1,2,3), 0) == bvec4(false, true, false, false)); + STATIC_CHECK(approx(qua(1,1,1,1), qua(0,1,2,3), 1) == bvec4(true, true, true, false)); + STATIC_CHECK(approx(qua(1,1,1,1), qua(0,1,2,3), 2) == bvec4(true, true, true, true)); - STATIC_CHECK(less(qua(1,1,1,1), qua(0,1,2,3)) == bool4(false, false, true, true)); - STATIC_CHECK(less_equal(qua(1,1,1,1), qua(0,1,2,3)) == bool4(false, true, true, true)); - STATIC_CHECK(greater(qua(1,1,1,1), qua(0,1,2,3)) == bool4(true, false, false, false)); - STATIC_CHECK(greater_equal(qua(1,1,1,1), qua(0,1,2,3)) == bool4(true, true, false, false)); + STATIC_CHECK(less(qua(1,1,1,1), qua(0,1,2,3)) == bvec4(false, false, true, true)); + STATIC_CHECK(less_equal(qua(1,1,1,1), qua(0,1,2,3)) == bvec4(false, true, true, true)); + STATIC_CHECK(greater(qua(1,1,1,1), qua(0,1,2,3)) == bvec4(true, false, false, false)); + STATIC_CHECK(greater_equal(qua(1,1,1,1), qua(0,1,2,3)) == bvec4(true, true, false, false)); - STATIC_CHECK(equal_to(qua(1,1,1,1), qua(0,1,2,3)) == bool4(false, true, false, false)); - STATIC_CHECK(not_equal_to(qua(1,1,1,1), qua(0,1,2,3)) == bool4(true, false, true, true)); + STATIC_CHECK(equal_to(qua(1,1,1,1), qua(0,1,2,3)) == bvec4(false, true, false, false)); + STATIC_CHECK(not_equal_to(qua(1,1,1,1), qua(0,1,2,3)) == bvec4(true, false, true, true)); } SUBCASE("Quaternion Functions") { diff --git a/untests/vmath_qua_tests.cpp b/untests/vmath_qua_tests.cpp index ee4856b..e926148 100644 --- a/untests/vmath_qua_tests.cpp +++ b/untests/vmath_qua_tests.cpp @@ -14,11 +14,11 @@ namespace TEST_CASE("vmath/qua") { SUBCASE("size/sizeof") { - STATIC_CHECK(qfloat{}.size == 4); - STATIC_CHECK(qdouble{}.size == 4); + STATIC_CHECK(fqua{}.size == 4); + STATIC_CHECK(dqua{}.size == 4); - STATIC_CHECK(sizeof(qfloat{}) == sizeof(float) * 4); - STATIC_CHECK(sizeof(qdouble{}) == sizeof(double) * 4); + STATIC_CHECK(sizeof(fqua{}) == sizeof(float) * 4); + STATIC_CHECK(sizeof(dqua{}) == sizeof(double) * 4); } SUBCASE("guides") { @@ -32,7 +32,7 @@ TEST_CASE("vmath/qua") { SUBCASE("ctors") { { qua q; - CHECK(q.v == int3(0,0,0)); + CHECK(q.v == ivec3(0,0,0)); CHECK(q.s == 1); STATIC_CHECK(qua() == qua({0,0,0},1)); @@ -41,64 +41,64 @@ TEST_CASE("vmath/qua") { STATIC_CHECK(qua(identity_init) == qua({0,0,0},1)); } { - STATIC_CHECK(qfloat{}.v == uapprox3(0.f)); - STATIC_CHECK(qfloat{}.s == uapprox(1.f)); + STATIC_CHECK(fqua{}.v == uapprox3(0.f)); + STATIC_CHECK(fqua{}.s == uapprox(1.f)); - STATIC_CHECK(qfloat{1,2,3,4}.v == uapprox3(1.f,2.f,3.f)); - STATIC_CHECK(qfloat{1,2,3,4}.s == uapprox(4.f)); + STATIC_CHECK(fqua{1,2,3,4}.v == uapprox3(1.f,2.f,3.f)); + STATIC_CHECK(fqua{1,2,3,4}.s == uapprox(4.f)); - STATIC_CHECK(qfloat{{1,2,3},4}.v == uapprox3(1.f,2.f,3.f)); - STATIC_CHECK(qfloat{{1,2,3},4}.s == uapprox(4.f)); + STATIC_CHECK(fqua{{1,2,3},4}.v == uapprox3(1.f,2.f,3.f)); + STATIC_CHECK(fqua{{1,2,3},4}.s == uapprox(4.f)); - STATIC_CHECK(qfloat{{1,2,3,4}}.v == uapprox3(1.f,2.f,3.f)); - STATIC_CHECK(qfloat{{1,2,3,4}}.s == uapprox(4.f)); + STATIC_CHECK(fqua{{1,2,3,4}}.v == uapprox3(1.f,2.f,3.f)); + STATIC_CHECK(fqua{{1,2,3,4}}.s == uapprox(4.f)); } { - constexpr qfloat q(1,2,3,4); - constexpr qfloat q2 = q; - STATIC_CHECK(q2 == qfloat(1,2,3,4)); + constexpr fqua q(1,2,3,4); + constexpr fqua q2 = q; + STATIC_CHECK(q2 == fqua(1,2,3,4)); } { - constexpr qfloat q(1,2,3,4); - constexpr qfloat q2 = std::move(q); - STATIC_CHECK(q2 == qfloat(1,2,3,4)); + constexpr fqua q(1,2,3,4); + constexpr fqua q2 = std::move(q); + STATIC_CHECK(q2 == fqua(1,2,3,4)); } { - STATIC_CHECK(qfloat(1,2,3,4) == qfloat(1,2,3,4)); - STATIC_CHECK(qfloat(float3(1,2,3),4) == qfloat(1,2,3,4)); - STATIC_CHECK(qfloat(float4(1,2,3,4)) == qfloat(1,2,3,4)); + STATIC_CHECK(fqua(1,2,3,4) == fqua(1,2,3,4)); + STATIC_CHECK(fqua(fvec3(1,2,3),4) == fqua(1,2,3,4)); + STATIC_CHECK(fqua(fvec4(1,2,3,4)) == fqua(1,2,3,4)); } } SUBCASE("operator=") { { - qfloat v(1,2,3,4); - qfloat v2; + fqua v(1,2,3,4); + fqua v2; v2 = v; - CHECK(v2 == qfloat(1,2,3,4)); + CHECK(v2 == fqua(1,2,3,4)); } { - qfloat v(1,2,3,4); - qfloat v2; + fqua v(1,2,3,4); + fqua v2; v2 = std::move(v); - CHECK(v2 == qfloat(1,2,3,4)); + CHECK(v2 == fqua(1,2,3,4)); } } SUBCASE("swap") { { - qfloat v1(1,2,3,4); - qfloat v2(4,5,6,7); + fqua v1(1,2,3,4); + fqua v2(4,5,6,7); v1.swap(v2); - CHECK(v1 == qfloat(4,5,6,7)); - CHECK(v2 == qfloat(1,2,3,4)); + CHECK(v1 == fqua(4,5,6,7)); + CHECK(v2 == fqua(1,2,3,4)); } { - qfloat v1(1,2,3,4); - qfloat v2(4,5,6,7); + fqua v1(1,2,3,4); + fqua v2(4,5,6,7); swap(v1, v2); - CHECK(v1 == qfloat(4,5,6,7)); - CHECK(v2 == qfloat(1,2,3,4)); + CHECK(v1 == fqua(4,5,6,7)); + CHECK(v2 == fqua(1,2,3,4)); } } @@ -174,11 +174,11 @@ TEST_CASE("vmath/qua") { SUBCASE("data") { { - qfloat i2; + fqua i2; CHECK(i2.data() == &i2[0]); } { - const qfloat i2; + const fqua i2; CHECK(i2.data() == &i2[0]); } } @@ -240,29 +240,29 @@ TEST_CASE("vmath/qua") { } SUBCASE("operator==/operator!=") { - STATIC_CHECK(qfloat(1,2,3,4) == qfloat(1,2,3,4)); - STATIC_CHECK_FALSE(qfloat(1,2,3,4) == qfloat(2,2,3,4)); - STATIC_CHECK_FALSE(qfloat(1,2,3,4) == qfloat(1,3,3,4)); + STATIC_CHECK(fqua(1,2,3,4) == fqua(1,2,3,4)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) == fqua(2,2,3,4)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) == fqua(1,3,3,4)); - STATIC_CHECK_FALSE(qfloat(1,2,3,4) != qfloat(1,2,3,4)); - STATIC_CHECK(qfloat(1,2,3,4) != qfloat(2,2,3,4)); - STATIC_CHECK(qfloat(1,2,3,4) != qfloat(1,3,3,4)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) != fqua(1,2,3,4)); + STATIC_CHECK(fqua(1,2,3,4) != fqua(2,2,3,4)); + STATIC_CHECK(fqua(1,2,3,4) != fqua(1,3,3,4)); } SUBCASE("operator<") { - STATIC_CHECK_FALSE(qfloat(1,2,3,4) < qfloat(1,2,3,4)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) < fqua(1,2,3,4)); - STATIC_CHECK(qfloat(0,2,3,4) < qfloat(1,2,3,4)); - STATIC_CHECK(qfloat(1,1,3,4) < qfloat(1,2,3,4)); - STATIC_CHECK(qfloat(1,2,2,4) < qfloat(1,2,3,4)); - STATIC_CHECK(qfloat(1,2,3,3) < qfloat(1,2,3,4)); + STATIC_CHECK(fqua(0,2,3,4) < fqua(1,2,3,4)); + STATIC_CHECK(fqua(1,1,3,4) < fqua(1,2,3,4)); + STATIC_CHECK(fqua(1,2,2,4) < fqua(1,2,3,4)); + STATIC_CHECK(fqua(1,2,3,3) < fqua(1,2,3,4)); - STATIC_CHECK_FALSE(qfloat(1,2,3,4) < qfloat(0,2,3,4)); - STATIC_CHECK_FALSE(qfloat(1,2,3,4) < qfloat(1,1,3,4)); - STATIC_CHECK_FALSE(qfloat(1,2,3,4) < qfloat(1,2,2,4)); - STATIC_CHECK_FALSE(qfloat(1,2,3,4) < qfloat(1,2,3,3)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) < fqua(0,2,3,4)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) < fqua(1,1,3,4)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) < fqua(1,2,2,4)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) < fqua(1,2,3,3)); - STATIC_CHECK(qfloat(0,3,3,4) < qfloat(1,2,3,4)); - STATIC_CHECK_FALSE(qfloat(1,2,3,4) < qfloat(0,3,3,4)); + STATIC_CHECK(fqua(0,3,3,4) < fqua(1,2,3,4)); + STATIC_CHECK_FALSE(fqua(1,2,3,4) < fqua(0,3,3,4)); } } diff --git a/untests/vmath_vec_fun_tests.cpp b/untests/vmath_vec_fun_tests.cpp index 6590b6e..ea05e0b 100644 --- a/untests/vmath_vec_fun_tests.cpp +++ b/untests/vmath_vec_fun_tests.cpp @@ -14,351 +14,351 @@ namespace TEST_CASE("vmath/vec_fun") { SUBCASE("Operators") { - STATIC_CHECK(+int2(1,-2) == int2(1,-2)); - STATIC_CHECK(-int2(1,-2) == int2(-1,2)); - STATIC_CHECK(~uint2(0xF0F0F0F0,0x0F0F0F0F) == uint2(0x0F0F0F0F,0xF0F0F0F0)); - STATIC_CHECK((!int3(-1,0,1)) == bool3(false, true, false)); + STATIC_CHECK(+ivec2(1,-2) == ivec2(1,-2)); + STATIC_CHECK(-ivec2(1,-2) == ivec2(-1,2)); + STATIC_CHECK(~uvec2(0xF0F0F0F0,0x0F0F0F0F) == uvec2(0x0F0F0F0F,0xF0F0F0F0)); + STATIC_CHECK((!ivec3(-1,0,1)) == bvec3(false, true, false)); - STATIC_CHECK(int2(1,2) + 3 == int2(4,5)); - STATIC_CHECK(int2(1,2) - 3 == int2(-2,-1)); - STATIC_CHECK(int2(1,2) * 3 == int2(3,6)); - STATIC_CHECK(int2(2,4) / 2 == int2(1,2)); - STATIC_CHECK((int2(11,12) & 6) == int2(2,4)); - STATIC_CHECK((int2(11,12) | 6) == int2(15,14)); - STATIC_CHECK((int2(11,12) ^ 6) == int2(13,10)); - STATIC_CHECK((int2(1,0) && 1) == bool2(1,0)); - STATIC_CHECK((int2(1,0) || 1) == bool2(1,1)); + STATIC_CHECK(ivec2(1,2) + 3 == ivec2(4,5)); + STATIC_CHECK(ivec2(1,2) - 3 == ivec2(-2,-1)); + STATIC_CHECK(ivec2(1,2) * 3 == ivec2(3,6)); + STATIC_CHECK(ivec2(2,4) / 2 == ivec2(1,2)); + STATIC_CHECK((ivec2(11,12) & 6) == ivec2(2,4)); + STATIC_CHECK((ivec2(11,12) | 6) == ivec2(15,14)); + STATIC_CHECK((ivec2(11,12) ^ 6) == ivec2(13,10)); + STATIC_CHECK((ivec2(1,0) && 1) == bvec2(1,0)); + STATIC_CHECK((ivec2(1,0) || 1) == bvec2(1,1)); - STATIC_CHECK(3 + int2(1,2) == int2(4,5)); - STATIC_CHECK(3 - int2(1,2) == int2(2,1)); - STATIC_CHECK(3 * int2(1,2) == int2(3,6)); - STATIC_CHECK(4 / int2(2,4) == int2(2,1)); - STATIC_CHECK((6 & int2(11,12)) == int2(2,4)); - STATIC_CHECK((6 | int2(11,12)) == int2(15,14)); - STATIC_CHECK((6 ^ int2(11,12)) == int2(13,10)); - STATIC_CHECK((1 && int2(1,0)) == bool2(1,0)); - STATIC_CHECK((1 || int2(1,0)) == bool2(1,1)); + STATIC_CHECK(3 + ivec2(1,2) == ivec2(4,5)); + STATIC_CHECK(3 - ivec2(1,2) == ivec2(2,1)); + STATIC_CHECK(3 * ivec2(1,2) == ivec2(3,6)); + STATIC_CHECK(4 / ivec2(2,4) == ivec2(2,1)); + STATIC_CHECK((6 & ivec2(11,12)) == ivec2(2,4)); + STATIC_CHECK((6 | ivec2(11,12)) == ivec2(15,14)); + STATIC_CHECK((6 ^ ivec2(11,12)) == ivec2(13,10)); + STATIC_CHECK((1 && ivec2(1,0)) == bvec2(1,0)); + STATIC_CHECK((1 || ivec2(1,0)) == bvec2(1,1)); - STATIC_CHECK(int2(1,2) + int2(3,4) == int2(4,6)); - STATIC_CHECK(int2(1,2) - int2(3,4) == int2(-2,-2)); - STATIC_CHECK(int2(1,2) * int2(3,4) == int2(3,8)); - STATIC_CHECK(int2(3,4) / int2(1,2) == int2(3,2)); - STATIC_CHECK((int2(6,7) & int2(11,12)) == int2(2,4)); - STATIC_CHECK((int2(6,7) | int2(11,12)) == int2(15,15)); - STATIC_CHECK((int2(6,7) ^ int2(11,12)) == int2(13,11)); - STATIC_CHECK((int2(0,1) && int2(1,0)) == bool2(0,0)); - STATIC_CHECK((int2(0,1) || int2(1,0)) == bool2(1,1)); + STATIC_CHECK(ivec2(1,2) + ivec2(3,4) == ivec2(4,6)); + STATIC_CHECK(ivec2(1,2) - ivec2(3,4) == ivec2(-2,-2)); + STATIC_CHECK(ivec2(1,2) * ivec2(3,4) == ivec2(3,8)); + STATIC_CHECK(ivec2(3,4) / ivec2(1,2) == ivec2(3,2)); + STATIC_CHECK((ivec2(6,7) & ivec2(11,12)) == ivec2(2,4)); + STATIC_CHECK((ivec2(6,7) | ivec2(11,12)) == ivec2(15,15)); + STATIC_CHECK((ivec2(6,7) ^ ivec2(11,12)) == ivec2(13,11)); + STATIC_CHECK((ivec2(0,1) && ivec2(1,0)) == bvec2(0,0)); + STATIC_CHECK((ivec2(0,1) || ivec2(1,0)) == bvec2(1,1)); { - int2 v{1,2}; + ivec2 v{1,2}; CHECK(&v == &(++v)); - CHECK(v == int2{2,3}); + CHECK(v == ivec2{2,3}); CHECK(&v == &(--v)); - CHECK(v == int2{1,2}); + CHECK(v == ivec2{1,2}); } { - int2 v{1,2}; - CHECK(v++ == int2{1,2}); - CHECK(v == int2{2,3}); - CHECK(v-- == int2{2,3}); - CHECK(v == int2{1,2}); + ivec2 v{1,2}; + CHECK(v++ == ivec2{1,2}); + CHECK(v == ivec2{2,3}); + CHECK(v-- == ivec2{2,3}); + CHECK(v == ivec2{1,2}); } { - int2 v{1,2}; + ivec2 v{1,2}; CHECK(&v == &(v += 3)); - CHECK(v == int2{4,5}); - CHECK(&v == &(v += int2{1,2})); - CHECK(v == int2{5,7}); + CHECK(v == ivec2{4,5}); + CHECK(&v == &(v += ivec2{1,2})); + CHECK(v == ivec2{5,7}); } { - int2 v{4,5}; + ivec2 v{4,5}; CHECK(&v == &(v -= 3)); - CHECK(v == int2{1,2}); - CHECK(&v == &(v -= int2{2,4})); - CHECK(v == int2{-1,-2}); + CHECK(v == ivec2{1,2}); + CHECK(&v == &(v -= ivec2{2,4})); + CHECK(v == ivec2{-1,-2}); } { - int2 v{1,2}; + ivec2 v{1,2}; CHECK(&v == &(v *= 3)); - CHECK(v == int2{3,6}); - CHECK(&v == &(v *= int2{2,3})); - CHECK(v == int2{6,18}); + CHECK(v == ivec2{3,6}); + CHECK(&v == &(v *= ivec2{2,3})); + CHECK(v == ivec2{6,18}); } { - int2 v{6,18}; + ivec2 v{6,18}; CHECK(&v == &(v /= 2)); - CHECK(v == int2{3,9}); - CHECK(&v == &(v /= int2{3,4})); - CHECK(v == int2{1,2}); + CHECK(v == ivec2{3,9}); + CHECK(&v == &(v /= ivec2{3,4})); + CHECK(v == ivec2{1,2}); } { - int2 v1{11,12}; + ivec2 v1{11,12}; CHECK(&v1 == &(v1 &= 6)); - CHECK(v1 == int2(2,4)); - int2 v2{6,7}; - CHECK(&v2 == &(v2 &= int2(11,12))); - CHECK(v2 == int2(2,4)); + CHECK(v1 == ivec2(2,4)); + ivec2 v2{6,7}; + CHECK(&v2 == &(v2 &= ivec2(11,12))); + CHECK(v2 == ivec2(2,4)); } { - int2 v1{11,12}; + ivec2 v1{11,12}; CHECK(&v1 == &(v1 |= 6)); - CHECK(v1 == int2(15,14)); - int2 v2{6,7}; - CHECK(&v2 == &(v2 |= int2(11,12))); - CHECK(v2 == int2(15,15)); + CHECK(v1 == ivec2(15,14)); + ivec2 v2{6,7}; + CHECK(&v2 == &(v2 |= ivec2(11,12))); + CHECK(v2 == ivec2(15,15)); } { - int2 v1{11,12}; + ivec2 v1{11,12}; CHECK(&v1 == &(v1 ^= 6)); - CHECK(v1 == int2(13,10)); - int2 v2{6,7}; - CHECK(&v2 == &(v2 ^= int2(11,12))); - CHECK(v2 == int2(13,11)); + CHECK(v1 == ivec2(13,10)); + ivec2 v2{6,7}; + CHECK(&v2 == &(v2 ^= ivec2(11,12))); + CHECK(v2 == ivec2(13,11)); } } SUBCASE("Operators2") { - STATIC_CHECK(int2{} + 0.0 == double2{}); - STATIC_CHECK(0.0 + int2{} == double2{}); - STATIC_CHECK(int2{} + double2{} == double2{}); - STATIC_CHECK(double2{} + int2{} == double2{}); + STATIC_CHECK(ivec2{} + 0.0 == dvec2{}); + STATIC_CHECK(0.0 + ivec2{} == dvec2{}); + STATIC_CHECK(ivec2{} + dvec2{} == dvec2{}); + STATIC_CHECK(dvec2{} + ivec2{} == dvec2{}); - STATIC_CHECK(int2{} - 0.0 == double2{}); - STATIC_CHECK(0.0 - int2{} == double2{}); - STATIC_CHECK(int2{} - double2{} == double2{}); - STATIC_CHECK(double2{} - int2{} == double2{}); + STATIC_CHECK(ivec2{} - 0.0 == dvec2{}); + STATIC_CHECK(0.0 - ivec2{} == dvec2{}); + STATIC_CHECK(ivec2{} - dvec2{} == dvec2{}); + STATIC_CHECK(dvec2{} - ivec2{} == dvec2{}); - STATIC_CHECK(int2{} * 1.0 == double2{}); - STATIC_CHECK(0.0 * int2{1} == double2{}); - STATIC_CHECK(int2{} * double2{1.0} == double2{}); - STATIC_CHECK(double2{} * int2{1} == double2{}); + STATIC_CHECK(ivec2{} * 1.0 == dvec2{}); + STATIC_CHECK(0.0 * ivec2{1} == dvec2{}); + STATIC_CHECK(ivec2{} * dvec2{1.0} == dvec2{}); + STATIC_CHECK(dvec2{} * ivec2{1} == dvec2{}); - STATIC_CHECK(int2{} / 1.0 == double2{}); - STATIC_CHECK(0.0 / int2{1} == double2{}); - STATIC_CHECK(int2{} / double2{1.0} == double2{}); - STATIC_CHECK(double2{} / int2{1} == double2{}); + STATIC_CHECK(ivec2{} / 1.0 == dvec2{}); + STATIC_CHECK(0.0 / ivec2{1} == dvec2{}); + STATIC_CHECK(ivec2{} / dvec2{1.0} == dvec2{}); + STATIC_CHECK(dvec2{} / ivec2{1} == dvec2{}); } SUBCASE("Conversions2") { { - STATIC_CHECK(double2(1) == double2(1,1)); - STATIC_CHECK(double2(1,2.f) == double2(1,2)); - STATIC_CHECK(double2(int2(1,2)) == double2(1,2)); - STATIC_CHECK(double2(int3(1,2,3)) == double2(1,2)); - STATIC_CHECK(double2(int4(1,2,3,4)) == double2(1,2)); + STATIC_CHECK(dvec2(1) == dvec2(1,1)); + STATIC_CHECK(dvec2(1,2.f) == dvec2(1,2)); + STATIC_CHECK(dvec2(ivec2(1,2)) == dvec2(1,2)); + STATIC_CHECK(dvec2(ivec3(1,2,3)) == dvec2(1,2)); + STATIC_CHECK(dvec2(ivec4(1,2,3,4)) == dvec2(1,2)); } { - STATIC_CHECK(double3(1) == double3(1,1,1)); - STATIC_CHECK(double3(1,2.f,3u) == double3(1,2,3)); - STATIC_CHECK(double3(int3(1,2,3)) == double3(1,2,3)); - STATIC_CHECK(double3(int4(1,2,3,4)) == double3(1,2,3)); + STATIC_CHECK(dvec3(1) == dvec3(1,1,1)); + STATIC_CHECK(dvec3(1,2.f,3u) == dvec3(1,2,3)); + STATIC_CHECK(dvec3(ivec3(1,2,3)) == dvec3(1,2,3)); + STATIC_CHECK(dvec3(ivec4(1,2,3,4)) == dvec3(1,2,3)); - STATIC_CHECK(double3(int2(1,2),3.f) == double3(1,2,3)); - STATIC_CHECK(double3(1.f,int2(2,3)) == double3(1,2,3)); + STATIC_CHECK(dvec3(ivec2(1,2),3.f) == dvec3(1,2,3)); + STATIC_CHECK(dvec3(1.f,ivec2(2,3)) == dvec3(1,2,3)); } { - STATIC_CHECK(double4(1) == double4(1,1,1,1)); - STATIC_CHECK(double4(1,2.f,3u,4) == double4(1,2,3,4)); - STATIC_CHECK(double4(int4(1,2,3,4)) == double4(1,2,3,4)); + STATIC_CHECK(dvec4(1) == dvec4(1,1,1,1)); + STATIC_CHECK(dvec4(1,2.f,3u,4) == dvec4(1,2,3,4)); + STATIC_CHECK(dvec4(ivec4(1,2,3,4)) == dvec4(1,2,3,4)); - STATIC_CHECK(double4(int2{1,2},3u,4.f) == double4(1,2,3,4)); - STATIC_CHECK(double4(1,int2{2,3},4.f) == double4(1,2,3,4)); - STATIC_CHECK(double4(1,2.f,int2{3,4}) == double4(1,2,3,4)); - STATIC_CHECK(double4(int2{1,2},double2{3,4}) == double4(1,2,3,4)); + STATIC_CHECK(dvec4(ivec2{1,2},3u,4.f) == dvec4(1,2,3,4)); + STATIC_CHECK(dvec4(1,ivec2{2,3},4.f) == dvec4(1,2,3,4)); + STATIC_CHECK(dvec4(1,2.f,ivec2{3,4}) == dvec4(1,2,3,4)); + STATIC_CHECK(dvec4(ivec2{1,2},dvec2{3,4}) == dvec4(1,2,3,4)); - STATIC_CHECK(double4(int3{1,2,3},4.f) == double4(1,2,3,4)); - STATIC_CHECK(double4(1.f,int3{2,3,4}) == double4(1,2,3,4)); + STATIC_CHECK(dvec4(ivec3{1,2,3},4.f) == dvec4(1,2,3,4)); + STATIC_CHECK(dvec4(1.f,ivec3{2,3,4}) == dvec4(1,2,3,4)); } } SUBCASE("Angle and Trigonometric Functions") { - STATIC_CHECK(radians(degrees(float2(12.13f))) == uapprox2(12.13f)); - STATIC_CHECK(degrees(radians(float2(12.13f))) == uapprox2(12.13f)); + STATIC_CHECK(radians(degrees(fvec2(12.13f))) == uapprox2(12.13f)); + STATIC_CHECK(degrees(radians(fvec2(12.13f))) == uapprox2(12.13f)); - (void)sin(float2(1.f)); - (void)cos(float2(1.f)); - (void)tan(float2(1.f)); + (void)sin(fvec2(1.f)); + (void)cos(fvec2(1.f)); + (void)tan(fvec2(1.f)); - (void)asin(float2(1.f)); - (void)acos(float2(1.f)); - (void)atan(float2(1.f)); - (void)atan2(float2(1.f), float2(1.f)); + (void)asin(fvec2(1.f)); + (void)acos(fvec2(1.f)); + (void)atan(fvec2(1.f)); + (void)atan2(fvec2(1.f), fvec2(1.f)); - (void)sinh(float2(1.f)); - (void)cosh(float2(1.f)); - (void)tanh(float2(1.f)); + (void)sinh(fvec2(1.f)); + (void)cosh(fvec2(1.f)); + (void)tanh(fvec2(1.f)); - (void)asinh(float2(1.f)); - (void)acosh(float2(1.f)); - (void)atanh(float2(1.f)); + (void)asinh(fvec2(1.f)); + (void)acosh(fvec2(1.f)); + (void)atanh(fvec2(1.f)); { - float2 out_ss{}, out_cs{}; - sincos(float2(10.f,15.f), &out_ss, &out_cs); + fvec2 out_ss{}, out_cs{}; + sincos(fvec2(10.f,15.f), &out_ss, &out_cs); CHECK(out_ss == uapprox2(sin(10.f), sin(15.f))); CHECK(out_cs == uapprox2(cos(10.f), cos(15.f))); - const auto [out_ss2, out_cs2] = sincos(float2(10.f,15.f)); + const auto [out_ss2, out_cs2] = sincos(fvec2(10.f,15.f)); CHECK(out_ss2 == uapprox2(sin(10.f), sin(15.f))); CHECK(out_cs2 == uapprox2(cos(10.f), cos(15.f))); } } SUBCASE("Exponential Functions") { - (void)pow(float2(1.f), float2(2.f)); - (void)exp(float2(1.f)); - (void)log(float2(1.f)); - (void)exp2(float2(1.f)); - (void)log2(float2(1.f)); - (void)sqrt(float2(1.f)); - (void)rsqrt(float2(1.f)); + (void)pow(fvec2(1.f), fvec2(2.f)); + (void)exp(fvec2(1.f)); + (void)log(fvec2(1.f)); + (void)exp2(fvec2(1.f)); + (void)log2(fvec2(1.f)); + (void)sqrt(fvec2(1.f)); + (void)rsqrt(fvec2(1.f)); } SUBCASE("Common Functions") { - STATIC_CHECK(abs(float2(1.f, -1.f)) == uapprox2(1.f,1.f)); - STATIC_CHECK(sqr(float2(2.f, -3.f)) == uapprox2(4.f,9.f)); - STATIC_CHECK(sign(float3(1.f, -1.f, 0.f)) == uapprox3(1.f,-1.f,0.f)); - STATIC_CHECK(rcp(float2(2.f, 4.f)) == uapprox2(0.5f,0.25f)); + STATIC_CHECK(abs(fvec2(1.f, -1.f)) == uapprox2(1.f,1.f)); + STATIC_CHECK(sqr(fvec2(2.f, -3.f)) == uapprox2(4.f,9.f)); + STATIC_CHECK(sign(fvec3(1.f, -1.f, 0.f)) == uapprox3(1.f,-1.f,0.f)); + STATIC_CHECK(rcp(fvec2(2.f, 4.f)) == uapprox2(0.5f,0.25f)); CHECK(copysign( - float4(2.f, -4.f, 2.f, -4.f), + fvec4(2.f, -4.f, 2.f, -4.f), 5.f) == uapprox4(2.f, 4.f, 2.f, 4.f)); CHECK(copysign( - float4(2.f, -4.f, 2.f, -4.f), + fvec4(2.f, -4.f, 2.f, -4.f), -5.f) == uapprox4(-2.f, -4.f, -2.f, -4.f)); CHECK(copysign( - float4(2.f, -4.f, 2.f, -4.f), - float4(10.f, 5.f, -4.f, -0.4f)) + fvec4(2.f, -4.f, 2.f, -4.f), + fvec4(10.f, 5.f, -4.f, -0.4f)) == uapprox4(2.f, 4.f, -2.f, -4.f)); - (void)floor(float2(1.f, -1.f)); - (void)trunc(float2(1.f, -1.f)); - (void)round(float2(1.f, -1.f)); - (void)ceil(float2(1.f, -1.f)); - (void)fract(float2(1.f, -1.f)); + (void)floor(fvec2(1.f, -1.f)); + (void)trunc(fvec2(1.f, -1.f)); + (void)round(fvec2(1.f, -1.f)); + (void)ceil(fvec2(1.f, -1.f)); + (void)fract(fvec2(1.f, -1.f)); - CHECK(fmod(float2(1.7f), 1.2f) == uapprox2(0.5f)); - CHECK(fmod(float2(1.7f), float2(1.2f)) == uapprox2(0.5f)); + CHECK(fmod(fvec2(1.7f), 1.2f) == uapprox2(0.5f)); + CHECK(fmod(fvec2(1.7f), fvec2(1.2f)) == uapprox2(0.5f)); { - float2 out_i{}; - CHECK(modf(float2(1.7f), &out_i) == uapprox2(0.7f)); + fvec2 out_i{}; + CHECK(modf(fvec2(1.7f), &out_i) == uapprox2(0.7f)); CHECK(out_i.x == uapprox(1.f)); } - STATIC_CHECK(min(int2(1,2)) == 1); - STATIC_CHECK(min(int2(1,2), 1) == int2(1,1)); - STATIC_CHECK(min(1, int2(1,2)) == int2(1,1)); - STATIC_CHECK(min(int2(1,1), int2(0,2)) == int2(0,1)); + STATIC_CHECK(min(ivec2(1,2)) == 1); + STATIC_CHECK(min(ivec2(1,2), 1) == ivec2(1,1)); + STATIC_CHECK(min(1, ivec2(1,2)) == ivec2(1,1)); + STATIC_CHECK(min(ivec2(1,1), ivec2(0,2)) == ivec2(0,1)); - STATIC_CHECK(max(int2(1,2)) == 2); - STATIC_CHECK(max(int2(1,2), 1) == int2(1,2)); - STATIC_CHECK(max(1, int2(1,2)) == int2(1,2)); - STATIC_CHECK(max(int2(1,1), int2(0,2)) == int2(1,2)); + STATIC_CHECK(max(ivec2(1,2)) == 2); + STATIC_CHECK(max(ivec2(1,2), 1) == ivec2(1,2)); + STATIC_CHECK(max(1, ivec2(1,2)) == ivec2(1,2)); + STATIC_CHECK(max(ivec2(1,1), ivec2(0,2)) == ivec2(1,2)); - STATIC_CHECK(clamp(int2(1,2), 0, 1) == int2(1,1)); - STATIC_CHECK(clamp(int2(1,2), int2(0), int2(1)) == int2(1,1)); + STATIC_CHECK(clamp(ivec2(1,2), 0, 1) == ivec2(1,1)); + STATIC_CHECK(clamp(ivec2(1,2), ivec2(0), ivec2(1)) == ivec2(1,1)); - STATIC_CHECK(saturate(float3(-1.f,0.5,1.5f)) == uapprox3(0.f,0.5f,1.f)); + STATIC_CHECK(saturate(fvec3(-1.f,0.5,1.5f)) == uapprox3(0.f,0.5f,1.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), 0.f) == uapprox2(2.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), 0.5f) == uapprox2(6.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), 1.f) == uapprox2(10.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), 0.f) == uapprox2(2.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), 0.5f) == uapprox2(6.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), 1.f) == uapprox2(10.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), 0.f, 1.f) == uapprox2(10.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), 1.f, 0.f) == uapprox2(2.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), 0.5f, 0.2f) == uapprox2(3.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), 0.f, 1.f) == uapprox2(10.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), 1.f, 0.f) == uapprox2(2.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), 0.5f, 0.2f) == uapprox2(3.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), float2(0.f)) == uapprox2(2.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), float2(0.5f)) == uapprox2(6.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), float2(1.f)) == uapprox2(10.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), fvec2(0.f)) == uapprox2(2.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), fvec2(0.5f)) == uapprox2(6.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), fvec2(1.f)) == uapprox2(10.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), float2(0.f), float2(1.f)) == uapprox2(10.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), float2(1.f), float2(0.f)) == uapprox2(2.f)); - STATIC_CHECK(lerp(float2(2.f), float2(10.f), float2(0.5f), float2(0.2f)) == uapprox2(3.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), fvec2(0.f), fvec2(1.f)) == uapprox2(10.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), fvec2(1.f), fvec2(0.f)) == uapprox2(2.f)); + STATIC_CHECK(lerp(fvec2(2.f), fvec2(10.f), fvec2(0.5f), fvec2(0.2f)) == uapprox2(3.f)); - STATIC_CHECK(step(0.5f, float2(0.4f)) == uapprox2(0.f)); - STATIC_CHECK(step(0.5f, float2(0.6f)) == uapprox2(1.f)); - STATIC_CHECK(step(float2(0.5f), float2(0.4f)) == uapprox2(0.f)); - STATIC_CHECK(step(float2(0.5f), float2(0.6f)) == uapprox2(1.f)); + STATIC_CHECK(step(0.5f, fvec2(0.4f)) == uapprox2(0.f)); + STATIC_CHECK(step(0.5f, fvec2(0.6f)) == uapprox2(1.f)); + STATIC_CHECK(step(fvec2(0.5f), fvec2(0.4f)) == uapprox2(0.f)); + STATIC_CHECK(step(fvec2(0.5f), fvec2(0.6f)) == uapprox2(1.f)); - STATIC_CHECK(smoothstep(0.f, 1.f, float2(0.1f)) == uapprox2(0.028f)); - STATIC_CHECK(smoothstep(float2(0.f), float2(1.f), float2(0.1f)) == uapprox2(0.028f)); + STATIC_CHECK(smoothstep(0.f, 1.f, fvec2(0.1f)) == uapprox2(0.028f)); + STATIC_CHECK(smoothstep(fvec2(0.f), fvec2(1.f), fvec2(0.1f)) == uapprox2(0.028f)); } SUBCASE("Geometric Functions") { - CHECK(length(float2(10.f,0.f)) == uapprox(10.f)); - CHECK(length(float2(-10.f,0.f)) == uapprox(10.f)); + CHECK(length(fvec2(10.f,0.f)) == uapprox(10.f)); + CHECK(length(fvec2(-10.f,0.f)) == uapprox(10.f)); - CHECK(rlength(float2(10.f,0.f)) == uapprox(0.1f)); - CHECK(rlength(float2(-10.f,0.f)) == uapprox(0.1f)); + CHECK(rlength(fvec2(10.f,0.f)) == uapprox(0.1f)); + CHECK(rlength(fvec2(-10.f,0.f)) == uapprox(0.1f)); - STATIC_CHECK(length2(float2(10.f,0.f)) == uapprox(100.f)); - STATIC_CHECK(length2(float2(-10.f,0.f)) == uapprox(100.f)); + STATIC_CHECK(length2(fvec2(10.f,0.f)) == uapprox(100.f)); + STATIC_CHECK(length2(fvec2(-10.f,0.f)) == uapprox(100.f)); - STATIC_CHECK(rlength2(float2(10.f,0.f)) == uapprox(0.01f)); - STATIC_CHECK(rlength2(float2(-10.f,0.f)) == uapprox(0.01f)); + STATIC_CHECK(rlength2(fvec2(10.f,0.f)) == uapprox(0.01f)); + STATIC_CHECK(rlength2(fvec2(-10.f,0.f)) == uapprox(0.01f)); - CHECK(distance(float2(5.f,0.f), float2(10.f,0.f)) == uapprox(5.f)); - CHECK(distance(float2(-5.f,0.f), float2(-10.f,0.f)) == uapprox(5.f)); + CHECK(distance(fvec2(5.f,0.f), fvec2(10.f,0.f)) == uapprox(5.f)); + CHECK(distance(fvec2(-5.f,0.f), fvec2(-10.f,0.f)) == uapprox(5.f)); - STATIC_CHECK(distance2(float2(5.f,0.f), float2(10.f,0.f)) == uapprox(25.f)); - STATIC_CHECK(distance2(float2(-5.f,0.f), float2(-10.f,0.f)) == uapprox(25.f)); + STATIC_CHECK(distance2(fvec2(5.f,0.f), fvec2(10.f,0.f)) == uapprox(25.f)); + STATIC_CHECK(distance2(fvec2(-5.f,0.f), fvec2(-10.f,0.f)) == uapprox(25.f)); - STATIC_CHECK(dot(int2(1,2),int2(3,4)) == 11); - STATIC_CHECK(dot(int2(1,2),double2(3,4)) == uapprox(11.0)); - STATIC_CHECK(dot(double2(3,4),int2(1,2)) == uapprox(11.0)); + STATIC_CHECK(dot(ivec2(1,2),ivec2(3,4)) == 11); + STATIC_CHECK(dot(ivec2(1,2),dvec2(3,4)) == uapprox(11.0)); + STATIC_CHECK(dot(dvec2(3,4),ivec2(1,2)) == uapprox(11.0)); - STATIC_CHECK(cross(int2(1,0),int2(0,1)) == 1); - STATIC_CHECK(cross(int2(1,0),double2(0,1)) == uapprox(1.0)); - STATIC_CHECK(cross(double2(0,1),int2(1,0)) == uapprox(-1.0)); + STATIC_CHECK(cross(ivec2(1,0),ivec2(0,1)) == 1); + STATIC_CHECK(cross(ivec2(1,0),dvec2(0,1)) == uapprox(1.0)); + STATIC_CHECK(cross(dvec2(0,1),ivec2(1,0)) == uapprox(-1.0)); - STATIC_CHECK(cross(int3(1,0,0),int3(0,1,0)) == int3(0,0,1)); - STATIC_CHECK(cross(int3(1,0,0),double3(0,1,0)) == uapprox3(0.0,0.0,1.0)); - STATIC_CHECK(cross(double3(0,1,0),int3(1,0,0)) == uapprox3(0.0,0.0,-1.0)); + STATIC_CHECK(cross(ivec3(1,0,0),ivec3(0,1,0)) == ivec3(0,0,1)); + STATIC_CHECK(cross(ivec3(1,0,0),dvec3(0,1,0)) == uapprox3(0.0,0.0,1.0)); + STATIC_CHECK(cross(dvec3(0,1,0),ivec3(1,0,0)) == uapprox3(0.0,0.0,-1.0)); - CHECK(normalize(float2(0.5f,0.f)).x == uapprox(1.f)); + CHECK(normalize(fvec2(0.5f,0.f)).x == uapprox(1.f)); - STATIC_CHECK(faceforward(float2(1.f), float2(2.f), float2(3.f)).x == uapprox(-1.f)); - STATIC_CHECK(reflect(float2(1.f), float2(2.f)).x == uapprox(-15.f)); - CHECK(refract(float2(1.f), float2(2.f), 1.f).x == uapprox(-15.f)); + STATIC_CHECK(faceforward(fvec2(1.f), fvec2(2.f), fvec2(3.f)).x == uapprox(-1.f)); + STATIC_CHECK(reflect(fvec2(1.f), fvec2(2.f)).x == uapprox(-15.f)); + CHECK(refract(fvec2(1.f), fvec2(2.f), 1.f).x == uapprox(-15.f)); } SUBCASE("Relational Functions") { - STATIC_CHECK_FALSE(any(bool2(false, false))); - STATIC_CHECK(any(bool2(true, false))); - STATIC_CHECK(any(bool2(false, true))); - STATIC_CHECK(any(bool2(true, true))); + STATIC_CHECK_FALSE(any(bvec2(false, false))); + STATIC_CHECK(any(bvec2(true, false))); + STATIC_CHECK(any(bvec2(false, true))); + STATIC_CHECK(any(bvec2(true, true))); - STATIC_CHECK_FALSE(any(int2(0, 0))); - STATIC_CHECK(any(int2(1, 0))); - STATIC_CHECK(any(int2(0, 1))); - STATIC_CHECK(any(int2(1, 1))); + STATIC_CHECK_FALSE(any(ivec2(0, 0))); + STATIC_CHECK(any(ivec2(1, 0))); + STATIC_CHECK(any(ivec2(0, 1))); + STATIC_CHECK(any(ivec2(1, 1))); - STATIC_CHECK_FALSE(all(bool2(false, false))); - STATIC_CHECK_FALSE(all(bool2(true, false))); - STATIC_CHECK_FALSE(all(bool2(false, true))); - STATIC_CHECK(all(bool2(true, true))); + STATIC_CHECK_FALSE(all(bvec2(false, false))); + STATIC_CHECK_FALSE(all(bvec2(true, false))); + STATIC_CHECK_FALSE(all(bvec2(false, true))); + STATIC_CHECK(all(bvec2(true, true))); - STATIC_CHECK_FALSE(all(int2(0, 0))); - STATIC_CHECK_FALSE(all(int2(1, 0))); - STATIC_CHECK_FALSE(all(int2(0, 1))); - STATIC_CHECK(all(int2(1, 1))); + STATIC_CHECK_FALSE(all(ivec2(0, 0))); + STATIC_CHECK_FALSE(all(ivec2(1, 0))); + STATIC_CHECK_FALSE(all(ivec2(0, 1))); + STATIC_CHECK(all(ivec2(1, 1))); - STATIC_CHECK(approx(int3(1,1,1), int3(0,1,2)) == bool3(false, true, false)); - STATIC_CHECK(approx(int4(1,1,1,1), int4(0,1,2,3), 0) == bool4(false, true, false, false)); - STATIC_CHECK(approx(int4(1,1,1,1), int4(0,1,2,3), 1) == bool4(true, true, true, false)); - STATIC_CHECK(approx(int4(1,1,1,1), int4(0,1,2,3), 2) == bool4(true, true, true, true)); + STATIC_CHECK(approx(ivec3(1,1,1), ivec3(0,1,2)) == bvec3(false, true, false)); + STATIC_CHECK(approx(ivec4(1,1,1,1), ivec4(0,1,2,3), 0) == bvec4(false, true, false, false)); + STATIC_CHECK(approx(ivec4(1,1,1,1), ivec4(0,1,2,3), 1) == bvec4(true, true, true, false)); + STATIC_CHECK(approx(ivec4(1,1,1,1), ivec4(0,1,2,3), 2) == bvec4(true, true, true, true)); - STATIC_CHECK(less(int3(1,1,1), int3(0,1,2)) == bool3(false, false, true)); - STATIC_CHECK(less_equal(int3(1,1,1), int3(0,1,2)) == bool3(false, true, true)); - STATIC_CHECK(greater(int3(1,1,1), int3(0,1,2)) == bool3(true, false, false)); - STATIC_CHECK(greater_equal(int3(1,1,1), int3(0,1,2)) == bool3(true, true, false)); + STATIC_CHECK(less(ivec3(1,1,1), ivec3(0,1,2)) == bvec3(false, false, true)); + STATIC_CHECK(less_equal(ivec3(1,1,1), ivec3(0,1,2)) == bvec3(false, true, true)); + STATIC_CHECK(greater(ivec3(1,1,1), ivec3(0,1,2)) == bvec3(true, false, false)); + STATIC_CHECK(greater_equal(ivec3(1,1,1), ivec3(0,1,2)) == bvec3(true, true, false)); - STATIC_CHECK(equal_to(int3(1,1,1), int3(0,1,2)) == bool3(false, true, false)); - STATIC_CHECK(not_equal_to(int3(1,1,1), int3(0,1,2)) == bool3(true, false, true)); + STATIC_CHECK(equal_to(ivec3(1,1,1), ivec3(0,1,2)) == bvec3(false, true, false)); + STATIC_CHECK(not_equal_to(ivec3(1,1,1), ivec3(0,1,2)) == bvec3(true, false, true)); } } diff --git a/untests/vmath_vec_tests.cpp b/untests/vmath_vec_tests.cpp index 47c8647..2e80d19 100644 --- a/untests/vmath_vec_tests.cpp +++ b/untests/vmath_vec_tests.cpp @@ -14,13 +14,13 @@ namespace TEST_CASE("vmath/vec") { SUBCASE("size/sizeof") { - STATIC_CHECK(int2{}.size == 2); - STATIC_CHECK(int3{}.size == 3); - STATIC_CHECK(int4{}.size == 4); + STATIC_CHECK(ivec2{}.size == 2); + STATIC_CHECK(ivec3{}.size == 3); + STATIC_CHECK(ivec4{}.size == 4); - STATIC_CHECK(sizeof(int2{}) == sizeof(int) * 2); - STATIC_CHECK(sizeof(int3{}) == sizeof(int) * 3); - STATIC_CHECK(sizeof(int4{}) == sizeof(int) * 4); + STATIC_CHECK(sizeof(ivec2{}) == sizeof(int) * 2); + STATIC_CHECK(sizeof(ivec3{}) == sizeof(int) * 3); + STATIC_CHECK(sizeof(ivec4{}) == sizeof(int) * 4); } SUBCASE("guides") { @@ -56,102 +56,102 @@ TEST_CASE("vmath/vec") { CHECK(i4.z == 0); CHECK(i4.w == 0); - STATIC_CHECK(int2() == int2(0,0)); - STATIC_CHECK(int3() == int3(0,0,0)); - STATIC_CHECK(int4() == int4(0,0,0,0)); + STATIC_CHECK(ivec2() == ivec2(0,0)); + STATIC_CHECK(ivec3() == ivec3(0,0,0)); + STATIC_CHECK(ivec4() == ivec4(0,0,0,0)); - (void)int2(uninit); - (void)int3(uninit); - (void)int4(uninit); + (void)ivec2(uninit); + (void)ivec3(uninit); + (void)ivec4(uninit); - STATIC_CHECK(int2(zero_init) == int2(0,0)); - STATIC_CHECK(int3(zero_init) == int3(0,0,0)); - STATIC_CHECK(int4(zero_init) == int4(0,0,0,0)); + STATIC_CHECK(ivec2(zero_init) == ivec2(0,0)); + STATIC_CHECK(ivec3(zero_init) == ivec3(0,0,0)); + STATIC_CHECK(ivec4(zero_init) == ivec4(0,0,0,0)); - STATIC_CHECK(int2(unit_init) == int2(1,1)); - STATIC_CHECK(int3(unit_init) == int3(1,1,1)); - STATIC_CHECK(int4(unit_init) == int4(1,1,1,1)); + STATIC_CHECK(ivec2(unit_init) == ivec2(1,1)); + STATIC_CHECK(ivec3(unit_init) == ivec3(1,1,1)); + STATIC_CHECK(ivec4(unit_init) == ivec4(1,1,1,1)); } { - STATIC_CHECK(int2().x == 0); - STATIC_CHECK(int2().y == 0); + STATIC_CHECK(ivec2().x == 0); + STATIC_CHECK(ivec2().y == 0); - STATIC_CHECK(int2(1).x == 1); - STATIC_CHECK(int2(1).y == 1); + STATIC_CHECK(ivec2(1).x == 1); + STATIC_CHECK(ivec2(1).y == 1); - STATIC_CHECK(int2(1,2).x == 1); - STATIC_CHECK(int2(1,2).y == 2); + STATIC_CHECK(ivec2(1,2).x == 1); + STATIC_CHECK(ivec2(1,2).y == 2); } { - constexpr int2 v(1,2); - constexpr int2 v2 = v; - STATIC_CHECK(v2 == int2(1,2)); + constexpr ivec2 v(1,2); + constexpr ivec2 v2 = v; + STATIC_CHECK(v2 == ivec2(1,2)); } { - constexpr int2 v(1,2); - constexpr int2 v2 = std::move(v); - STATIC_CHECK(v2 == int2(1,2)); + constexpr ivec2 v(1,2); + constexpr ivec2 v2 = std::move(v); + STATIC_CHECK(v2 == ivec2(1,2)); } { - STATIC_CHECK(int2(1) == int2(1,1)); - STATIC_CHECK(int2(1,2) == int2(1,2)); - STATIC_CHECK(int2(int2(1,2)) == int2(1,2)); - STATIC_CHECK(int2(int3(1,2,3)) == int2(1,2)); - STATIC_CHECK(int2(int4(1,2,3,4)) == int2(1,2)); + STATIC_CHECK(ivec2(1) == ivec2(1,1)); + STATIC_CHECK(ivec2(1,2) == ivec2(1,2)); + STATIC_CHECK(ivec2(ivec2(1,2)) == ivec2(1,2)); + STATIC_CHECK(ivec2(ivec3(1,2,3)) == ivec2(1,2)); + STATIC_CHECK(ivec2(ivec4(1,2,3,4)) == ivec2(1,2)); - STATIC_CHECK(int3(1) == int3(1,1,1)); - STATIC_CHECK(int3(1,2,3) == int3(1,2,3)); - STATIC_CHECK(int3(int2(1,2),3) == int3(1,2,3)); - STATIC_CHECK(int3(1,int2(2,3)) == int3(1,2,3)); - STATIC_CHECK(int3(int3(1,2,3)) == int3(1,2,3)); - STATIC_CHECK(int3(int4(1,2,3,4)) == int3(1,2,3)); + STATIC_CHECK(ivec3(1) == ivec3(1,1,1)); + STATIC_CHECK(ivec3(1,2,3) == ivec3(1,2,3)); + STATIC_CHECK(ivec3(ivec2(1,2),3) == ivec3(1,2,3)); + STATIC_CHECK(ivec3(1,ivec2(2,3)) == ivec3(1,2,3)); + STATIC_CHECK(ivec3(ivec3(1,2,3)) == ivec3(1,2,3)); + STATIC_CHECK(ivec3(ivec4(1,2,3,4)) == ivec3(1,2,3)); - STATIC_CHECK(int4(1) == int4(1,1,1,1)); - STATIC_CHECK(int4(1,2,3,4) == int4(1,2,3,4)); - STATIC_CHECK(int4(int2(1,2),3,4) == int4(1,2,3,4)); - STATIC_CHECK(int4(1,int2(2,3),4) == int4(1,2,3,4)); - STATIC_CHECK(int4(1,2,int2(3,4)) == int4(1,2,3,4)); - STATIC_CHECK(int4(int2(1,2),int2(3,4)) == int4(1,2,3,4)); - STATIC_CHECK(int4(int3(1,2,3),4) == int4(1,2,3,4)); - STATIC_CHECK(int4(1,int3(2,3,4)) == int4(1,2,3,4)); + STATIC_CHECK(ivec4(1) == ivec4(1,1,1,1)); + STATIC_CHECK(ivec4(1,2,3,4) == ivec4(1,2,3,4)); + STATIC_CHECK(ivec4(ivec2(1,2),3,4) == ivec4(1,2,3,4)); + STATIC_CHECK(ivec4(1,ivec2(2,3),4) == ivec4(1,2,3,4)); + STATIC_CHECK(ivec4(1,2,ivec2(3,4)) == ivec4(1,2,3,4)); + STATIC_CHECK(ivec4(ivec2(1,2),ivec2(3,4)) == ivec4(1,2,3,4)); + STATIC_CHECK(ivec4(ivec3(1,2,3),4) == ivec4(1,2,3,4)); + STATIC_CHECK(ivec4(1,ivec3(2,3,4)) == ivec4(1,2,3,4)); } } SUBCASE("operator=") { { - int2 v(1,2); - int2 v2; + ivec2 v(1,2); + ivec2 v2; v2 = v; - CHECK(v2 == int2(1,2)); + CHECK(v2 == ivec2(1,2)); } { - int2 v(1,2); - int2 v2; + ivec2 v(1,2); + ivec2 v2; v2 = std::move(v); - CHECK(v2 == int2(1,2)); + CHECK(v2 == ivec2(1,2)); } } SUBCASE("swap") { { - int2 v1(1,2); - int2 v2(4,5); + ivec2 v1(1,2); + ivec2 v2(4,5); v1.swap(v2); - CHECK(v1 == int2(4,5)); - CHECK(v2 == int2(1,2)); + CHECK(v1 == ivec2(4,5)); + CHECK(v2 == ivec2(1,2)); } { - int2 v1(1,2); - int2 v2(4,5); + ivec2 v1(1,2); + ivec2 v2(4,5); swap(v1, v2); - CHECK(v1 == int2(4,5)); - CHECK(v2 == int2(1,2)); + CHECK(v1 == ivec2(4,5)); + CHECK(v2 == ivec2(1,2)); } } SUBCASE("iter") { { - int2 v{1,2}; + ivec2 v{1,2}; CHECK(*v.begin() == 1); CHECK(*(v.begin() + 1) == 2); @@ -182,12 +182,12 @@ TEST_CASE("vmath/vec") { CHECK(v.crend() - 2 == v.crbegin()); *v.begin() = 3; - CHECK(v == int2{3,2}); + CHECK(v == ivec2{3,2}); *v.rbegin() = 4; - CHECK(v == int2{3,4}); + CHECK(v == ivec2{3,4}); } { - const int2 v{1,2}; + const ivec2 v{1,2}; CHECK(*v.begin() == 1); CHECK(*(v.begin() + 1) == 2); @@ -221,70 +221,70 @@ TEST_CASE("vmath/vec") { SUBCASE("data") { { - int2 i2; + ivec2 i2; CHECK(i2.data() == &i2[0]); - int3 i3; + ivec3 i3; CHECK(i3.data() == &i3[0]); - int4 i4; + ivec4 i4; CHECK(i4.data() == &i4[0]); } { - const int2 i2; + const ivec2 i2; CHECK(i2.data() == &i2[0]); - const int3 i3; + const ivec3 i3; CHECK(i3.data() == &i3[0]); - const int4 i4; + const ivec4 i4; CHECK(i4.data() == &i4[0]); } } SUBCASE("operator[]") { { - STATIC_CHECK(int2(1,2).x == 1); - STATIC_CHECK(int2(1,2).y == 2); + STATIC_CHECK(ivec2(1,2).x == 1); + STATIC_CHECK(ivec2(1,2).y == 2); - STATIC_CHECK(int3(1,2,3).x == 1); - STATIC_CHECK(int3(1,2,3).y == 2); - STATIC_CHECK(int3(1,2,3).z == 3); + STATIC_CHECK(ivec3(1,2,3).x == 1); + STATIC_CHECK(ivec3(1,2,3).y == 2); + STATIC_CHECK(ivec3(1,2,3).z == 3); - STATIC_CHECK(int4(1,2,3,4).x == 1); - STATIC_CHECK(int4(1,2,3,4).y == 2); - STATIC_CHECK(int4(1,2,3,4).z == 3); - STATIC_CHECK(int4(1,2,3,4).w == 4); + STATIC_CHECK(ivec4(1,2,3,4).x == 1); + STATIC_CHECK(ivec4(1,2,3,4).y == 2); + STATIC_CHECK(ivec4(1,2,3,4).z == 3); + STATIC_CHECK(ivec4(1,2,3,4).w == 4); } { - STATIC_CHECK(int2(1,2)[0] == 1); - STATIC_CHECK(int2(1,2)[1] == 2); + STATIC_CHECK(ivec2(1,2)[0] == 1); + STATIC_CHECK(ivec2(1,2)[1] == 2); } { - int2 v; + ivec2 v; v.x = 1; v.y = 2; - CHECK(v == int2(1,2)); + CHECK(v == ivec2(1,2)); CHECK(std::as_const(v).at(0) == 1); CHECK(std::as_const(v).at(1) == 2); } { - int3 v; + ivec3 v; v.x = 1; v.y = 2; v.z = 3; - CHECK(v == int3(1,2,3)); + CHECK(v == ivec3(1,2,3)); CHECK(std::as_const(v).at(0) == 1); CHECK(std::as_const(v).at(1) == 2); CHECK(std::as_const(v).at(2) == 3); } { - int4 v; + ivec4 v; v.x = 1; v.y = 2; v.z = 3; v.w = 4; - CHECK(v == int4(1,2,3,4)); + CHECK(v == ivec4(1,2,3,4)); CHECK(std::as_const(v).at(0) == 1); CHECK(std::as_const(v).at(1) == 2); CHECK(std::as_const(v).at(2) == 3); @@ -293,30 +293,30 @@ TEST_CASE("vmath/vec") { } SUBCASE("at") { - STATIC_CHECK(int2(1,2).at(0) == 1); - STATIC_CHECK(int2(1,2).at(1) == 2); + STATIC_CHECK(ivec2(1,2).at(0) == 1); + STATIC_CHECK(ivec2(1,2).at(1) == 2); #ifndef VMATH_HPP_NO_EXCEPTIONS - CHECK_THROWS_AS((void)int2(1,2).at(2), std::out_of_range); + CHECK_THROWS_AS((void)ivec2(1,2).at(2), std::out_of_range); #endif } SUBCASE("operator==/operator!=") { - STATIC_CHECK(int2(1,2) == int2(1,2)); - STATIC_CHECK_FALSE(int2(1,2) == int2(2,2)); - STATIC_CHECK_FALSE(int2(1,2) == int2(1,3)); + STATIC_CHECK(ivec2(1,2) == ivec2(1,2)); + STATIC_CHECK_FALSE(ivec2(1,2) == ivec2(2,2)); + STATIC_CHECK_FALSE(ivec2(1,2) == ivec2(1,3)); - STATIC_CHECK_FALSE(int2(1,2) != int2(1,2)); - STATIC_CHECK(int2(1,2) != int2(2,2)); - STATIC_CHECK(int2(1,2) != int2(1,3)); + STATIC_CHECK_FALSE(ivec2(1,2) != ivec2(1,2)); + STATIC_CHECK(ivec2(1,2) != ivec2(2,2)); + STATIC_CHECK(ivec2(1,2) != ivec2(1,3)); } SUBCASE("operator<") { - STATIC_CHECK_FALSE(int2(1,2) < int2(1,2)); + STATIC_CHECK_FALSE(ivec2(1,2) < ivec2(1,2)); - STATIC_CHECK(int2(1,1) < int2(1,2)); - STATIC_CHECK_FALSE(int2(1,2) < int2(1,1)); + STATIC_CHECK(ivec2(1,1) < ivec2(1,2)); + STATIC_CHECK_FALSE(ivec2(1,2) < ivec2(1,1)); - STATIC_CHECK(int2(0,3) < int2(1,2)); - STATIC_CHECK_FALSE(int2(1,2) < int2(0,3)); + STATIC_CHECK(ivec2(0,3) < ivec2(1,2)); + STATIC_CHECK_FALSE(ivec2(1,2) < ivec2(0,3)); } }