parent
68a829e7ed
commit
de28722e36
11 changed files with 197 additions and 4 deletions
@ -0,0 +1,93 @@ |
|||||||
|
/// @ref ext_vector_relational
|
||||||
|
/// @file glm/ext/vector_relational.hpp
|
||||||
|
///
|
||||||
|
/// @see core (dependence)
|
||||||
|
///
|
||||||
|
/// @defgroup ext_vector_relational GLM_EXT_vector_relational
|
||||||
|
/// @ingroup ext
|
||||||
|
///
|
||||||
|
/// Include <glm/ext/vector_relational.hpp> to use the features of this extension.
|
||||||
|
///
|
||||||
|
/// Comparison functions for a user defined epsilon values.
|
||||||
|
|
||||||
|
#pragma once |
||||||
|
|
||||||
|
// Dependencies
|
||||||
|
#include "../detail/setup.hpp" |
||||||
|
#include "../detail/qualifier.hpp" |
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED) |
||||||
|
# pragma message("GLM: GLM_EXT_vector_relational extension included") |
||||||
|
#endif |
||||||
|
|
||||||
|
namespace glm |
||||||
|
{ |
||||||
|
/// @addtogroup ext_vector_relational
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Returns the component-wise comparison of |x - y| < epsilon.
|
||||||
|
/// True if this expression is satisfied.
|
||||||
|
///
|
||||||
|
/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
|
||||||
|
/// @tparam T Floating-point or integer scalar types
|
||||||
|
/// @tparam Q Value from qualifier enum
|
||||||
|
///
|
||||||
|
/// @see ext_vector_relational
|
||||||
|
template<length_t L, typename T, qualifier Q> |
||||||
|
GLM_FUNC_DECL vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon); |
||||||
|
|
||||||
|
/// Returns the component-wise comparison of |x - y| < epsilon.
|
||||||
|
/// True if this expression is satisfied.
|
||||||
|
///
|
||||||
|
/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
|
||||||
|
/// @tparam T Floating-point or integer scalar types
|
||||||
|
/// @tparam Q Value from qualifier enum
|
||||||
|
///
|
||||||
|
/// @see ext_vector_relational
|
||||||
|
template<length_t L, typename T, qualifier Q> |
||||||
|
GLM_FUNC_DECL vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon); |
||||||
|
|
||||||
|
/// Returns the component-wise comparison of |x - y| < epsilon.
|
||||||
|
/// True if this expression is satisfied.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point or integer scalar types
|
||||||
|
///
|
||||||
|
/// @see ext_vector_relational
|
||||||
|
template<typename genType> |
||||||
|
GLM_FUNC_DECL bool equal(genType const& x, genType const& y, genType const& epsilon); |
||||||
|
|
||||||
|
/// Returns the component-wise comparison of |x - y| < epsilon.
|
||||||
|
/// True if this expression is not satisfied.
|
||||||
|
///
|
||||||
|
/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
|
||||||
|
/// @tparam T Floating-point or integer scalar types
|
||||||
|
/// @tparam Q Value from qualifier enum
|
||||||
|
///
|
||||||
|
/// @see ext_vector_relational
|
||||||
|
template<length_t L, typename T, qualifier Q> |
||||||
|
GLM_FUNC_DECL vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon); |
||||||
|
|
||||||
|
/// Returns the component-wise comparison of |x - y| < epsilon.
|
||||||
|
/// True if this expression is not satisfied.
|
||||||
|
///
|
||||||
|
/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
|
||||||
|
/// @tparam T Floating-point or integer scalar types
|
||||||
|
/// @tparam Q Value from qualifier enum
|
||||||
|
///
|
||||||
|
/// @see ext_vector_relational
|
||||||
|
template<length_t L, typename T, qualifier Q> |
||||||
|
GLM_FUNC_DECL vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon); |
||||||
|
|
||||||
|
/// Returns the component-wise comparison of |x - y| >= epsilon.
|
||||||
|
/// True if this expression is not satisfied.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point or integer scalar types
|
||||||
|
///
|
||||||
|
/// @see ext_vector_relational
|
||||||
|
template<typename genType> |
||||||
|
GLM_FUNC_DECL bool notEqual(genType const& x, genType const& y, genType const& epsilon); |
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "vector_relational.inl" |
@ -0,0 +1,46 @@ |
|||||||
|
/// @ref ext_vector_relational |
||||||
|
/// @file glm/ext/vector_relational.inl |
||||||
|
|
||||||
|
// Dependency: |
||||||
|
#include "../vector_relational.hpp" |
||||||
|
#include "../common.hpp" |
||||||
|
#include "../detail/type_vec.hpp" |
||||||
|
|
||||||
|
namespace glm |
||||||
|
{ |
||||||
|
template<typename genType> |
||||||
|
GLM_FUNC_QUALIFIER bool equal(genType const& x, genType const& y, genType const& epsilon) |
||||||
|
{ |
||||||
|
return abs(x - y) < epsilon; |
||||||
|
} |
||||||
|
|
||||||
|
template<length_t L, typename T, qualifier Q> |
||||||
|
GLM_FUNC_QUALIFIER vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon) |
||||||
|
{ |
||||||
|
return lessThan(abs(x - y), vec<L, T, Q>(epsilon)); |
||||||
|
} |
||||||
|
|
||||||
|
template<length_t L, typename T, qualifier Q> |
||||||
|
GLM_FUNC_QUALIFIER vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon) |
||||||
|
{ |
||||||
|
return lessThan(abs(x - y), epsilon); |
||||||
|
} |
||||||
|
|
||||||
|
template<typename genType> |
||||||
|
GLM_FUNC_QUALIFIER bool notEqual(genType const& x, genType const& y, genType const& epsilon) |
||||||
|
{ |
||||||
|
return abs(x - y) >= epsilon; |
||||||
|
} |
||||||
|
|
||||||
|
template<length_t L, typename T, qualifier Q> |
||||||
|
GLM_FUNC_QUALIFIER vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon) |
||||||
|
{ |
||||||
|
return greaterThanEqual(abs(x - y), vec<L, T, Q>(epsilon)); |
||||||
|
} |
||||||
|
|
||||||
|
template<length_t L, typename T, qualifier Q> |
||||||
|
GLM_FUNC_QUALIFIER vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon) |
||||||
|
{ |
||||||
|
return greaterThanEqual(abs(x - y), epsilon); |
||||||
|
} |
||||||
|
}//namespace glm |
@ -1 +1,2 @@ |
|||||||
glmCreateTestGTC(ext_vec1) |
glmCreateTestGTC(ext_vec1) |
||||||
|
glmCreateTestGTC(ext_vector_relational) |
||||||
|
@ -0,0 +1,42 @@ |
|||||||
|
#include <glm/ext/vector_relational.hpp> |
||||||
|
#include <glm/vec2.hpp> |
||||||
|
|
||||||
|
int test_equal() |
||||||
|
{ |
||||||
|
int Error = 0; |
||||||
|
|
||||||
|
Error += glm::equal(1.01f, 1.02f, 0.1f) ? 0 : 1; |
||||||
|
Error += glm::all(glm::equal(glm::vec2(1.01f), glm::vec2(1.02f), 0.1f)) ? 0 : 1; |
||||||
|
Error += glm::all(glm::equal(glm::vec2(1.01f), glm::vec2(1.02f), glm::vec2(0.1f))) ? 0 : 1; |
||||||
|
|
||||||
|
Error += !glm::equal(1.01f, 1.02f, 0.001f) ? 0 : 1; |
||||||
|
Error += !glm::any(glm::equal(glm::vec2(1.01f), glm::vec2(1.02f), 0.001f)) ? 0 : 1; |
||||||
|
Error += !glm::any(glm::equal(glm::vec2(1.01f), glm::vec2(1.02f), glm::vec2(0.001f))) ? 0 : 1; |
||||||
|
|
||||||
|
return Error; |
||||||
|
} |
||||||
|
|
||||||
|
int test_notEqual() |
||||||
|
{ |
||||||
|
int Error = 0; |
||||||
|
|
||||||
|
Error += glm::notEqual(1.01f, 1.02f, 0.001f) ? 0 : 1; |
||||||
|
Error += glm::all(glm::notEqual(glm::vec2(1.01f), glm::vec2(1.02f), 0.001f)) ? 0 : 1; |
||||||
|
Error += glm::all(glm::notEqual(glm::vec2(1.01f), glm::vec2(1.02f), glm::vec2(0.001f))) ? 0 : 1; |
||||||
|
|
||||||
|
Error += !glm::notEqual(1.01f, 1.02f, 0.1f) ? 0 : 1; |
||||||
|
Error += !glm::any(glm::notEqual(glm::vec2(1.01f), glm::vec2(1.02f), 0.1f)) ? 0 : 1; |
||||||
|
Error += !glm::any(glm::notEqual(glm::vec2(1.01f), glm::vec2(1.02f), glm::vec2(0.1f))) ? 0 : 1; |
||||||
|
|
||||||
|
return Error; |
||||||
|
} |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
int Error = 0; |
||||||
|
|
||||||
|
Error += test_equal(); |
||||||
|
Error += test_notEqual(); |
||||||
|
|
||||||
|
return Error; |
||||||
|
} |
Loading…
Reference in New Issue