math: remove contains_nan and is_finite

This commit is contained in:
2019-12-17 00:46:48 +07:00
parent e6578a4265
commit 36f516ab1c
49 changed files with 7 additions and 318 deletions

View File

@@ -453,23 +453,6 @@ namespace e2d::math
return v + 1;
}
//
// is_finite
//
template < typename T >
std::enable_if_t<std::is_integral_v<T>, bool>
is_finite(T v) noexcept {
E2D_UNUSED(v);
return true;
}
template < typename T >
std::enable_if_t<std::is_floating_point_v<T>, bool>
is_finite(T v) noexcept {
return std::isfinite(v);
}
//
// abs/abs_to_unsigned
//

View File

@@ -420,14 +420,4 @@ namespace e2d::math
const vec3<T> max = maximum(r);
return math::inverse_lerp(min, max, p);
}
//
// contains_nan
//
template < typename T >
bool contains_nan(const aabb<T>& r) noexcept {
return math::contains_nan(r.position)
|| math::contains_nan(r.size);
}
}

View File

@@ -364,15 +364,4 @@ namespace e2d::math
mm[0], mm[2],
mm[1], mm[3]};
}
//
// contains_nan
//
template < typename T >
bool contains_nan(const mat2<T>& v) noexcept {
return
math::contains_nan(v.rows[0]) ||
math::contains_nan(v.rows[1]);
}
}

View File

@@ -493,16 +493,4 @@ namespace e2d::math
mm[1], mm[4], mm[7],
mm[2], mm[5], mm[8]};
}
//
// contains_nan
//
template < typename T >
bool contains_nan(const mat3<T>& v) noexcept {
return
math::contains_nan(v.rows[0]) ||
math::contains_nan(v.rows[1]) ||
math::contains_nan(v.rows[2]);
}
}

View File

@@ -750,17 +750,4 @@ namespace e2d::math
mm[2], mm[6], mm[10], mm[14],
mm[3], mm[7], mm[11], mm[15]};
}
//
// contains_nan
//
template < typename T >
bool contains_nan(const mat4<T>& v) noexcept {
return
math::contains_nan(v.rows[0]) ||
math::contains_nan(v.rows[1]) ||
math::contains_nan(v.rows[2]) ||
math::contains_nan(v.rows[3]);
}
}

View File

@@ -417,14 +417,4 @@ namespace e2d::math
const vec2<T> max = maximum(r);
return math::inverse_lerp(min, max, p);
}
//
// contains_nan
//
template < typename T >
bool contains_nan(const rect<T>& r) noexcept {
return math::contains_nan(r.position)
|| math::contains_nan(r.size);
}
}

View File

@@ -141,11 +141,4 @@ namespace e2d::math
&& math::approximately(l.rotation, r.rotation, precision)
&& math::approximately(l.scale, r.scale, precision);
}
template < typename T >
bool contains_nan(const trs2<T>& v) noexcept {
return contains_nan(v.translation)
|| contains_nan(v.rotation)
|| contains_nan(v.scale);
}
}

View File

@@ -138,11 +138,4 @@ namespace e2d::math
&& math::approximately(l.rotation, r.rotation, precision)
&& math::approximately(l.scale, r.scale, precision);
}
template < typename T >
bool contains_nan(const trs3<T>& v) noexcept {
return contains_nan(v.translation)
|| contains_nan(v.rotation)
|| contains_nan(v.scale);
}
}

View File

@@ -278,13 +278,4 @@ namespace e2d::math
unit<T, Tag> saturated(const unit<T, Tag>& u) noexcept {
return clamped(u, {T(0), Tag{}}, {T(1), Tag{}});
}
//
// contains_nan
//
template < typename T, typename Tag >
bool contains_nan(const unit<T, Tag>& u) noexcept {
return !math::is_finite(u.value);
}
}

View File

@@ -528,15 +528,4 @@ namespace e2d::math
math::inverse_lerp(l.x, r.x, v.x),
math::inverse_lerp(l.y, r.y, v.y)};
}
//
// contains_nan
//
template < typename T >
bool contains_nan(const vec2<T>& v) noexcept {
return
!math::is_finite(v.x) ||
!math::is_finite(v.y);
}
}

View File

@@ -585,16 +585,4 @@ namespace e2d::math
math::inverse_lerp(l.y, r.y, v.y),
math::inverse_lerp(l.z, r.z, v.z)};
}
//
// contains_nan
//
template < typename T >
bool contains_nan(const vec3<T>& v) noexcept {
return
!math::is_finite(v.x) ||
!math::is_finite(v.y) ||
!math::is_finite(v.z);
}
}

View File

@@ -621,17 +621,4 @@ namespace e2d::math
math::inverse_lerp(l.z, r.z, v.z),
math::inverse_lerp(l.w, r.w, v.w)};
}
//
// contains_nan
//
template < typename T >
bool contains_nan(const vec4<T>& v) noexcept {
return
!math::is_finite(v.x) ||
!math::is_finite(v.y) ||
!math::is_finite(v.z) ||
!math::is_finite(v.w);
}
}

View File

@@ -136,8 +136,6 @@ namespace e2d::math
color minimized(const color& c, const color& cmin) noexcept;
color maximized(const color& c, const color& cmax) noexcept;
color clamped(const color& c, const color& cmin, const color& cmax) noexcept;
bool contains_nan(const color& c) noexcept;
}
namespace e2d::colors

View File

@@ -136,8 +136,6 @@ namespace e2d::math
color32 minimized(const color32& c, const color32& cmin) noexcept;
color32 maximized(const color32& c, const color32& cmax) noexcept;
color32 clamped(const color32& c, const color32& cmin, const color32& cmax) noexcept;
bool contains_nan(const color32& c) noexcept;
}
namespace e2d::colors

View File

@@ -75,9 +75,5 @@ function aabb.normalized_to_point(r, p) end
---@return v3f
function aabb.point_to_normalized(r, p) end
---@param r aabb
---@return boolean
function aabb.contains_nan(r) end
---@type aabb
_G.aabb = _G.aabb or aabb

View File

@@ -39,9 +39,5 @@ function m2f.inversed(m) end
---@return m2f
function m2f.transposed(m) end
---@param m m2f
---@return boolean
function m2f.contains_nan(m) end
---@type m2f
_G.m2f = _G.m2f or m2f

View File

@@ -43,9 +43,5 @@ function m3f.inversed(m) end
---@return m3f
function m3f.transposed(m) end
---@param m m3f
---@return boolean
function m3f.contains_nan(m) end
---@type m3f
_G.m3f = _G.m3f or m3f

View File

@@ -90,9 +90,5 @@ function m4f.inversed(m) end
---@return m4f
function m4f.transposed(m) end
---@param m m4f
---@return boolean
function m4f.contains_nan(m) end
---@type m4f
_G.m4f = _G.m4f or m4f

View File

@@ -75,9 +75,5 @@ function rect.normalized_to_point(r, p) end
---@return v2f
function rect.point_to_normalized(r, p) end
---@param r rect
---@return boolean
function rect.contains_nan(r) end
---@type rect
_G.rect = _G.rect or rect

View File

@@ -37,9 +37,5 @@ function t2f.make_scale(s) end
---@return boolean
function t2f.approximately(l, r) end
---@param t t2f
---@return boolean
function t2f.contains_nan(t) end
---@type t2f
_G.t2f = _G.t2f or t2f

View File

@@ -37,9 +37,5 @@ function t3f.make_scale(s) end
---@return boolean
function t3f.approximately(l, r) end
---@param t t3f
---@return boolean
function t3f.contains_nan(t) end
---@type t3f
_G.t3f = _G.t3f or t3f

View File

@@ -105,9 +105,5 @@ function v2f.lerp(l,r,v) end
---@return v2f
function v2f.inverse_lerp(l,r,v) end
---@param v v2f
---@return boolean
function v2f.contains_nan(v) end
---@type v2f
_G.v2f = _G.v2f or v2f

View File

@@ -116,9 +116,5 @@ function v3f.lerp(l,r,v) end
---@return v3f
function v3f.inverse_lerp(l,r,v) end
---@param v v3f
---@return boolean
function v3f.contains_nan(v) end
---@type v3f
_G.v3f = _G.v3f or v3f

View File

@@ -117,9 +117,5 @@ function v4f.lerp(l,r,v) end
---@return v4f
function v4f.inverse_lerp(l,r,v) end
---@param v v4f
---@return boolean
function v4f.contains_nan(v) end
---@type v4f
_G.v4f = _G.v4f or v4f

View File

@@ -78,9 +78,5 @@ function color.maximized(c,cmax) end
---@return color
function color.clamped(c,cmin,cmax) end
---@param c color
---@return boolean
function color.contains_nan(c) end
---@type color
_G.color = _G.color or color

View File

@@ -78,9 +78,5 @@ function color32.maximized(c,cmax) end
---@return color32
function color32.clamped(c,cmin,cmax) end
---@param c color32
---@return boolean
function color32.contains_nan(c) end
---@type color32
_G.color32 = _G.color32 or color32

View File

@@ -69,9 +69,7 @@ namespace
"overlaps", sol::resolve<bool(const aabb<T>&,const aabb<T>&)>(&math::overlaps),
"normalized_to_point", sol::resolve<vec3<T>(const aabb<T>&,const vec3<T>&)>(&math::normalized_to_point),
"point_to_normalized", sol::resolve<vec3<T>(const aabb<T>&,const vec3<T>&)>(&math::point_to_normalized),
"contains_nan", sol::resolve<bool(const aabb<T>&)>(&math::contains_nan));
"point_to_normalized", sol::resolve<vec3<T>(const aabb<T>&,const vec3<T>&)>(&math::point_to_normalized));
}
}

View File

@@ -60,10 +60,6 @@ namespace
"transposed", [](const mat2<T>& m) -> mat2<T> {
return math::transposed(m);
},
"contains_nan", [](const mat2<T>& m) -> bool {
return math::contains_nan(m);
}
);
}

View File

@@ -63,10 +63,6 @@ namespace
"transposed", [](const mat3<T>& m) -> mat3<T> {
return math::transposed(m);
},
"contains_nan", [](const mat3<T>& m) -> bool {
return math::contains_nan(m);
}
);
}

View File

@@ -95,10 +95,6 @@ namespace
"transposed", [](const mat4<T>& m) -> mat4<T> {
return math::transposed(m);
},
"contains_nan", [](const mat4<T>& m) -> bool {
return math::contains_nan(m);
}
);
}

View File

@@ -69,9 +69,7 @@ namespace
"overlaps", sol::resolve<bool(const rect<T>&,const rect<T>&)>(&math::overlaps),
"normalized_to_point", sol::resolve<vec2<T>(const rect<T>&,const vec2<T>&)>(&math::normalized_to_point),
"point_to_normalized", sol::resolve<vec2<T>(const rect<T>&,const vec2<T>&)>(&math::point_to_normalized),
"contains_nan", sol::resolve<bool(const rect<T>&)>(&math::contains_nan));
"point_to_normalized", sol::resolve<vec2<T>(const rect<T>&,const vec2<T>&)>(&math::point_to_normalized));
}
}

View File

@@ -44,10 +44,6 @@ namespace
"approximately", [](const trs2<T>& l, const trs2<T>& r) -> bool {
return math::approximately(l,r);
},
"contains_nan", [](const trs2<T>& t) -> bool {
return math::contains_nan(t);
}
);
}

View File

@@ -42,10 +42,6 @@ namespace
"approximately", [](const trs3<T>& l, const trs3<T>& r) -> bool {
return math::approximately(l,r);
},
"contains_nan", [](const trs3<T>& t) -> bool {
return math::contains_nan(t);
}
);
}

View File

@@ -84,9 +84,7 @@ namespace
"lerp", sol::overload(
sol::resolve<vec2<T>(const vec2<T>&, const vec2<T>&, T)>(&math::lerp),
sol::resolve<vec2<T>(const vec2<T>&, const vec2<T>&, const vec2<T>&)>(&math::lerp)),
"inverse_lerp", sol::resolve<vec2<T>(const vec2<T>&, const vec2<T>&, const vec2<T>&)>(&math::inverse_lerp),
"contains_nan", sol::resolve<bool(const vec2<T>&)>(&math::contains_nan));
"inverse_lerp", sol::resolve<vec2<T>(const vec2<T>&, const vec2<T>&, const vec2<T>&)>(&math::inverse_lerp));
}
}

View File

@@ -89,9 +89,7 @@ namespace
"lerp", sol::overload(
sol::resolve<vec3<T>(const vec3<T>&, const vec3<T>&, T)>(&math::lerp),
sol::resolve<vec3<T>(const vec3<T>&, const vec3<T>&, const vec3<T>&)>(&math::lerp)),
"inverse_lerp", sol::resolve<vec3<T>(const vec3<T>&, const vec3<T>&, const vec3<T>&)>(&math::inverse_lerp),
"contains_nan", sol::resolve<bool(const vec3<T>&)>(&math::contains_nan));
"inverse_lerp", sol::resolve<vec3<T>(const vec3<T>&, const vec3<T>&, const vec3<T>&)>(&math::inverse_lerp));
}
}

View File

@@ -88,9 +88,7 @@ namespace
"lerp", sol::overload(
sol::resolve<vec4<T>(const vec4<T>&, const vec4<T>&, T)>(&math::lerp),
sol::resolve<vec4<T>(const vec4<T>&, const vec4<T>&, const vec4<T>&)>(&math::lerp)),
"inverse_lerp", sol::resolve<vec4<T>(const vec4<T>&, const vec4<T>&, const vec4<T>&)>(&math::inverse_lerp),
"contains_nan", sol::resolve<bool(const vec4<T>&)>(&math::contains_nan));
"inverse_lerp", sol::resolve<vec4<T>(const vec4<T>&, const vec4<T>&, const vec4<T>&)>(&math::inverse_lerp));
}
}

View File

@@ -65,8 +65,6 @@ namespace e2d::bindings::utils
"minimized", sol::resolve<color32(const color32&, const color32&)>(&math::minimized),
"maximized", sol::resolve<color32(const color32&, const color32&)>(&math::maximized),
"clamped", sol::resolve<color32(const color32&, const color32&, const color32&)>(&math::clamped),
"contains_nan", sol::resolve<bool(const color32&)>(&math::contains_nan));
"clamped", sol::resolve<color32(const color32&, const color32&, const color32&)>(&math::clamped));
}
}

View File

@@ -65,8 +65,6 @@ namespace e2d::bindings::utils
"minimized", sol::resolve<color(const color&, const color&)>(&math::minimized),
"maximized", sol::resolve<color(const color&, const color&)>(&math::maximized),
"clamped", sol::resolve<color(const color&, const color&, const color&)>(&math::clamped),
"contains_nan", sol::resolve<bool(const color&)>(&math::contains_nan));
"clamped", sol::resolve<color(const color&, const color&, const color&)>(&math::clamped));
}
}

View File

@@ -266,17 +266,6 @@ namespace e2d::math
math::clamp(c.b, cmin.b, cmax.b),
math::clamp(c.a, cmin.a, cmax.a));
}
//
// contains_nan
//
bool contains_nan(const color& c) noexcept {
return !math::is_finite(c.r)
|| !math::is_finite(c.g)
|| !math::is_finite(c.b)
|| !math::is_finite(c.a);
}
}
namespace e2d::colors

View File

@@ -266,17 +266,6 @@ namespace e2d::math
math::clamp(c.b, cmin.b, cmax.b),
math::clamp(c.a, cmin.a, cmax.a));
}
//
// contains_nan
//
bool contains_nan(const color32& c) noexcept {
return !math::is_finite(c.r)
|| !math::is_finite(c.g)
|| !math::is_finite(c.b)
|| !math::is_finite(c.a);
}
}
namespace e2d::colors

View File

@@ -313,28 +313,6 @@ TEST_CASE("math") {
REQUIRE(math::next_power_of_2(u32(8)) == u32(8));
REQUIRE(math::next_power_of_2(u32(9)) == u32(16));
}
{
REQUIRE(math::is_finite(0));
REQUIRE(math::is_finite(0u));
REQUIRE(math::is_finite(0.f));
REQUIRE(math::is_finite(1.f));
REQUIRE(math::is_finite(-1.f));
REQUIRE(math::is_finite(0.0));
REQUIRE(math::is_finite(1.0));
REQUIRE(math::is_finite(-1.0));
REQUIRE_FALSE(math::is_finite(std::numeric_limits<f32>::quiet_NaN()));
REQUIRE_FALSE(math::is_finite(std::numeric_limits<f32>::signaling_NaN()));
REQUIRE_FALSE(math::is_finite(std::numeric_limits<f32>::infinity()));
REQUIRE_FALSE(math::is_finite(-std::numeric_limits<f32>::infinity()));
REQUIRE_FALSE(math::is_finite(std::numeric_limits<f64>::quiet_NaN()));
REQUIRE_FALSE(math::is_finite(std::numeric_limits<f64>::signaling_NaN()));
REQUIRE_FALSE(math::is_finite(std::numeric_limits<f64>::infinity()));
REQUIRE_FALSE(math::is_finite(-std::numeric_limits<f64>::infinity()));
}
{
REQUIRE(math::abs(2) == 2);
REQUIRE(math::abs(3u) == 3u);

View File

@@ -156,11 +156,6 @@ TEST_CASE("aabb") {
REQUIRE(math::overlaps(b3i(0,0,0,10,10,10), b3i(-9,0,0,10,10,10)));
REQUIRE(math::overlaps(b3i(0,0,0,10,10,10), b3i(0,-9,0,10,10,10)));
REQUIRE(math::overlaps(b3i(0,0,0,10,10,10), b3i(-9,-9,0,10,10,10)));
REQUIRE_FALSE(math::contains_nan(b3i(1,2,3,4,5,6)));
REQUIRE_FALSE(math::contains_nan(b3f(1.f,2.f,3.f,4.f,5.f,6.f)));
REQUIRE(math::contains_nan(b3f(1.f,2.f,std::numeric_limits<f32>::quiet_NaN())));
REQUIRE(math::contains_nan(b3f(std::numeric_limits<f32>::infinity(), 1.f,2.f)));
}
{
REQUIRE(math::normalized_to_point(b3f(10.f, 20.f, 30.f), v3f(0.f, 0.f, 0.f)) == v3f(0.f, 0.f, 0.f));

View File

@@ -172,11 +172,6 @@ TEST_CASE("rect") {
REQUIRE(math::overlaps(b2i(0,0,10,10), b2i(-9,0,10,10)));
REQUIRE(math::overlaps(b2i(0,0,10,10), b2i(0,-9,10,10)));
REQUIRE(math::overlaps(b2i(0,0,10,10), b2i(-9,-9,10,10)));
REQUIRE_FALSE(math::contains_nan(b2i(1,2,3,4)));
REQUIRE_FALSE(math::contains_nan(b2f(1.f,2.f,3.f,4.f)));
REQUIRE(math::contains_nan(b2f(1.f,std::numeric_limits<f32>::quiet_NaN())));
REQUIRE(math::contains_nan(b2f(std::numeric_limits<f32>::infinity(), 1.f)));
}
{
REQUIRE(math::normalized_to_point(b2f(10.f, 20.f), v2f(0.f, 0.f)) == v2f(0.f, 0.f));

View File

@@ -108,9 +108,5 @@ TEST_CASE("trs2") {
math::make_translation_trs2(v2i{1,2}),
math::make_translation_trs2(v2i{1,4}),
1));
const f32 inf = std::numeric_limits<f32>::infinity();
REQUIRE(math::contains_nan(math::make_scale_trs2(v2f{inf, 0.f})));
REQUIRE_FALSE(math::contains_nan(math::make_scale_trs2(v2f{0.f, 0.f})));
}
}

View File

@@ -107,9 +107,5 @@ TEST_CASE("trs3") {
math::make_translation_trs3(v3i{1,2,5}),
math::make_translation_trs3(v3i{1,4,5}),
1));
const f32 inf = std::numeric_limits<f32>::infinity();
REQUIRE(math::contains_nan(math::make_scale_trs3(v3f{1.f, inf, 0.f})));
REQUIRE_FALSE(math::contains_nan(math::make_scale_trs3(v3f{1.f, 0.f, 0.f})));
}
}

View File

@@ -267,10 +267,4 @@ TEST_CASE("vec2") {
REQUIRE(math::inverse_lerp(v2f(1,2), v2f(10,20), v2f(5.5f,11)) == v2f(0.5f));
REQUIRE(math::inverse_lerp(v2f(1,2), v2f(10,20), v2f(5.5f,38)) == v2f(0.5f,2.f));
}
{
REQUIRE_FALSE(math::contains_nan(v2i(0,1)));
REQUIRE_FALSE(math::contains_nan(v2f(0.f,1.f)));
REQUIRE(math::contains_nan(v2f(0.f,std::numeric_limits<f32>::quiet_NaN())));
REQUIRE(math::contains_nan(v2f(std::numeric_limits<f32>::infinity(),1.f)));
}
}

View File

@@ -290,11 +290,4 @@ TEST_CASE("vec3") {
REQUIRE(math::inverse_lerp(v3f(1,2,1), v3f(10,20,10), v3f(5.5f,11,5.5f)) == v3f(0.5f));
REQUIRE(math::inverse_lerp(v3f(1,2,1), v3f(10,20,10), v3f(5.5f,38,5.5f)) == v3f(0.5f,2.f,0.5f));
}
{
REQUIRE_FALSE(math::contains_nan(v3i(0,1,2)));
REQUIRE_FALSE(math::contains_nan(v3f(0.f,1.f,2.f)));
REQUIRE(math::contains_nan(v3f(0.f,1.f,std::numeric_limits<f32>::quiet_NaN())));
REQUIRE(math::contains_nan(v3f(std::numeric_limits<f32>::infinity(),1.f,2.f)));
REQUIRE(math::contains_nan(v3f(1.f,std::numeric_limits<f32>::infinity(),2.f)));
}
}

View File

@@ -307,12 +307,4 @@ TEST_CASE("vec4") {
REQUIRE(math::inverse_lerp(v4f(1,2,1,2), v4f(10,20,10,20), v4f(5.5f,11,5.5f,11)) == v4f(0.5f));
REQUIRE(math::inverse_lerp(v4f(1,2,1,2), v4f(10,20,10,20), v4f(5.5f,38,5.5f,38)) == v4f(0.5f,2.f,0.5f,2.f));
}
{
REQUIRE_FALSE(math::contains_nan(v4i(0,1,2,3)));
REQUIRE_FALSE(math::contains_nan(v4f(0.f,1.f,2.f,3.f)));
REQUIRE(math::contains_nan(v4f(0.f,1.f,2.f,std::numeric_limits<f32>::quiet_NaN())));
REQUIRE(math::contains_nan(v4f(0.f,1.f,std::numeric_limits<f32>::quiet_NaN(),2.f)));
REQUIRE(math::contains_nan(v4f(std::numeric_limits<f32>::infinity(),1.f,2.f,3.f)));
REQUIRE(math::contains_nan(v4f(1.f,std::numeric_limits<f32>::infinity(),2.f,3.f)));
}
}

View File

@@ -120,16 +120,6 @@ TEST_CASE("color") {
REQUIRE(math::clamped(v0, color(6,5,4,3), color(9,9,9,9)) == color(6,5,5,6));
REQUIRE(math::clamped(v0, color(7,6,5,4), color(9,9,9,9)) == color(7,6,5,6));
}
{
{
REQUIRE_FALSE(math::contains_nan(color(0,1,2,3)));
REQUIRE_FALSE(math::contains_nan(color(0.f,1.f,2.f,3.f)));
REQUIRE(math::contains_nan(color(0.f,1.f,2.f,std::numeric_limits<f32>::quiet_NaN())));
REQUIRE(math::contains_nan(color(0.f,1.f,std::numeric_limits<f32>::quiet_NaN(),2.f)));
REQUIRE(math::contains_nan(color(std::numeric_limits<f32>::infinity(),1.f,2.f,3.f)));
REQUIRE(math::contains_nan(color(1.f,std::numeric_limits<f32>::infinity(),2.f,3.f)));
}
}
{
REQUIRE(colors::pack_color(color(color32(1,2,3,4))) == 0x04010203);
REQUIRE(colors::pack_color(color(color32(0x12,0x34,0x56,0x78))) == 0x78123456);