math_test.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * DoRayMe - a quick and dirty Raytracer
  3. * Math helper unit tests
  4. *
  5. * Created by Manoël Trapier
  6. * Copyright (c) 2020 986-Studio.
  7. *
  8. */
  9. #include <math_helper.h>
  10. #include <gtest/gtest.h>
  11. TEST(MathTest, Default_epsilon)
  12. {
  13. ASSERT_EQ(getEpsilon(), FLT_EPSILON);
  14. }
  15. TEST(MathTest, Check_setting_epsilon)
  16. {
  17. set_equal_precision(0.00001);
  18. ASSERT_EQ(getEpsilon(), 0.00001);
  19. set_equal_precision(FLT_EPSILON);
  20. }
  21. TEST(MathTest, Check_double_equal_is_working)
  22. {
  23. ASSERT_TRUE(double_equal(0 - DBL_EPSILON, 0));
  24. ASSERT_FALSE(double_equal(0 - FLT_EPSILON, 0));
  25. ASSERT_TRUE(double_equal(0 - FLT_EPSILON/2.0, 0));
  26. ASSERT_FALSE(double_equal(0 - 0.001, 0));
  27. ASSERT_FALSE(double_equal(0 - 0.00001, 0));
  28. ASSERT_FALSE(double_equal(0 - 0.000001, 0));
  29. set_equal_precision(0.00001);
  30. ASSERT_TRUE(double_equal(0 - FLT_EPSILON*2, 0));
  31. ASSERT_FALSE(double_equal(0 - 0.001, 0));
  32. ASSERT_FALSE(double_equal(0 - 0.00001, 0));
  33. ASSERT_TRUE(double_equal(0 - 0.000001, 0));
  34. set_equal_precision(FLT_EPSILON);
  35. }
  36. TEST(MathTest, Check_that_deg_to_rad_is_working)
  37. {
  38. double angle180 = deg_to_rad(180);
  39. double angle90 = deg_to_rad(90);
  40. double angle270 = deg_to_rad(270);
  41. ASSERT_EQ(angle180, M_PI);
  42. ASSERT_EQ(angle90, M_PI / 2.);
  43. ASSERT_EQ(angle270, M_PI * 1.5);
  44. }
  45. TEST(MathTest, Min_is_working)
  46. {
  47. ASSERT_EQ(min3(1, 2, 3), 1);
  48. ASSERT_EQ(min3(1, 3, 2), 1);
  49. ASSERT_EQ(min3(2, 1, 3), 1);
  50. ASSERT_EQ(min3(2, 3, 1), 1);
  51. ASSERT_EQ(min3(3, 1, 2), 1);
  52. ASSERT_EQ(min3(3, 2, 1), 1);
  53. ASSERT_EQ(min3(1, 2, 2), 1);
  54. ASSERT_EQ(min3(2, 1, 2), 1);
  55. ASSERT_EQ(min3(2, 2, 1), 1);
  56. ASSERT_EQ(min3(3, 2, 2), 2);
  57. ASSERT_EQ(min3(2, 3, 2), 2);
  58. ASSERT_EQ(min3(2, 2, 3), 2);
  59. ASSERT_EQ(min3(2, 2, 2), 2);
  60. }
  61. TEST(MathTest, Max_is_working)
  62. {
  63. ASSERT_EQ(max3(1, 2, 3), 3);
  64. ASSERT_EQ(max3(1, 3, 2), 3);
  65. ASSERT_EQ(max3(2, 1, 3), 3);
  66. ASSERT_EQ(max3(2, 3, 1), 3);
  67. ASSERT_EQ(max3(3, 1, 2), 3);
  68. ASSERT_EQ(max3(3, 2, 1), 3);
  69. ASSERT_EQ(max3(1, 2, 2), 2);
  70. ASSERT_EQ(max3(2, 1, 2), 2);
  71. ASSERT_EQ(max3(2, 2, 1), 2);
  72. ASSERT_EQ(max3(3, 2, 2), 3);
  73. ASSERT_EQ(max3(2, 3, 2), 3);
  74. ASSERT_EQ(max3(2, 2, 3), 3);
  75. ASSERT_EQ(max3(2, 2, 2), 2);
  76. }