Math.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "tests/framework/Framework.h"
  2. #include "anki/Math.h"
  3. using namespace anki;
  4. /// Test the common perators between a vector and another vector
  5. template<typename Vec, typename T>
  6. void operatorsSame()
  7. {
  8. const U size = sizeof(Vec) / sizeof(T);
  9. Vec a, b;
  10. Array<T, size> add, sub, mul, div;
  11. for(U i = 0; i < size; i++)
  12. {
  13. T v0 = T(i * 10) / 2;
  14. T v1 = T(i * 1000) / 5.123;
  15. a[i] = v0;
  16. b[i] = v1;
  17. add[i] = v0 + v1;
  18. sub[i] = v0 - v1;
  19. mul[i] = v0 * v1;
  20. div[i] = v0 / v1;
  21. }
  22. Vec c = a + b;
  23. Vec d = a - b;
  24. Vec e = a * b;
  25. Vec f = a / b;
  26. for(U i = 0; i < size; i++)
  27. {
  28. ANKI_TEST_EXPECT_EQ(c[i], add[i]);
  29. ANKI_TEST_EXPECT_EQ(d[i], sub[i]);
  30. ANKI_TEST_EXPECT_EQ(e[i], mul[i]);
  31. ANKI_TEST_EXPECT_EQ(f[i], div[i]);
  32. }
  33. }
  34. /// Test the dot prods
  35. template<typename Vec, typename T>
  36. void dot()
  37. {
  38. const U size = sizeof(Vec) / sizeof(T);
  39. T res = 0;
  40. Vec vec;
  41. for(U i = 0; i < size; i++)
  42. {
  43. T x = i * 666;
  44. vec[i] = x;
  45. res += x * x;
  46. }
  47. ANKI_TEST_EXPECT_EQ(vec.dot(vec), res);
  48. }
  49. /// Common vector tests
  50. template<typename Vec, typename T>
  51. void commonVecTests()
  52. {
  53. operatorsSame<Vec, T>();
  54. dot<Vec, T>();
  55. }
  56. ANKI_TEST(Math, Vec2)
  57. {
  58. commonVecTests<Vec2, F32>();
  59. commonVecTests<IVec2, I32>();
  60. commonVecTests<UVec2, U32>();
  61. }
  62. ANKI_TEST(Math, Vec3)
  63. {
  64. commonVecTests<Vec3, F32>();
  65. commonVecTests<IVec3, I32>();
  66. commonVecTests<UVec3, U32>();
  67. }
  68. ANKI_TEST(Math, Vec4)
  69. {
  70. commonVecTests<Vec4, F32>();
  71. commonVecTests<IVec4, I32>();
  72. commonVecTests<UVec4, U32>();
  73. }