core_func_swizzle.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #define GLM_FORCE_SWIZZLE
  2. #include <glm/ext/vector_relational.hpp>
  3. #include <glm/glm.hpp>
  4. static int test_ivec2_swizzle()
  5. {
  6. int Error = 0;
  7. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
  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_CONFIG_SWIZZLE
  16. # if GLM_CONFIG_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_CONFIG_SWIZZLE
  33. return Error;
  34. }
  35. int test_ivec3_swizzle()
  36. {
  37. int Error = 0;
  38. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
  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
  47. # if GLM_CONFIG_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. glm::ivec3 J(1, 2, 3);
  73. J.xyz += glm::ivec3(1);
  74. Error += J == glm::ivec3(2, 3, 4) ? 0 : 1;
  75. glm::ivec3 K(1, 2, 3);
  76. K.xyz += A.xyz;
  77. Error += K == glm::ivec3(2, 4, 6) ? 0 : 1;
  78. }
  79. # endif
  80. return Error;
  81. }
  82. int test_ivec4_swizzle()
  83. {
  84. int Error = 0;
  85. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
  86. {
  87. glm::ivec4 A(1, 2, 3, 4);
  88. glm::ivec4 B = A.wzyx();
  89. glm::ivec4 C = B.wzyx();
  90. Error += A != B ? 0 : 1;
  91. Error += A == C ? 0 : 1;
  92. }
  93. # endif
  94. return Error;
  95. }
  96. int test_vec4_swizzle()
  97. {
  98. int Error = 0;
  99. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
  100. {
  101. glm::vec4 A(1, 2, 3, 4);
  102. glm::vec4 B = A.wzyx();
  103. glm::vec4 C = B.wzyx();
  104. Error += glm::any(glm::notEqual(A, B, 0.0001f)) ? 0 : 1;
  105. Error += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;
  106. float D = glm::dot(C.wzyx(), C.xyzw());
  107. Error += glm::equal(D, 20.f, 0.001f) ? 0 : 1;
  108. }
  109. # endif
  110. return Error;
  111. }
  112. int main()
  113. {
  114. int Error = 0;
  115. Error += test_ivec2_swizzle();
  116. Error += test_ivec3_swizzle();
  117. Error += test_ivec4_swizzle();
  118. Error += test_vec4_swizzle();
  119. return Error;
  120. }