core_func_swizzle.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #define GLM_FORCE_MESSAGES
  2. #define GLM_FORCE_SWIZZLE
  3. #include <glm/glm.hpp>
  4. static int test_ivec2_swizzle()
  5. {
  6. int Error = 0;
  7. # if GLM_SWIZZLE
  8. {
  9. glm::ivec2 A(1, 2);
  10. glm::ivec2 B = A.yx();
  11. glm::ivec2 C = B.yx();
  12. Error += A != B ? 0 : 1;
  13. Error += A == C ? 0 : 1;
  14. }
  15. # endif//GLM_SWIZZLE
  16. # if GLM_SWIZZLE == GLM_SWIZZLE_OPERATOR
  17. {
  18. glm::ivec2 A(1, 2);
  19. glm::ivec2 B = A.yx;
  20. glm::ivec2 C = A.yx;
  21. Error += A != B ? 0 : 1;
  22. Error += B == C ? 0 : 1;
  23. B.xy = B.yx;
  24. C.xy = C.yx;
  25. Error += B == C ? 0 : 1;
  26. glm::ivec2 D(0, 0);
  27. D.yx = A.xy;
  28. Error += A.yx() == D ? 0 : 1;
  29. glm::ivec2 E = A.yx;
  30. Error += E == D ? 0 : 1;
  31. }
  32. # endif//GLM_SWIZZLE
  33. return Error;
  34. }
  35. int test_ivec3_swizzle()
  36. {
  37. int Error = 0;
  38. # if GLM_SWIZZLE == GLM_ENABLE
  39. {
  40. glm::ivec3 A(1, 2, 3);
  41. glm::ivec3 B = A.zyx();
  42. glm::ivec3 C = B.zyx();
  43. Error += A != B ? 0 : 1;
  44. Error += A == C ? 0 : 1;
  45. }
  46. # endif//GLM_SWIZZLE == GLM_ENABLE
  47. # if GLM_SWIZZLE == GLM_SWIZZLE_OPERATOR
  48. {
  49. glm::ivec3 const A(1, 2, 3);
  50. glm::ivec2 B = A.yx;
  51. glm::ivec2 C = A.yx;
  52. Error += A.yx() == B ? 0 : 1;
  53. Error += B == C ? 0 : 1;
  54. B.xy = B.yx;
  55. C.xy = C.yx;
  56. Error += B == C ? 0 : 1;
  57. glm::ivec2 D(0, 0);
  58. D.yx = A.xy;
  59. Error += A.yx() == D ? 0 : 1;
  60. glm::ivec2 E(0, 0);
  61. E.xy = A.xy();
  62. Error += E == A.xy() ? 0 : 1;
  63. Error += E.xy() == A.xy() ? 0 : 1;
  64. glm::ivec3 const F = A.xxx + A.xxx;
  65. Error += F == glm::ivec3(2) ? 0 : 1;
  66. glm::ivec3 const G = A.xxx - A.xxx;
  67. Error += G == glm::ivec3(0) ? 0 : 1;
  68. glm::ivec3 const H = A.xxx * A.xxx;
  69. Error += H == glm::ivec3(1) ? 0 : 1;
  70. glm::ivec3 const I = A.xxx / A.xxx;
  71. Error += I == glm::ivec3(1) ? 0 : 1;
  72. }
  73. # endif//GLM_SWIZZLE
  74. return Error;
  75. }
  76. int test_ivec4_swizzle()
  77. {
  78. int Error = 0;
  79. #if GLM_SWIZZLE == GLM_ENABLE
  80. glm::ivec4 A(1, 2, 3, 4);
  81. glm::ivec4 B = A.wzyx();
  82. glm::ivec4 C = B.wzyx();
  83. Error += A != B ? 0 : 1;
  84. Error += A == C ? 0 : 1;
  85. #endif//GLM_SWIZZLE == GLM_ENABLE
  86. return Error;
  87. }
  88. int test_vec4_swizzle()
  89. {
  90. int Error = 0;
  91. #if GLM_SWIZZLE == GLM_ENABLE
  92. glm::vec4 A(1, 2, 3, 4);
  93. glm::vec4 B = A.wzyx();
  94. glm::vec4 C = B.wzyx();
  95. Error += A != B ? 0 : 1;
  96. Error += A == C ? 0 : 1;
  97. float f = glm::dot(C.wzyx(), C.xyzw());
  98. Error += glm::abs(f - 20.f) < 0.01f ? 0 : 1;
  99. #endif//GLM_SWIZZLE == GLM_ENABLE
  100. return Error;
  101. }
  102. int main()
  103. {
  104. int Error = 0;
  105. Error += test_ivec2_swizzle();
  106. Error += test_ivec3_swizzle();
  107. Error += test_ivec4_swizzle();
  108. Error += test_vec4_swizzle();
  109. return Error;
  110. }