mirror of
https://github.com/g-truc/glm.git
synced 2025-04-07 06:25:00 +00:00
Added experiments and tests for roundEven
This commit is contained in:
parent
472174a206
commit
cc48ab3697
3 changed files with 175 additions and 110 deletions
|
@ -268,7 +268,7 @@ namespace detail
|
|||
round(x.z),
|
||||
round(x.w));
|
||||
}
|
||||
|
||||
/*
|
||||
// roundEven
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType roundEven(genType const& x)
|
||||
|
@ -277,7 +277,22 @@ namespace detail
|
|||
|
||||
return genType(int(x + genType(int(x) % 2)));
|
||||
}
|
||||
|
||||
*/
|
||||
// roundEven
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType roundEven(genType const& x)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'roundEven' only accept floating-point inputs");
|
||||
|
||||
genType RoundValue(0.5);
|
||||
if(fract(x) == genType(0.5) && int(x) % 2)
|
||||
RoundValue = genType(-0.5);
|
||||
|
||||
if(x < genType(0.0))
|
||||
return genType(int(x - RoundValue));
|
||||
return genType(int(x + RoundValue));
|
||||
}
|
||||
|
||||
template <typename valType>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<valType> roundEven(detail::tvec2<valType> const& x)
|
||||
{
|
||||
|
|
|
@ -167,55 +167,71 @@ int test_roundEven()
|
|||
int Error = 0;
|
||||
|
||||
{
|
||||
float A = glm::roundEven(0.0f);
|
||||
float A = glm::round(0.0f);
|
||||
Error += A == 0.0f ? 0 : 1;
|
||||
float B = glm::roundEven(0.5f);
|
||||
float B = glm::round(0.5f);
|
||||
Error += B == 0.0f ? 0 : 1;
|
||||
float C = glm::roundEven(1.0f);
|
||||
Error += C == 2.0f ? 0 : 1;
|
||||
float D = glm::roundEven(0.1f);
|
||||
float C = glm::round(1.0f);
|
||||
Error += C == 1.0f ? 0 : 1;
|
||||
float D = glm::round(0.1f);
|
||||
Error += D == 0.0f ? 0 : 1;
|
||||
float E = glm::roundEven(0.9f);
|
||||
Error += E == 0.0f ? 0 : 1;
|
||||
float F = glm::roundEven(1.9f);
|
||||
float E = glm::round(0.9f);
|
||||
Error += E == 1.0f ? 0 : 1;
|
||||
float F = glm::round(1.5f);
|
||||
Error += F == 2.0f ? 0 : 1;
|
||||
float G = glm::roundEven(2.5f);
|
||||
float G = glm::round(1.9f);
|
||||
Error += G == 2.0f ? 0 : 1;
|
||||
float H = glm::roundEven(2.9f);
|
||||
Error += H == 2.0f ? 0 : 1;
|
||||
float I = glm::roundEven(3.2f);
|
||||
Error += I == 4.0f ? 0 : 1;
|
||||
float J = glm::roundEven(3.5f);
|
||||
Error += J == 4.0f ? 0 : 1;
|
||||
float K = glm::roundEven(3.9f);
|
||||
Error += K == 4.0f ? 0 : 1;
|
||||
float L = glm::roundEven(4.1f);
|
||||
Error += L == 4.0f ? 0 : 1;
|
||||
}
|
||||
|
||||
{
|
||||
float A = glm::roundEven(-0.0f);
|
||||
Error += A == 0.0f ? 0 : 1;
|
||||
float B = glm::roundEven(-0.5f);
|
||||
Error += B == -2.0f ? 0 : 1;
|
||||
float C = glm::roundEven(-1.0f);
|
||||
Error += C == -2.0f ? 0 : 1;
|
||||
float D = glm::roundEven(-0.1f);
|
||||
float A = glm::round(-0.0f);
|
||||
Error += A == 0.0f ? 0 : 1;
|
||||
float B = glm::round(-0.5f);
|
||||
Error += B == -0.0f ? 0 : 1;
|
||||
float C = glm::round(-1.0f);
|
||||
Error += C == -1.0f ? 0 : 1;
|
||||
float D = glm::round(-0.1f);
|
||||
Error += D == 0.0f ? 0 : 1;
|
||||
float E = glm::roundEven(-0.9f);
|
||||
Error += E == -2.0f ? 0 : 1;
|
||||
float F = glm::roundEven(-1.9f);
|
||||
float E = glm::round(-0.9f);
|
||||
Error += E == -1.0f ? 0 : 1;
|
||||
float F = glm::round(-1.5f);
|
||||
Error += F == -2.0f ? 0 : 1;
|
||||
float G = glm::roundEven(-2.5f);
|
||||
float G = glm::round(-1.9f);
|
||||
Error += G == -2.0f ? 0 : 1;
|
||||
float H = glm::roundEven(-2.9f);
|
||||
Error += H == -2.0f ? 0 : 1;
|
||||
float I = glm::roundEven(-3.2f);
|
||||
Error += I == -4.0f ? 0 : 1;
|
||||
float J = glm::roundEven(-3.5f);
|
||||
Error += J == -4.0f ? 0 : 1;
|
||||
float K = glm::roundEven(-3.9f);
|
||||
Error += K == -4.0f ? 0 : 1;
|
||||
}
|
||||
|
||||
{
|
||||
float A = glm::round(1.5f);
|
||||
Error += A == 2.0f ? 0 : 1;
|
||||
float B = glm::round(2.5f);
|
||||
Error += B == 2.0f ? 0 : 1;
|
||||
float C = glm::round(3.5f);
|
||||
Error += C == 4.0f ? 0 : 1;
|
||||
float D = glm::round(4.5f);
|
||||
Error += D == 4.0f ? 0 : 1;
|
||||
float E = glm::round(5.5f);
|
||||
Error += E == 6.0f ? 0 : 1;
|
||||
float F = glm::round(6.5f);
|
||||
Error += F == 6.0f ? 0 : 1;
|
||||
float G = glm::round(7.5f);
|
||||
Error += G == 8.0f ? 0 : 1;
|
||||
}
|
||||
|
||||
{
|
||||
float A = glm::round(-1.5f);
|
||||
Error += A == -2.0f ? 0 : 1;
|
||||
float B = glm::round(-2.5f);
|
||||
Error += B == -2.0f ? 0 : 1;
|
||||
float C = glm::round(-3.5f);
|
||||
Error += C == -4.0f ? 0 : 1;
|
||||
float D = glm::round(-4.5f);
|
||||
Error += D == -4.0f ? 0 : 1;
|
||||
float E = glm::round(-5.5f);
|
||||
Error += E == -6.0f ? 0 : 1;
|
||||
float F = glm::round(-6.5f);
|
||||
Error += F == -6.0f ? 0 : 1;
|
||||
float G = glm::round(-7.5f);
|
||||
Error += G == -8.0f ? 0 : 1;
|
||||
}
|
||||
|
||||
return Error;
|
||||
|
|
|
@ -11,75 +11,6 @@
|
|||
#include <glm/glm.hpp>
|
||||
#include <iostream>
|
||||
|
||||
/*
|
||||
#define GLM_COMPILER_UNKNOWN 0x00000000
|
||||
|
||||
// Visual C++ defines
|
||||
#define GLM_COMPILER_VC 0x01000000
|
||||
#define GLM_COMPILER_VC2 0x01000010
|
||||
#define GLM_COMPILER_VC4 0x01000020
|
||||
#define GLM_COMPILER_VC5 0x01000030
|
||||
#define GLM_COMPILER_VC6 0x01000040
|
||||
#define GLM_COMPILER_VC2002 0x01000050
|
||||
#define GLM_COMPILER_VC2003 0x01000060
|
||||
#define GLM_COMPILER_VC2005 0x01000070
|
||||
#define GLM_COMPILER_VC2008 0x01000080
|
||||
#define GLM_COMPILER_VC2010 0x01000090
|
||||
#define GLM_COMPILER_VC2011 0x010000A0
|
||||
|
||||
// GCC defines
|
||||
#define GLM_COMPILER_GCC 0x02000000
|
||||
#define GLM_COMPILER_GCC_LLVM 0x02000001
|
||||
#define GLM_COMPILER_GCC_CLANG 0x02000002
|
||||
#define GLM_COMPILER_GCC30 0x02000010
|
||||
#define GLM_COMPILER_GCC31 0x02000020
|
||||
#define GLM_COMPILER_GCC32 0x02000030
|
||||
#define GLM_COMPILER_GCC33 0x02000040
|
||||
#define GLM_COMPILER_GCC34 0x02000050
|
||||
#define GLM_COMPILER_GCC35 0x02000060
|
||||
#define GLM_COMPILER_GCC40 0x02000070
|
||||
#define GLM_COMPILER_GCC41 0x02000080
|
||||
#define GLM_COMPILER_GCC42 0x02000090
|
||||
#define GLM_COMPILER_GCC43 0x020000A0
|
||||
#define GLM_COMPILER_GCC44 0x020000B0
|
||||
#define GLM_COMPILER_GCC45 0x020000C0
|
||||
#define GLM_COMPILER_GCC46 0x020000D0
|
||||
#define GLM_COMPILER_GCC47 0x020000E0
|
||||
#define GLM_COMPILER_GCC48 0x020000F0
|
||||
#define GLM_COMPILER_GCC49 0x02000100
|
||||
#define GLM_COMPILER_GCC50 0x02000200
|
||||
|
||||
// G++ command line to display defined
|
||||
// echo "" | g++ -E -dM -x c++ - | sort
|
||||
|
||||
// Borland C++ defines. How to identify BC?
|
||||
#define GLM_COMPILER_BC 0x04000000
|
||||
#define GLM_COMPILER_BCB4 0x04000100
|
||||
#define GLM_COMPILER_BCB5 0x04000200
|
||||
#define GLM_COMPILER_BCB6 0x04000300
|
||||
//#define GLM_COMPILER_BCBX 0x04000400 // What's the version value?
|
||||
#define GLM_COMPILER_BCB2009 0x04000500
|
||||
|
||||
// CodeWarrior
|
||||
#define GLM_COMPILER_CODEWARRIOR 0x08000000
|
||||
|
||||
// CUDA
|
||||
#define GLM_COMPILER_CUDA 0x10000000
|
||||
#define GLM_COMPILER_CUDA30 0x10000010
|
||||
#define GLM_COMPILER_CUDA31 0x10000020
|
||||
#define GLM_COMPILER_CUDA32 0x10000030
|
||||
#define GLM_COMPILER_CUDA40 0x10000040
|
||||
|
||||
// Clang
|
||||
#define GLM_COMPILER_CLANG 0x20000000
|
||||
#define GLM_COMPILER_CLANG26 0x20000010
|
||||
#define GLM_COMPILER_CLANG27 0x20000020
|
||||
#define GLM_COMPILER_CLANG28 0x20000030
|
||||
#define GLM_COMPILER_CLANG29 0x20000040
|
||||
|
||||
// LLVM GCC
|
||||
#define GLM_COMPILER_LLVM_GCC 0x40000000
|
||||
*/
|
||||
int test_compiler()
|
||||
{
|
||||
int Error = 0;
|
||||
|
@ -89,12 +20,98 @@ int test_compiler()
|
|||
case GLM_COMPILER_VC:
|
||||
std::cout << "GLM_COMPILER_VC" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC2:
|
||||
std::cout << "GLM_COMPILER_VC2" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC4:
|
||||
std::cout << "GLM_COMPILER_VC4" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC5:
|
||||
std::cout << "GLM_COMPILER_VC5" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC6:
|
||||
std::cout << "GLM_COMPILER_VC6" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC2002:
|
||||
std::cout << "GLM_COMPILER_VC2002" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC2003:
|
||||
std::cout << "GLM_COMPILER_VC2003" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC2005:
|
||||
std::cout << "GLM_COMPILER_VC2005" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC2008:
|
||||
std::cout << "GLM_COMPILER_VC2008" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC2010:
|
||||
std::cout << "GLM_COMPILER_VC2010" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_VC2011:
|
||||
std::cout << "GLM_COMPILER_VC2011" << std::endl;
|
||||
break;
|
||||
|
||||
case GLM_COMPILER_GCC:
|
||||
std::cout << "GLM_COMPILER_GCC" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC30:
|
||||
std::cout << "GLM_COMPILER_GCC30" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC31:
|
||||
std::cout << "GLM_COMPILER_GCC31" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC32:
|
||||
std::cout << "GLM_COMPILER_GCC32" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC33:
|
||||
std::cout << "GLM_COMPILER_GCC33" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC34:
|
||||
std::cout << "GLM_COMPILER_GCC34" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC35:
|
||||
std::cout << "GLM_COMPILER_GCC35" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC40:
|
||||
std::cout << "GLM_COMPILER_GCC40" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC41:
|
||||
std::cout << "GLM_COMPILER_GCC41" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC42:
|
||||
std::cout << "GLM_COMPILER_GCC42" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC43:
|
||||
std::cout << "GLM_COMPILER_GCC43" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC44:
|
||||
std::cout << "GLM_COMPILER_GCC44" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC45:
|
||||
std::cout << "GLM_COMPILER_GCC45" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC46:
|
||||
std::cout << "GLM_COMPILER_GCC46" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_GCC47:
|
||||
std::cout << "GLM_COMPILER_GCC47" << std::endl;
|
||||
break;
|
||||
|
||||
case GLM_COMPILER_BC:
|
||||
std::cout << "GLM_COMPILER_BC" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_BCB4:
|
||||
std::cout << "GLM_COMPILER_BCB4" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_BCB5:
|
||||
std::cout << "GLM_COMPILER_BCB5" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_BCB6:
|
||||
std::cout << "GLM_COMPILER_BCB6" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_BCB2009:
|
||||
std::cout << "GLM_COMPILER_BCB2009" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_CODEWARRIOR:
|
||||
std::cout << "GLM_COMPILER_CODEWARRIOR" << std::endl;
|
||||
break;
|
||||
|
@ -104,12 +121,24 @@ int test_compiler()
|
|||
case GLM_COMPILER_CLANG:
|
||||
std::cout << "GLM_COMPILER_CLANG" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_CLANG26:
|
||||
std::cout << "GLM_COMPILER_CLANG26" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_CLANG27:
|
||||
std::cout << "GLM_COMPILER_CLANG27" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_CLANG28:
|
||||
std::cout << "GLM_COMPILER_CLANG28" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_CLANG29:
|
||||
std::cout << "GLM_COMPILER_CLANG29" << std::endl;
|
||||
break;
|
||||
case GLM_COMPILER_LLVM_GCC:
|
||||
std::cout << "GLM_COMPILER_LLVM_GCC" << std::endl;
|
||||
break;
|
||||
default:
|
||||
std::cout << "Undetected compiler" << std::endl;
|
||||
break;
|
||||
Error += 1;
|
||||
}
|
||||
|
||||
return Error;
|
||||
|
@ -121,6 +150,11 @@ int test_model()
|
|||
|
||||
Error += ((sizeof(void*) == 4) && (GLM_MODEL == GLM_MODEL_32)) || ((sizeof(void*) == 8) && (GLM_MODEL == GLM_MODEL_64)) ? 0 : 1;
|
||||
|
||||
if(GLM_MODEL == GLM_MODEL_32)
|
||||
std::cout << "GLM_MODEL_32" << std::endl;
|
||||
else if(GLM_MODEL == GLM_MODEL_64)
|
||||
std::cout << "GLM_MODEL_64" << std::endl;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue