1 #include <glm/geometric.hpp>
2 #include <glm/vector_relational.hpp>
3 #include <glm/gtc/epsilon.hpp>
4 #include <glm/gtc/vec1.hpp>
5 #include <limits>
6
7 namespace length
8 {
test()9 int test()
10 {
11 float Length1 = glm::length(glm::vec1(1));
12 float Length2 = glm::length(glm::vec2(1, 0));
13 float Length3 = glm::length(glm::vec3(1, 0, 0));
14 float Length4 = glm::length(glm::vec4(1, 0, 0, 0));
15
16 int Error = 0;
17
18 Error += glm::abs(Length1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
19 Error += glm::abs(Length2 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
20 Error += glm::abs(Length3 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
21 Error += glm::abs(Length4 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
22
23 return Error;
24 }
25 }//namespace length
26
27 namespace distance
28 {
test()29 int test()
30 {
31 float Distance1 = glm::distance(glm::vec1(1), glm::vec1(1));
32 float Distance2 = glm::distance(glm::vec2(1, 0), glm::vec2(1, 0));
33 float Distance3 = glm::distance(glm::vec3(1, 0, 0), glm::vec3(1, 0, 0));
34 float Distance4 = glm::distance(glm::vec4(1, 0, 0, 0), glm::vec4(1, 0, 0, 0));
35
36 int Error = 0;
37
38 Error += glm::abs(Distance1) < std::numeric_limits<float>::epsilon() ? 0 : 1;
39 Error += glm::abs(Distance2) < std::numeric_limits<float>::epsilon() ? 0 : 1;
40 Error += glm::abs(Distance3) < std::numeric_limits<float>::epsilon() ? 0 : 1;
41 Error += glm::abs(Distance4) < std::numeric_limits<float>::epsilon() ? 0 : 1;
42
43 return Error;
44 }
45 }//namespace distance
46
47 namespace dot
48 {
test()49 int test()
50 {
51 float Dot1 = glm::dot(glm::vec1(1), glm::vec1(1));
52 float Dot2 = glm::dot(glm::vec2(1), glm::vec2(1));
53 float Dot3 = glm::dot(glm::vec3(1), glm::vec3(1));
54 float Dot4 = glm::dot(glm::vec4(1), glm::vec4(1));
55
56 int Error = 0;
57
58 Error += glm::abs(Dot1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
59 Error += glm::abs(Dot2 - 2.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
60 Error += glm::abs(Dot3 - 3.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
61 Error += glm::abs(Dot4 - 4.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
62
63 return Error;
64 }
65 }//namespace dot
66
67 namespace cross
68 {
test()69 int test()
70 {
71 glm::vec3 Cross1 = glm::cross(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));
72 glm::vec3 Cross2 = glm::cross(glm::vec3(0, 1, 0), glm::vec3(1, 0, 0));
73
74 int Error = 0;
75
76 Error += glm::all(glm::lessThan(glm::abs(Cross1 - glm::vec3(0, 0, 1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
77 Error += glm::all(glm::lessThan(glm::abs(Cross2 - glm::vec3(0, 0,-1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
78
79 return Error;
80 }
81 }//namespace cross
82
83 namespace normalize
84 {
test()85 int test()
86 {
87 glm::vec3 Normalize1 = glm::normalize(glm::vec3(1, 0, 0));
88 glm::vec3 Normalize2 = glm::normalize(glm::vec3(2, 0, 0));
89
90 glm::vec3 Normalize3 = glm::normalize(glm::vec3(-0.6, 0.7, -0.5));
91
92 glm::vec3 ro = glm::vec3(glm::cos(5.f) * 3.f, 2.f, glm::sin(5.f) * 3.f);
93 glm::vec3 w = glm::normalize(glm::vec3(0, -0.2f, 0) - ro);
94 glm::vec3 u = glm::normalize(glm::cross(w, glm::vec3(0, 1, 0)));
95 glm::vec3 v = glm::cross(u, w);
96
97 int Error = 0;
98
99 Error += glm::all(glm::lessThan(glm::abs(Normalize1 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
100 Error += glm::all(glm::lessThan(glm::abs(Normalize2 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
101
102 return Error;
103 }
104 }//namespace normalize
105
106 namespace faceforward
107 {
test()108 int test()
109 {
110 int Error = 0;
111
112 {
113 glm::vec3 N(0.0f, 0.0f, 1.0f);
114 glm::vec3 I(1.0f, 0.0f, 1.0f);
115 glm::vec3 Nref(0.0f, 0.0f, 1.0f);
116 glm::vec3 F = glm::faceforward(N, I, Nref);
117 }
118
119 return Error;
120 }
121 }//namespace faceforward
122
123 namespace reflect
124 {
test()125 int test()
126 {
127 int Error = 0;
128
129 {
130 glm::vec2 A(1.0f,-1.0f);
131 glm::vec2 B(0.0f, 1.0f);
132 glm::vec2 C = glm::reflect(A, B);
133 Error += C == glm::vec2(1.0, 1.0) ? 0 : 1;
134 }
135
136 {
137 glm::dvec2 A(1.0f,-1.0f);
138 glm::dvec2 B(0.0f, 1.0f);
139 glm::dvec2 C = glm::reflect(A, B);
140 Error += C == glm::dvec2(1.0, 1.0) ? 0 : 1;
141 }
142
143 return Error;
144 }
145 }//namespace reflect
146
147 namespace refract
148 {
test()149 int test()
150 {
151 int Error = 0;
152
153 {
154 float A(-1.0f);
155 float B(1.0f);
156 float C = glm::refract(A, B, 0.5f);
157 Error += C == -1.0f ? 0 : 1;
158 }
159
160 {
161 glm::vec2 A(0.0f,-1.0f);
162 glm::vec2 B(0.0f, 1.0f);
163 glm::vec2 C = glm::refract(A, B, 0.5f);
164 Error += glm::all(glm::epsilonEqual(C, glm::vec2(0.0, -1.0), 0.0001f)) ? 0 : 1;
165 }
166
167 {
168 glm::dvec2 A(0.0f,-1.0f);
169 glm::dvec2 B(0.0f, 1.0f);
170 glm::dvec2 C = glm::refract(A, B, 0.5);
171 Error += C == glm::dvec2(0.0, -1.0) ? 0 : 1;
172 }
173
174 return Error;
175 }
176 }//namespace refract
177
main()178 int main()
179 {
180 int Error(0);
181
182 Error += length::test();
183 Error += distance::test();
184 Error += dot::test();
185 Error += cross::test();
186 Error += normalize::test();
187 Error += faceforward::test();
188 Error += reflect::test();
189 Error += refract::test();
190
191 return Error;
192 }
193
194