1 #include <glm/gtc/type_precision.hpp>
2 #include <glm/gtc/quaternion.hpp>
3 #include <glm/gtc/constants.hpp>
4 #include <glm/ext/vector_relational.hpp>
5 #include <vector>
6 #if GLM_HAS_OPENMP
7 #	include <omp.h>
8 #endif
9 
10 #if GLM_HAS_STATIC_ASSERT
11 static_assert(sizeof(glm::lowp_u8vec1) == 1, "uint8 size isn't 1 byte on this platform");
12 static_assert(sizeof(glm::mediump_u8vec1) == 1, "uint8 size isn't 1 byte on this platform");
13 static_assert(sizeof(glm::highp_u8vec1) == 1, "uint8 size isn't 1 byte on this platform");
14 
15 static_assert(sizeof(glm::lowp_u16vec1) == 2, "uint16 size isn't 2 bytes on this platform");
16 static_assert(sizeof(glm::mediump_u16vec1) == 2, "uint16 size isn't 2 bytes on this platform");
17 static_assert(sizeof(glm::highp_u16vec1) == 2, "uint16 size isn't 2 bytes on this platform");
18 
19 static_assert(sizeof(glm::lowp_u32vec1) == 4, "uint32 size isn't 4 bytes on this platform");
20 static_assert(sizeof(glm::mediump_u32vec1) == 4, "uint32 size isn't 4 bytes on this platform");
21 static_assert(sizeof(glm::highp_u32vec1) == 4, "uint32 size isn't 4 bytes on this platform");
22 
23 static_assert(sizeof(glm::lowp_u64vec1) == 8, "uint64 size isn't 8 bytes on this platform");
24 static_assert(sizeof(glm::mediump_u64vec1) == 8, "uint64 size isn't 8 bytes on this platform");
25 static_assert(sizeof(glm::highp_u64vec1) == 8, "uint64 size isn't 8 bytes on this platform");
26 
27 
28 static_assert(sizeof(glm::lowp_u8vec2) == 2, "uint8 size isn't 1 byte on this platform");
29 static_assert(sizeof(glm::mediump_u8vec2) == 2, "uint8 size isn't 1 byte on this platform");
30 static_assert(sizeof(glm::highp_u8vec2) == 2, "uint8 size isn't 1 byte on this platform");
31 
32 static_assert(sizeof(glm::lowp_u16vec2) == 4, "uint16 size isn't 2 bytes on this platform");
33 static_assert(sizeof(glm::mediump_u16vec2) == 4, "uint16 size isn't 2 bytes on this platform");
34 static_assert(sizeof(glm::highp_u16vec2) == 4, "uint16 size isn't 2 bytes on this platform");
35 
36 static_assert(sizeof(glm::lowp_u32vec2) == 8, "uint32 size isn't 4 bytes on this platform");
37 static_assert(sizeof(glm::mediump_u32vec2) == 8, "uint32 size isn't 4 bytes on this platform");
38 static_assert(sizeof(glm::highp_u32vec2) == 8, "uint32 size isn't 4 bytes on this platform");
39 
40 static_assert(sizeof(glm::lowp_u64vec2) == 16, "uint64 size isn't 8 bytes on this platform");
41 static_assert(sizeof(glm::mediump_u64vec2) == 16, "uint64 size isn't 8 bytes on this platform");
42 static_assert(sizeof(glm::highp_u64vec2) == 16, "uint64 size isn't 8 bytes on this platform");
43 
44 
45 static_assert(sizeof(glm::lowp_u8vec3) == 3, "uint8 size isn't 1 byte on this platform");
46 static_assert(sizeof(glm::mediump_u8vec3) == 3, "uint8 size isn't 1 byte on this platform");
47 static_assert(sizeof(glm::highp_u8vec3) == 3, "uint8 size isn't 1 byte on this platform");
48 
49 static_assert(sizeof(glm::lowp_u16vec3) == 6, "uint16 size isn't 2 bytes on this platform");
50 static_assert(sizeof(glm::mediump_u16vec3) == 6, "uint16 size isn't 2 bytes on this platform");
51 static_assert(sizeof(glm::highp_u16vec3) == 6, "uint16 size isn't 2 bytes on this platform");
52 
53 static_assert(sizeof(glm::lowp_u32vec3) == 12, "uint32 size isn't 4 bytes on this platform");
54 static_assert(sizeof(glm::mediump_u32vec3) == 12, "uint32 size isn't 4 bytes on this platform");
55 static_assert(sizeof(glm::highp_u32vec3) == 12, "uint32 size isn't 4 bytes on this platform");
56 
57 static_assert(sizeof(glm::lowp_u64vec3) == 24, "uint64 size isn't 8 bytes on this platform");
58 static_assert(sizeof(glm::mediump_u64vec3) == 24, "uint64 size isn't 8 bytes on this platform");
59 static_assert(sizeof(glm::highp_u64vec3) == 24, "uint64 size isn't 8 bytes on this platform");
60 
61 
62 static_assert(sizeof(glm::lowp_u8vec4) == 4, "int8 size isn't 1 byte on this platform");
63 static_assert(sizeof(glm::mediump_u8vec4) == 4, "int8 size isn't 1 byte on this platform");
64 static_assert(sizeof(glm::highp_u8vec4) == 4, "int8 size isn't 1 byte on this platform");
65 
66 static_assert(sizeof(glm::lowp_u16vec4) == 8, "int16 size isn't 2 bytes on this platform");
67 static_assert(sizeof(glm::mediump_u16vec4) == 8, "int16 size isn't 2 bytes on this platform");
68 static_assert(sizeof(glm::highp_u16vec4) == 8, "int16 size isn't 2 bytes on this platform");
69 
70 static_assert(sizeof(glm::lowp_u32vec4) == 16, "int32 size isn't 4 bytes on this platform");
71 static_assert(sizeof(glm::mediump_u32vec4) == 16, "int32 size isn't 4 bytes on this platform");
72 static_assert(sizeof(glm::highp_u32vec4) == 16, "int32 size isn't 4 bytes on this platform");
73 
74 static_assert(sizeof(glm::lowp_u64vec4) == 32, "int64 size isn't 8 bytes on this platform");
75 static_assert(sizeof(glm::mediump_u64vec4) == 32, "int64 size isn't 8 bytes on this platform");
76 static_assert(sizeof(glm::highp_u64vec4) == 32, "int64 size isn't 8 bytes on this platform");
77 
78 
79 static_assert(sizeof(glm::lowp_u8vec1) == 1, "uint8 size isn't 1 byte on this platform");
80 static_assert(sizeof(glm::mediump_u8vec1) == 1, "uint8 size isn't 1 byte on this platform");
81 static_assert(sizeof(glm::highp_u8vec1) == 1, "uint8 size isn't 1 byte on this platform");
82 
83 static_assert(sizeof(glm::lowp_u16vec1) == 2, "uint16 size isn't 2 bytes on this platform");
84 static_assert(sizeof(glm::mediump_u16vec1) == 2, "uint16 size isn't 2 bytes on this platform");
85 static_assert(sizeof(glm::highp_u16vec1) == 2, "uint16 size isn't 2 bytes on this platform");
86 
87 static_assert(sizeof(glm::lowp_u32vec1) == 4, "uint32 size isn't 4 bytes on this platform");
88 static_assert(sizeof(glm::mediump_u32vec1) == 4, "uint32 size isn't 4 bytes on this platform");
89 static_assert(sizeof(glm::highp_u32vec1) == 4, "uint32 size isn't 4 bytes on this platform");
90 
91 static_assert(sizeof(glm::lowp_u64vec1) == 8, "uint64 size isn't 8 bytes on this platform");
92 static_assert(sizeof(glm::mediump_u64vec1) == 8, "uint64 size isn't 8 bytes on this platform");
93 static_assert(sizeof(glm::highp_u64vec1) == 8, "uint64 size isn't 8 bytes on this platform");
94 
95 
96 static_assert(sizeof(glm::lowp_u8vec2) == 2, "uint8 size isn't 1 byte on this platform");
97 static_assert(sizeof(glm::mediump_u8vec2) == 2, "uint8 size isn't 1 byte on this platform");
98 static_assert(sizeof(glm::highp_u8vec2) == 2, "uint8 size isn't 1 byte on this platform");
99 
100 static_assert(sizeof(glm::lowp_u16vec2) == 4, "uint16 size isn't 2 bytes on this platform");
101 static_assert(sizeof(glm::mediump_u16vec2) == 4, "uint16 size isn't 2 bytes on this platform");
102 static_assert(sizeof(glm::highp_u16vec2) == 4, "uint16 size isn't 2 bytes on this platform");
103 
104 static_assert(sizeof(glm::lowp_u32vec2) == 8, "uint32 size isn't 4 bytes on this platform");
105 static_assert(sizeof(glm::mediump_u32vec2) == 8, "uint32 size isn't 4 bytes on this platform");
106 static_assert(sizeof(glm::highp_u32vec2) == 8, "uint32 size isn't 4 bytes on this platform");
107 
108 static_assert(sizeof(glm::lowp_u64vec2) == 16, "uint64 size isn't 8 bytes on this platform");
109 static_assert(sizeof(glm::mediump_u64vec2) == 16, "uint64 size isn't 8 bytes on this platform");
110 static_assert(sizeof(glm::highp_u64vec2) == 16, "uint64 size isn't 8 bytes on this platform");
111 
112 
113 static_assert(sizeof(glm::lowp_u8vec3) == 3, "uint8 size isn't 1 byte on this platform");
114 static_assert(sizeof(glm::mediump_u8vec3) == 3, "uint8 size isn't 1 byte on this platform");
115 static_assert(sizeof(glm::highp_u8vec3) == 3, "uint8 size isn't 1 byte on this platform");
116 
117 static_assert(sizeof(glm::lowp_u16vec3) == 6, "uint16 size isn't 2 bytes on this platform");
118 static_assert(sizeof(glm::mediump_u16vec3) == 6, "uint16 size isn't 2 bytes on this platform");
119 static_assert(sizeof(glm::highp_u16vec3) == 6, "uint16 size isn't 2 bytes on this platform");
120 
121 static_assert(sizeof(glm::lowp_u32vec3) == 12, "uint32 size isn't 4 bytes on this platform");
122 static_assert(sizeof(glm::mediump_u32vec3) == 12, "uint32 size isn't 4 bytes on this platform");
123 static_assert(sizeof(glm::highp_u32vec3) == 12, "uint32 size isn't 4 bytes on this platform");
124 
125 static_assert(sizeof(glm::lowp_u64vec3) == 24, "uint64 size isn't 8 bytes on this platform");
126 static_assert(sizeof(glm::mediump_u64vec3) == 24, "uint64 size isn't 8 bytes on this platform");
127 static_assert(sizeof(glm::highp_u64vec3) == 24, "uint64 size isn't 8 bytes on this platform");
128 
129 
130 static_assert(sizeof(glm::lowp_u8vec4) == 4, "uint8 size isn't 1 byte on this platform");
131 static_assert(sizeof(glm::mediump_u8vec4) == 4, "uint8 size isn't 1 byte on this platform");
132 static_assert(sizeof(glm::highp_u8vec4) == 4, "uint8 size isn't 1 byte on this platform");
133 
134 static_assert(sizeof(glm::lowp_u16vec4) == 8, "uint16 size isn't 2 bytes on this platform");
135 static_assert(sizeof(glm::mediump_u16vec4) == 8, "uint16 size isn't 2 bytes on this platform");
136 static_assert(sizeof(glm::highp_u16vec4) == 8, "uint16 size isn't 2 bytes on this platform");
137 
138 static_assert(sizeof(glm::lowp_u32vec4) == 16, "uint32 size isn't 4 bytes on this platform");
139 static_assert(sizeof(glm::mediump_u32vec4) == 16, "uint32 size isn't 4 bytes on this platform");
140 static_assert(sizeof(glm::highp_u32vec4) == 16, "uint32 size isn't 4 bytes on this platform");
141 
142 static_assert(sizeof(glm::lowp_u64vec4) == 32, "uint64 size isn't 8 bytes on this platform");
143 static_assert(sizeof(glm::mediump_u64vec4) == 32, "uint64 size isn't 8 bytes on this platform");
144 static_assert(sizeof(glm::highp_u64vec4) == 32, "uint64 size isn't 8 bytes on this platform");
145 
146 #endif
147 
test_scalar_size()148 static int test_scalar_size()
149 {
150 	int Error = 0;
151 
152 	Error += sizeof(glm::int8) != 1;
153 	Error += sizeof(glm::int16) != 2;
154 	Error += sizeof(glm::int32) != 4;
155 	Error += sizeof(glm::int64) != 8;
156 	Error += sizeof(glm::uint8) != 1;
157 	Error += sizeof(glm::uint16) != 2;
158 	Error += sizeof(glm::uint32) != 4;
159 	Error += sizeof(glm::uint64) != 8;
160 	Error += sizeof(glm::float32) != 4;
161 	Error += sizeof(glm::float64) != 8;
162 
163 	Error += sizeof(glm::lowp_int8) != 1;
164 	Error += sizeof(glm::lowp_int16) != 2;
165 	Error += sizeof(glm::lowp_int32) != 4;
166 	Error += sizeof(glm::lowp_int64) != 8;
167 	Error += sizeof(glm::lowp_uint8) != 1;
168 	Error += sizeof(glm::lowp_uint16) != 2;
169 	Error += sizeof(glm::lowp_uint32) != 4;
170 	Error += sizeof(glm::lowp_uint64) != 8;
171 	Error += sizeof(glm::lowp_float32) != 4;
172 	Error += sizeof(glm::lowp_float64) != 8;
173 
174 	Error += sizeof(glm::mediump_int8) != 1;
175 	Error += sizeof(glm::mediump_int16) != 2;
176 	Error += sizeof(glm::mediump_int32) != 4;
177 	Error += sizeof(glm::mediump_int64) != 8;
178 	Error += sizeof(glm::mediump_uint8) != 1;
179 	Error += sizeof(glm::mediump_uint16) != 2;
180 	Error += sizeof(glm::mediump_uint32) != 4;
181 	Error += sizeof(glm::mediump_uint64) != 8;
182 	Error += sizeof(glm::mediump_float32) != 4;
183 	Error += sizeof(glm::mediump_float64) != 8;
184 
185 	Error += sizeof(glm::highp_int8) != 1;
186 	Error += sizeof(glm::highp_int16) != 2;
187 	Error += sizeof(glm::highp_int32) != 4;
188 	Error += sizeof(glm::highp_int64) != 8;
189 	Error += sizeof(glm::highp_uint8) != 1;
190 	Error += sizeof(glm::highp_uint16) != 2;
191 	Error += sizeof(glm::highp_uint32) != 4;
192 	Error += sizeof(glm::highp_uint64) != 8;
193 	Error += sizeof(glm::highp_float32) != 4;
194 	Error += sizeof(glm::highp_float64) != 8;
195 
196 	return Error;
197 }
198 
test_fvec_size()199 static int test_fvec_size()
200 {
201 	int Error = 0;
202 
203 	Error += sizeof(glm::f32vec2) != 8;
204 	Error += sizeof(glm::f32vec3) != 12;
205 	Error += sizeof(glm::f32vec4) != 16;
206 	Error += sizeof(glm::f64vec2) != 16;
207 	Error += sizeof(glm::f64vec3) != 24;
208 	Error += sizeof(glm::f64vec4) != 32;
209 
210 	Error += sizeof(glm::lowp_f32vec2) != 8;
211 	Error += sizeof(glm::lowp_f32vec3) != 12;
212 	Error += sizeof(glm::lowp_f32vec4) != 16;
213 	Error += sizeof(glm::lowp_f64vec2) != 16;
214 	Error += sizeof(glm::lowp_f64vec3) != 24;
215 	Error += sizeof(glm::lowp_f64vec4) != 32;
216 
217 	Error += sizeof(glm::mediump_f32vec2) != 8;
218 	Error += sizeof(glm::mediump_f32vec3) != 12;
219 	Error += sizeof(glm::mediump_f32vec4) != 16;
220 	Error += sizeof(glm::mediump_f64vec2) != 16;
221 	Error += sizeof(glm::mediump_f64vec3) != 24;
222 	Error += sizeof(glm::mediump_f64vec4) != 32;
223 
224 	Error += sizeof(glm::highp_f32vec2) != 8;
225 	Error += sizeof(glm::highp_f32vec3) != 12;
226 	Error += sizeof(glm::highp_f32vec4) != 16;
227 	Error += sizeof(glm::highp_f64vec2) != 16;
228 	Error += sizeof(glm::highp_f64vec3) != 24;
229 	Error += sizeof(glm::highp_f64vec4) != 32;
230 
231 	return Error;
232 }
233 
test_fvec_precision()234 static int test_fvec_precision()
235 {
236 	int Error = 0;
237 
238 	{
239 		glm::f32vec2 v1(1.f);
240 		glm::lowp_f32vec2 v2(v1);
241 		glm::mediump_f32vec2 v3(v1);
242 		glm::highp_f32vec2 v4(v1);
243 
244 		Error += glm::all(glm::equal(v1, glm::f32vec2(v2), glm::epsilon<float>())) ? 0 : 1;
245 		Error += glm::all(glm::equal(v1, glm::f32vec2(v3), glm::epsilon<float>())) ? 0 : 1;
246 		Error += glm::all(glm::equal(v1, glm::f32vec2(v4), glm::epsilon<float>())) ? 0 : 1;
247 	}
248 
249 	{
250 		glm::f32vec3 v1(1.f);
251 		glm::lowp_f32vec3 v2(v1);
252 		glm::mediump_f32vec3 v3(v1);
253 		glm::highp_f32vec3 v4(v1);
254 
255 		Error += glm::all(glm::equal(v1, glm::f32vec3(v2), glm::epsilon<float>())) ? 0 : 1;
256 		Error += glm::all(glm::equal(v1, glm::f32vec3(v3), glm::epsilon<float>())) ? 0 : 1;
257 		Error += glm::all(glm::equal(v1, glm::f32vec3(v4), glm::epsilon<float>())) ? 0 : 1;
258 	}
259 
260 	{
261 		glm::f32vec4 v1(1.f);
262 		glm::lowp_f32vec4 v2(v1);
263 		glm::mediump_f32vec4 v3(v1);
264 		glm::highp_f32vec4 v4(v1);
265 
266 		Error += glm::all(glm::equal(v1, glm::f32vec4(v2), glm::epsilon<float>())) ? 0 : 1;
267 		Error += glm::all(glm::equal(v1, glm::f32vec4(v3), glm::epsilon<float>())) ? 0 : 1;
268 		Error += glm::all(glm::equal(v1, glm::f32vec4(v4), glm::epsilon<float>())) ? 0 : 1;
269 	}
270 
271 	return Error;
272 }
273 
test_dvec_precision()274 static int test_dvec_precision()
275 {
276 	int Error = 0;
277 
278 	{
279 		glm::f64vec2 v1(1.0);
280 		glm::lowp_f64vec2 v2(v1);
281 		glm::mediump_f64vec2 v3(v1);
282 		glm::highp_f64vec2 v4(v1);
283 
284 		Error += glm::all(glm::equal(v1, glm::f64vec2(v2), glm::epsilon<double>())) ? 0 : 1;
285 		Error += glm::all(glm::equal(v1, glm::f64vec2(v3), glm::epsilon<double>())) ? 0 : 1;
286 		Error += glm::all(glm::equal(v1, glm::f64vec2(v4), glm::epsilon<double>())) ? 0 : 1;
287 	}
288 
289 	{
290 		glm::f64vec3 v1(1.0);
291 		glm::lowp_f64vec3 v2(v1);
292 		glm::mediump_f64vec3 v3(v1);
293 		glm::highp_f64vec3 v4(v1);
294 
295 		Error += glm::all(glm::equal(v1, glm::f64vec3(v2), glm::epsilon<double>())) ? 0 : 1;
296 		Error += glm::all(glm::equal(v1, glm::f64vec3(v3), glm::epsilon<double>())) ? 0 : 1;
297 		Error += glm::all(glm::equal(v1, glm::f64vec3(v4), glm::epsilon<double>())) ? 0 : 1;
298 	}
299 
300 	{
301 		glm::f64vec4 v1(1.0);
302 		glm::lowp_f64vec4 v2(v1);
303 		glm::mediump_f64vec4 v3(v1);
304 		glm::highp_f64vec4 v4(v1);
305 
306 		Error += glm::all(glm::equal(v1, glm::f64vec4(v2), glm::epsilon<double>())) ? 0 : 1;
307 		Error += glm::all(glm::equal(v1, glm::f64vec4(v3), glm::epsilon<double>())) ? 0 : 1;
308 		Error += glm::all(glm::equal(v1, glm::f64vec4(v4), glm::epsilon<double>())) ? 0 : 1;
309 	}
310 
311 	return Error;
312 }
313 
test_ivec_size()314 static int test_ivec_size()
315 {
316 	int Error = 0;
317 
318 	Error += sizeof(glm::i8vec2) != 2;
319 	Error += sizeof(glm::i8vec3) != 3;
320 	Error += sizeof(glm::i8vec4) != 4;
321 	Error += sizeof(glm::i16vec2) != 4;
322 	Error += sizeof(glm::i16vec3) != 6;
323 	Error += sizeof(glm::i16vec4) != 8;
324 	Error += sizeof(glm::i32vec2) != 8;
325 	Error += sizeof(glm::i32vec3) != 12;
326 	Error += sizeof(glm::i32vec4) != 16;
327 	Error += sizeof(glm::i64vec2) != 16;
328 	Error += sizeof(glm::i64vec3) != 24;
329 	Error += sizeof(glm::i64vec4) != 32;
330 
331 	Error += sizeof(glm::lowp_i8vec2) != 2;
332 	Error += sizeof(glm::lowp_i8vec3) != 3;
333 	Error += sizeof(glm::lowp_i8vec4) != 4;
334 	Error += sizeof(glm::lowp_i16vec2) != 4;
335 	Error += sizeof(glm::lowp_i16vec3) != 6;
336 	Error += sizeof(glm::lowp_i16vec4) != 8;
337 	Error += sizeof(glm::lowp_i32vec2) != 8;
338 	Error += sizeof(glm::lowp_i32vec3) != 12;
339 	Error += sizeof(glm::lowp_i32vec4) != 16;
340 	Error += sizeof(glm::lowp_i64vec2) != 16;
341 	Error += sizeof(glm::lowp_i64vec3) != 24;
342 	Error += sizeof(glm::lowp_i64vec4) != 32;
343 
344 	Error += sizeof(glm::mediump_i8vec2) != 2;
345 	Error += sizeof(glm::mediump_i8vec3) != 3;
346 	Error += sizeof(glm::mediump_i8vec4) != 4;
347 	Error += sizeof(glm::mediump_i16vec2) != 4;
348 	Error += sizeof(glm::mediump_i16vec3) != 6;
349 	Error += sizeof(glm::mediump_i16vec4) != 8;
350 	Error += sizeof(glm::mediump_i32vec2) != 8;
351 	Error += sizeof(glm::mediump_i32vec3) != 12;
352 	Error += sizeof(glm::mediump_i32vec4) != 16;
353 	Error += sizeof(glm::mediump_i64vec2) != 16;
354 	Error += sizeof(glm::mediump_i64vec3) != 24;
355 	Error += sizeof(glm::mediump_i64vec4) != 32;
356 
357 	Error += sizeof(glm::highp_i8vec2) != 2;
358 	Error += sizeof(glm::highp_i8vec3) != 3;
359 	Error += sizeof(glm::highp_i8vec4) != 4;
360 	Error += sizeof(glm::highp_i16vec2) != 4;
361 	Error += sizeof(glm::highp_i16vec3) != 6;
362 	Error += sizeof(glm::highp_i16vec4) != 8;
363 	Error += sizeof(glm::highp_i32vec2) != 8;
364 	Error += sizeof(glm::highp_i32vec3) != 12;
365 	Error += sizeof(glm::highp_i32vec4) != 16;
366 	Error += sizeof(glm::highp_i64vec2) != 16;
367 	Error += sizeof(glm::highp_i64vec3) != 24;
368 	Error += sizeof(glm::highp_i64vec4) != 32;
369 
370 	return Error;
371 }
372 
test_ivec_precision()373 static int test_ivec_precision()
374 {
375 	int Error = 0;
376 
377 	{
378 		glm::i8vec2 v1(0);
379 		glm::lowp_i8vec2 v2(v1);
380 		glm::mediump_i8vec2 v3(v1);
381 		glm::highp_i8vec2 v4(v1);
382 
383 		Error += glm::all(glm::equal(v1, glm::i8vec2(v2))) ? 0 : 1;
384 		Error += glm::all(glm::equal(v1, glm::i8vec2(v3))) ? 0 : 1;
385 		Error += glm::all(glm::equal(v1, glm::i8vec2(v4))) ? 0 : 1;
386 	}
387 
388 	{
389 		glm::i8vec3 v1(0);
390 		glm::lowp_i8vec3 v2(v1);
391 		glm::mediump_i8vec3 v3(v1);
392 		glm::highp_i8vec3 v4(v1);
393 
394 		Error += glm::all(glm::equal(v1, glm::i8vec3(v2))) ? 0 : 1;
395 		Error += glm::all(glm::equal(v1, glm::i8vec3(v3))) ? 0 : 1;
396 		Error += glm::all(glm::equal(v1, glm::i8vec3(v4))) ? 0 : 1;
397 	}
398 
399 	{
400 		glm::i8vec4 v1(0);
401 		glm::lowp_i8vec4 v2(v1);
402 		glm::mediump_i8vec4 v3(v1);
403 		glm::highp_i8vec4 v4(v1);
404 
405 		Error += glm::all(glm::equal(v1, glm::i8vec4(v2))) ? 0 : 1;
406 		Error += glm::all(glm::equal(v1, glm::i8vec4(v3))) ? 0 : 1;
407 		Error += glm::all(glm::equal(v1, glm::i8vec4(v4))) ? 0 : 1;
408 	}
409 
410 	{
411 		glm::i16vec2 v1(0);
412 		glm::lowp_i16vec2 v2(v1);
413 		glm::mediump_i16vec2 v3(v1);
414 		glm::highp_i16vec2 v4(v1);
415 
416 		Error += glm::all(glm::equal(v1, glm::i16vec2(v2))) ? 0 : 1;
417 		Error += glm::all(glm::equal(v1, glm::i16vec2(v3))) ? 0 : 1;
418 		Error += glm::all(glm::equal(v1, glm::i16vec2(v4))) ? 0 : 1;
419 	}
420 
421 	{
422 		glm::i16vec3 v1(0);
423 		glm::lowp_i16vec3 v2(v1);
424 		glm::mediump_i16vec3 v3(v1);
425 		glm::highp_i16vec3 v4(v1);
426 
427 		Error += glm::all(glm::equal(v1, glm::i16vec3(v2))) ? 0 : 1;
428 		Error += glm::all(glm::equal(v1, glm::i16vec3(v3))) ? 0 : 1;
429 		Error += glm::all(glm::equal(v1, glm::i16vec3(v4))) ? 0 : 1;
430 	}
431 
432 	{
433 		glm::i16vec4 v1(0);
434 		glm::lowp_i16vec4 v2(v1);
435 		glm::mediump_i16vec4 v3(v1);
436 		glm::highp_i16vec4 v4(v1);
437 
438 		Error += glm::all(glm::equal(v1, glm::i16vec4(v2))) ? 0 : 1;
439 		Error += glm::all(glm::equal(v1, glm::i16vec4(v3))) ? 0 : 1;
440 		Error += glm::all(glm::equal(v1, glm::i16vec4(v4))) ? 0 : 1;
441 	}
442 
443 	{
444 		glm::i32vec2 v1(0);
445 		glm::lowp_i32vec2 v2(v1);
446 		glm::mediump_i32vec2 v3(v1);
447 		glm::highp_i32vec2 v4(v1);
448 
449 		Error += glm::all(glm::equal(v1, glm::i32vec2(v2))) ? 0 : 1;
450 		Error += glm::all(glm::equal(v1, glm::i32vec2(v3))) ? 0 : 1;
451 		Error += glm::all(glm::equal(v1, glm::i32vec2(v4))) ? 0 : 1;
452 	}
453 
454 	{
455 		glm::i32vec3 v1(0);
456 		glm::lowp_i32vec3 v2(v1);
457 		glm::mediump_i32vec3 v3(v1);
458 		glm::highp_i32vec3 v4(v1);
459 
460 		Error += glm::all(glm::equal(v1, glm::i32vec3(v2))) ? 0 : 1;
461 		Error += glm::all(glm::equal(v1, glm::i32vec3(v3))) ? 0 : 1;
462 		Error += glm::all(glm::equal(v1, glm::i32vec3(v4))) ? 0 : 1;
463 	}
464 
465 	{
466 		glm::i32vec4 v1(0);
467 		glm::lowp_i32vec4 v2(v1);
468 		glm::mediump_i32vec4 v3(v1);
469 		glm::highp_i32vec4 v4(v1);
470 
471 		Error += glm::all(glm::equal(v1, glm::i32vec4(v2))) ? 0 : 1;
472 		Error += glm::all(glm::equal(v1, glm::i32vec4(v3))) ? 0 : 1;
473 		Error += glm::all(glm::equal(v1, glm::i32vec4(v4))) ? 0 : 1;
474 	}
475 
476 	{
477 		glm::i64vec2 v1(0);
478 		glm::lowp_i64vec2 v2(v1);
479 		glm::mediump_i64vec2 v3(v1);
480 		glm::highp_i64vec2 v4(v1);
481 
482 		Error += glm::all(glm::equal(v1, glm::i64vec2(v2))) ? 0 : 1;
483 		Error += glm::all(glm::equal(v1, glm::i64vec2(v3))) ? 0 : 1;
484 		Error += glm::all(glm::equal(v1, glm::i64vec2(v4))) ? 0 : 1;
485 	}
486 
487 	{
488 		glm::i64vec3 v1(0);
489 		glm::lowp_i64vec3 v2(v1);
490 		glm::mediump_i64vec3 v3(v1);
491 		glm::highp_i64vec3 v4(v1);
492 
493 		Error += glm::all(glm::equal(v1, glm::i64vec3(v2))) ? 0 : 1;
494 		Error += glm::all(glm::equal(v1, glm::i64vec3(v3))) ? 0 : 1;
495 		Error += glm::all(glm::equal(v1, glm::i64vec3(v4))) ? 0 : 1;
496 	}
497 
498 	{
499 		glm::i64vec4 v1(0);
500 		glm::lowp_i64vec4 v2(v1);
501 		glm::mediump_i64vec4 v3(v1);
502 		glm::highp_i64vec4 v4(v1);
503 
504 		Error += glm::all(glm::equal(v1, glm::i64vec4(v2))) ? 0 : 1;
505 		Error += glm::all(glm::equal(v1, glm::i64vec4(v3))) ? 0 : 1;
506 		Error += glm::all(glm::equal(v1, glm::i64vec4(v4))) ? 0 : 1;
507 	}
508 
509 	return Error;
510 }
511 
test_uvec_size()512 static int test_uvec_size()
513 {
514 	int Error = 0;
515 
516 	Error += sizeof(glm::u8vec2) != 2;
517 	Error += sizeof(glm::u8vec3) != 3;
518 	Error += sizeof(glm::u8vec4) != 4;
519 	Error += sizeof(glm::u16vec2) != 4;
520 	Error += sizeof(glm::u16vec3) != 6;
521 	Error += sizeof(glm::u16vec4) != 8;
522 	Error += sizeof(glm::u32vec2) != 8;
523 	Error += sizeof(glm::u32vec3) != 12;
524 	Error += sizeof(glm::u32vec4) != 16;
525 	Error += sizeof(glm::u64vec2) != 16;
526 	Error += sizeof(glm::u64vec3) != 24;
527 	Error += sizeof(glm::u64vec4) != 32;
528 
529 	Error += sizeof(glm::lowp_u8vec2) != 2;
530 	Error += sizeof(glm::lowp_u8vec3) != 3;
531 	Error += sizeof(glm::lowp_u8vec4) != 4;
532 	Error += sizeof(glm::lowp_u16vec2) != 4;
533 	Error += sizeof(glm::lowp_u16vec3) != 6;
534 	Error += sizeof(glm::lowp_u16vec4) != 8;
535 	Error += sizeof(glm::lowp_u32vec2) != 8;
536 	Error += sizeof(glm::lowp_u32vec3) != 12;
537 	Error += sizeof(glm::lowp_u32vec4) != 16;
538 	Error += sizeof(glm::lowp_u64vec2) != 16;
539 	Error += sizeof(glm::lowp_u64vec3) != 24;
540 	Error += sizeof(glm::lowp_u64vec4) != 32;
541 
542 	Error += sizeof(glm::mediump_u8vec2) != 2;
543 	Error += sizeof(glm::mediump_u8vec3) != 3;
544 	Error += sizeof(glm::mediump_u8vec4) != 4;
545 	Error += sizeof(glm::mediump_u16vec2) != 4;
546 	Error += sizeof(glm::mediump_u16vec3) != 6;
547 	Error += sizeof(glm::mediump_u16vec4) != 8;
548 	Error += sizeof(glm::mediump_u32vec2) != 8;
549 	Error += sizeof(glm::mediump_u32vec3) != 12;
550 	Error += sizeof(glm::mediump_u32vec4) != 16;
551 	Error += sizeof(glm::mediump_u64vec2) != 16;
552 	Error += sizeof(glm::mediump_u64vec3) != 24;
553 	Error += sizeof(glm::mediump_u64vec4) != 32;
554 
555 	Error += sizeof(glm::highp_u8vec2) != 2;
556 	Error += sizeof(glm::highp_u8vec3) != 3;
557 	Error += sizeof(glm::highp_u8vec4) != 4;
558 	Error += sizeof(glm::highp_u16vec2) != 4;
559 	Error += sizeof(glm::highp_u16vec3) != 6;
560 	Error += sizeof(glm::highp_u16vec4) != 8;
561 	Error += sizeof(glm::highp_u32vec2) != 8;
562 	Error += sizeof(glm::highp_u32vec3) != 12;
563 	Error += sizeof(glm::highp_u32vec4) != 16;
564 	Error += sizeof(glm::highp_u64vec2) != 16;
565 	Error += sizeof(glm::highp_u64vec3) != 24;
566 	Error += sizeof(glm::highp_u64vec4) != 32;
567 
568 	return Error;
569 }
570 
test_uvec_precision()571 static int test_uvec_precision()
572 {
573 	int Error = 0;
574 
575 	{
576 		glm::u8vec2 v1(0);
577 		glm::lowp_u8vec2 v2(v1);
578 		glm::mediump_u8vec2 v3(v1);
579 		glm::highp_u8vec2 v4(v1);
580 
581 		Error += glm::all(glm::equal(v1, glm::u8vec2(v2))) ? 0 : 1;
582 		Error += glm::all(glm::equal(v1, glm::u8vec2(v3))) ? 0 : 1;
583 		Error += glm::all(glm::equal(v1, glm::u8vec2(v4))) ? 0 : 1;
584 	}
585 
586 	{
587 		glm::u8vec3 v1(0);
588 		glm::lowp_u8vec3 v2(v1);
589 		glm::mediump_u8vec3 v3(v1);
590 		glm::highp_u8vec3 v4(v1);
591 
592 		Error += glm::all(glm::equal(v1, glm::u8vec3(v2))) ? 0 : 1;
593 		Error += glm::all(glm::equal(v1, glm::u8vec3(v3))) ? 0 : 1;
594 		Error += glm::all(glm::equal(v1, glm::u8vec3(v4))) ? 0 : 1;
595 	}
596 
597 	{
598 		glm::u8vec4 v1(0);
599 		glm::lowp_u8vec4 v2(v1);
600 		glm::mediump_u8vec4 v3(v1);
601 		glm::highp_u8vec4 v4(v1);
602 
603 		Error += glm::all(glm::equal(v1, glm::u8vec4(v2))) ? 0 : 1;
604 		Error += glm::all(glm::equal(v1, glm::u8vec4(v3))) ? 0 : 1;
605 		Error += glm::all(glm::equal(v1, glm::u8vec4(v4))) ? 0 : 1;
606 	}
607 
608 	{
609 		glm::u16vec2 v1(0);
610 		glm::lowp_u16vec2 v2(v1);
611 		glm::mediump_u16vec2 v3(v1);
612 		glm::highp_u16vec2 v4(v1);
613 
614 		Error += glm::all(glm::equal(v1, glm::u16vec2(v2))) ? 0 : 1;
615 		Error += glm::all(glm::equal(v1, glm::u16vec2(v3))) ? 0 : 1;
616 		Error += glm::all(glm::equal(v1, glm::u16vec2(v4))) ? 0 : 1;
617 	}
618 
619 	{
620 		glm::u16vec3 v1(0);
621 		glm::lowp_u16vec3 v2(v1);
622 		glm::mediump_u16vec3 v3(v1);
623 		glm::highp_u16vec3 v4(v1);
624 
625 		Error += glm::all(glm::equal(v1, glm::u16vec3(v2))) ? 0 : 1;
626 		Error += glm::all(glm::equal(v1, glm::u16vec3(v3))) ? 0 : 1;
627 		Error += glm::all(glm::equal(v1, glm::u16vec3(v4))) ? 0 : 1;
628 	}
629 
630 	{
631 		glm::u16vec4 v1(0);
632 		glm::lowp_u16vec4 v2(v1);
633 		glm::mediump_u16vec4 v3(v1);
634 		glm::highp_u16vec4 v4(v1);
635 
636 		Error += glm::all(glm::equal(v1, glm::u16vec4(v2))) ? 0 : 1;
637 		Error += glm::all(glm::equal(v1, glm::u16vec4(v3))) ? 0 : 1;
638 		Error += glm::all(glm::equal(v1, glm::u16vec4(v4))) ? 0 : 1;
639 	}
640 
641 	{
642 		glm::u32vec2 v1(0);
643 		glm::lowp_u32vec2 v2(v1);
644 		glm::mediump_u32vec2 v3(v1);
645 		glm::highp_u32vec2 v4(v1);
646 
647 		Error += glm::all(glm::equal(v1, glm::u32vec2(v2))) ? 0 : 1;
648 		Error += glm::all(glm::equal(v1, glm::u32vec2(v3))) ? 0 : 1;
649 		Error += glm::all(glm::equal(v1, glm::u32vec2(v4))) ? 0 : 1;
650 	}
651 
652 	{
653 		glm::u32vec3 v1(0);
654 		glm::lowp_u32vec3 v2(v1);
655 		glm::mediump_u32vec3 v3(v1);
656 		glm::highp_u32vec3 v4(v1);
657 
658 		Error += glm::all(glm::equal(v1, glm::u32vec3(v2))) ? 0 : 1;
659 		Error += glm::all(glm::equal(v1, glm::u32vec3(v3))) ? 0 : 1;
660 		Error += glm::all(glm::equal(v1, glm::u32vec3(v4))) ? 0 : 1;
661 	}
662 
663 	{
664 		glm::u32vec4 v1(0);
665 		glm::lowp_u32vec4 v2(v1);
666 		glm::mediump_u32vec4 v3(v1);
667 		glm::highp_u32vec4 v4(v1);
668 
669 		Error += glm::all(glm::equal(v1, glm::u32vec4(v2))) ? 0 : 1;
670 		Error += glm::all(glm::equal(v1, glm::u32vec4(v3))) ? 0 : 1;
671 		Error += glm::all(glm::equal(v1, glm::u32vec4(v4))) ? 0 : 1;
672 	}
673 
674 	{
675 		glm::u64vec2 v1(0);
676 		glm::lowp_u64vec2 v2(v1);
677 		glm::mediump_u64vec2 v3(v1);
678 		glm::highp_u64vec2 v4(v1);
679 
680 		Error += glm::all(glm::equal(v1, glm::u64vec2(v2))) ? 0 : 1;
681 		Error += glm::all(glm::equal(v1, glm::u64vec2(v3))) ? 0 : 1;
682 		Error += glm::all(glm::equal(v1, glm::u64vec2(v4))) ? 0 : 1;
683 	}
684 
685 	{
686 		glm::u64vec3 v1(0);
687 		glm::lowp_u64vec3 v2(v1);
688 		glm::mediump_u64vec3 v3(v1);
689 		glm::highp_u64vec3 v4(v1);
690 
691 		Error += glm::all(glm::equal(v1, glm::u64vec3(v2))) ? 0 : 1;
692 		Error += glm::all(glm::equal(v1, glm::u64vec3(v3))) ? 0 : 1;
693 		Error += glm::all(glm::equal(v1, glm::u64vec3(v4))) ? 0 : 1;
694 	}
695 
696 	{
697 		glm::u64vec4 v1(0);
698 		glm::lowp_u64vec4 v2(v1);
699 		glm::mediump_u64vec4 v3(v1);
700 		glm::highp_u64vec4 v4(v1);
701 
702 		Error += glm::all(glm::equal(v1, glm::u64vec4(v2))) ? 0 : 1;
703 		Error += glm::all(glm::equal(v1, glm::u64vec4(v3))) ? 0 : 1;
704 		Error += glm::all(glm::equal(v1, glm::u64vec4(v4))) ? 0 : 1;
705 	}
706 
707 	return Error;
708 }
709 
test_fmat_size()710 static int test_fmat_size()
711 {
712 	int Error = 0;
713 
714 	Error += sizeof(glm::mat2) != 16;
715 	Error += sizeof(glm::mat3) != 36;
716 	Error += sizeof(glm::mat4) != 64;
717 	Error += sizeof(glm::mat2x2) != 16;
718 	Error += sizeof(glm::mat2x3) != 24;
719 	Error += sizeof(glm::mat2x4) != 32;
720 	Error += sizeof(glm::mat3x2) != 24;
721 	Error += sizeof(glm::mat3x3) != 36;
722 	Error += sizeof(glm::mat3x4) != 48;
723 	Error += sizeof(glm::mat4x2) != 32;
724 	Error += sizeof(glm::mat4x3) != 48;
725 	Error += sizeof(glm::mat4x4) != 64;
726 
727 	Error += sizeof(glm::fmat2) != 16;
728 	Error += sizeof(glm::fmat3) != 36;
729 	Error += sizeof(glm::fmat4) != 64;
730 	Error += sizeof(glm::fmat2x2) != 16;
731 	Error += sizeof(glm::fmat2x3) != 24;
732 	Error += sizeof(glm::fmat2x4) != 32;
733 	Error += sizeof(glm::fmat3x2) != 24;
734 	Error += sizeof(glm::fmat3x3) != 36;
735 	Error += sizeof(glm::fmat3x4) != 48;
736 	Error += sizeof(glm::fmat4x2) != 32;
737 	Error += sizeof(glm::fmat4x3) != 48;
738 	Error += sizeof(glm::fmat4x4) != 64;
739 
740 	Error += sizeof(glm::f32mat2) != 16;
741 	Error += sizeof(glm::f32mat3) != 36;
742 	Error += sizeof(glm::f32mat4) != 64;
743 	Error += sizeof(glm::f32mat2x2) != 16;
744 	Error += sizeof(glm::f32mat2x3) != 24;
745 	Error += sizeof(glm::f32mat2x4) != 32;
746 	Error += sizeof(glm::f32mat3x2) != 24;
747 	Error += sizeof(glm::f32mat3x3) != 36;
748 	Error += sizeof(glm::f32mat3x4) != 48;
749 	Error += sizeof(glm::f32mat4x2) != 32;
750 	Error += sizeof(glm::f32mat4x3) != 48;
751 	Error += sizeof(glm::f32mat4x4) != 64;
752 
753 
754 	Error += sizeof(glm::lowp_mat2) != 16;
755 	Error += sizeof(glm::lowp_mat3) != 36;
756 	Error += sizeof(glm::lowp_mat4) != 64;
757 	Error += sizeof(glm::lowp_mat2x2) != 16;
758 	Error += sizeof(glm::lowp_mat2x3) != 24;
759 	Error += sizeof(glm::lowp_mat2x4) != 32;
760 	Error += sizeof(glm::lowp_mat3x2) != 24;
761 	Error += sizeof(glm::lowp_mat3x3) != 36;
762 	Error += sizeof(glm::lowp_mat3x4) != 48;
763 	Error += sizeof(glm::lowp_mat4x2) != 32;
764 	Error += sizeof(glm::lowp_mat4x3) != 48;
765 	Error += sizeof(glm::lowp_mat4x4) != 64;
766 
767 	Error += sizeof(glm::lowp_fmat2) != 16;
768 	Error += sizeof(glm::lowp_fmat3) != 36;
769 	Error += sizeof(glm::lowp_fmat4) != 64;
770 	Error += sizeof(glm::lowp_fmat2x2) != 16;
771 	Error += sizeof(glm::lowp_fmat2x3) != 24;
772 	Error += sizeof(glm::lowp_fmat2x4) != 32;
773 	Error += sizeof(glm::lowp_fmat3x2) != 24;
774 	Error += sizeof(glm::lowp_fmat3x3) != 36;
775 	Error += sizeof(glm::lowp_fmat3x4) != 48;
776 	Error += sizeof(glm::lowp_fmat4x2) != 32;
777 	Error += sizeof(glm::lowp_fmat4x3) != 48;
778 	Error += sizeof(glm::lowp_fmat4x4) != 64;
779 
780 	Error += sizeof(glm::lowp_f32mat2) != 16;
781 	Error += sizeof(glm::lowp_f32mat3) != 36;
782 	Error += sizeof(glm::lowp_f32mat4) != 64;
783 	Error += sizeof(glm::lowp_f32mat2x2) != 16;
784 	Error += sizeof(glm::lowp_f32mat2x3) != 24;
785 	Error += sizeof(glm::lowp_f32mat2x4) != 32;
786 	Error += sizeof(glm::lowp_f32mat3x2) != 24;
787 	Error += sizeof(glm::lowp_f32mat3x3) != 36;
788 	Error += sizeof(glm::lowp_f32mat3x4) != 48;
789 	Error += sizeof(glm::lowp_f32mat4x2) != 32;
790 	Error += sizeof(glm::lowp_f32mat4x3) != 48;
791 	Error += sizeof(glm::lowp_f32mat4x4) != 64;
792 
793 	Error += sizeof(glm::mediump_mat2) != 16;
794 	Error += sizeof(glm::mediump_mat3) != 36;
795 	Error += sizeof(glm::mediump_mat4) != 64;
796 	Error += sizeof(glm::mediump_mat2x2) != 16;
797 	Error += sizeof(glm::mediump_mat2x3) != 24;
798 	Error += sizeof(glm::mediump_mat2x4) != 32;
799 	Error += sizeof(glm::mediump_mat3x2) != 24;
800 	Error += sizeof(glm::mediump_mat3x3) != 36;
801 	Error += sizeof(glm::mediump_mat3x4) != 48;
802 	Error += sizeof(glm::mediump_mat4x2) != 32;
803 	Error += sizeof(glm::mediump_mat4x3) != 48;
804 	Error += sizeof(glm::mediump_mat4x4) != 64;
805 
806 	Error += sizeof(glm::mediump_fmat2) != 16;
807 	Error += sizeof(glm::mediump_fmat3) != 36;
808 	Error += sizeof(glm::mediump_fmat4) != 64;
809 	Error += sizeof(glm::mediump_fmat2x2) != 16;
810 	Error += sizeof(glm::mediump_fmat2x3) != 24;
811 	Error += sizeof(glm::mediump_fmat2x4) != 32;
812 	Error += sizeof(glm::mediump_fmat3x2) != 24;
813 	Error += sizeof(glm::mediump_fmat3x3) != 36;
814 	Error += sizeof(glm::mediump_fmat3x4) != 48;
815 	Error += sizeof(glm::mediump_fmat4x2) != 32;
816 	Error += sizeof(glm::mediump_fmat4x3) != 48;
817 	Error += sizeof(glm::mediump_fmat4x4) != 64;
818 
819 	Error += sizeof(glm::mediump_f32mat2) != 16;
820 	Error += sizeof(glm::mediump_f32mat3) != 36;
821 	Error += sizeof(glm::mediump_f32mat4) != 64;
822 	Error += sizeof(glm::mediump_f32mat2x2) != 16;
823 	Error += sizeof(glm::mediump_f32mat2x3) != 24;
824 	Error += sizeof(glm::mediump_f32mat2x4) != 32;
825 	Error += sizeof(glm::mediump_f32mat3x2) != 24;
826 	Error += sizeof(glm::mediump_f32mat3x3) != 36;
827 	Error += sizeof(glm::mediump_f32mat3x4) != 48;
828 	Error += sizeof(glm::mediump_f32mat4x2) != 32;
829 	Error += sizeof(glm::mediump_f32mat4x3) != 48;
830 	Error += sizeof(glm::mediump_f32mat4x4) != 64;
831 
832 	Error += sizeof(glm::highp_mat2) != 16;
833 	Error += sizeof(glm::highp_mat3) != 36;
834 	Error += sizeof(glm::highp_mat4) != 64;
835 	Error += sizeof(glm::highp_mat2x2) != 16;
836 	Error += sizeof(glm::highp_mat2x3) != 24;
837 	Error += sizeof(glm::highp_mat2x4) != 32;
838 	Error += sizeof(glm::highp_mat3x2) != 24;
839 	Error += sizeof(glm::highp_mat3x3) != 36;
840 	Error += sizeof(glm::highp_mat3x4) != 48;
841 	Error += sizeof(glm::highp_mat4x2) != 32;
842 	Error += sizeof(glm::highp_mat4x3) != 48;
843 	Error += sizeof(glm::highp_mat4x4) != 64;
844 
845 	Error += sizeof(glm::highp_fmat2) != 16;
846 	Error += sizeof(glm::highp_fmat3) != 36;
847 	Error += sizeof(glm::highp_fmat4) != 64;
848 	Error += sizeof(glm::highp_fmat2x2) != 16;
849 	Error += sizeof(glm::highp_fmat2x3) != 24;
850 	Error += sizeof(glm::highp_fmat2x4) != 32;
851 	Error += sizeof(glm::highp_fmat3x2) != 24;
852 	Error += sizeof(glm::highp_fmat3x3) != 36;
853 	Error += sizeof(glm::highp_fmat3x4) != 48;
854 	Error += sizeof(glm::highp_fmat4x2) != 32;
855 	Error += sizeof(glm::highp_fmat4x3) != 48;
856 	Error += sizeof(glm::highp_fmat4x4) != 64;
857 
858 	Error += sizeof(glm::highp_f32mat2) != 16;
859 	Error += sizeof(glm::highp_f32mat3) != 36;
860 	Error += sizeof(glm::highp_f32mat4) != 64;
861 	Error += sizeof(glm::highp_f32mat2x2) != 16;
862 	Error += sizeof(glm::highp_f32mat2x3) != 24;
863 	Error += sizeof(glm::highp_f32mat2x4) != 32;
864 	Error += sizeof(glm::highp_f32mat3x2) != 24;
865 	Error += sizeof(glm::highp_f32mat3x3) != 36;
866 	Error += sizeof(glm::highp_f32mat3x4) != 48;
867 	Error += sizeof(glm::highp_f32mat4x2) != 32;
868 	Error += sizeof(glm::highp_f32mat4x3) != 48;
869 	Error += sizeof(glm::highp_f32mat4x4) != 64;
870 
871 	return Error;
872 }
873 
test_dmat_size()874 static int test_dmat_size()
875 {
876 	int Error = 0;
877 
878 	Error += sizeof(glm::f64mat2) != 32;
879 	Error += sizeof(glm::f64mat3) != 72;
880 	Error += sizeof(glm::f64mat4) != 128;
881 	Error += sizeof(glm::f64mat2x2) != 32;
882 	Error += sizeof(glm::f64mat2x3) != 48;
883 	Error += sizeof(glm::f64mat2x4) != 64;
884 	Error += sizeof(glm::f64mat3x2) != 48;
885 	Error += sizeof(glm::f64mat3x3) != 72;
886 	Error += sizeof(glm::f64mat3x4) != 96;
887 	Error += sizeof(glm::f64mat4x2) != 64;
888 	Error += sizeof(glm::f64mat4x3) != 96;
889 	Error += sizeof(glm::f64mat4x4) != 128;
890 
891 	Error += sizeof(glm::lowp_f64mat2) != 32;
892 	Error += sizeof(glm::lowp_f64mat3) != 72;
893 	Error += sizeof(glm::lowp_f64mat4) != 128;
894 	Error += sizeof(glm::lowp_f64mat2x2) != 32;
895 	Error += sizeof(glm::lowp_f64mat2x3) != 48;
896 	Error += sizeof(glm::lowp_f64mat2x4) != 64;
897 	Error += sizeof(glm::lowp_f64mat3x2) != 48;
898 	Error += sizeof(glm::lowp_f64mat3x3) != 72;
899 	Error += sizeof(glm::lowp_f64mat3x4) != 96;
900 	Error += sizeof(glm::lowp_f64mat4x2) != 64;
901 	Error += sizeof(glm::lowp_f64mat4x3) != 96;
902 	Error += sizeof(glm::lowp_f64mat4x4) != 128;
903 
904 	Error += sizeof(glm::mediump_f64mat2) != 32;
905 	Error += sizeof(glm::mediump_f64mat3) != 72;
906 	Error += sizeof(glm::mediump_f64mat4) != 128;
907 	Error += sizeof(glm::mediump_f64mat2x2) != 32;
908 	Error += sizeof(glm::mediump_f64mat2x3) != 48;
909 	Error += sizeof(glm::mediump_f64mat2x4) != 64;
910 	Error += sizeof(glm::mediump_f64mat3x2) != 48;
911 	Error += sizeof(glm::mediump_f64mat3x3) != 72;
912 	Error += sizeof(glm::mediump_f64mat3x4) != 96;
913 	Error += sizeof(glm::mediump_f64mat4x2) != 64;
914 	Error += sizeof(glm::mediump_f64mat4x3) != 96;
915 	Error += sizeof(glm::mediump_f64mat4x4) != 128;
916 
917 	Error += sizeof(glm::highp_f64mat2) != 32;
918 	Error += sizeof(glm::highp_f64mat3) != 72;
919 	Error += sizeof(glm::highp_f64mat4) != 128;
920 	Error += sizeof(glm::highp_f64mat2x2) != 32;
921 	Error += sizeof(glm::highp_f64mat2x3) != 48;
922 	Error += sizeof(glm::highp_f64mat2x4) != 64;
923 	Error += sizeof(glm::highp_f64mat3x2) != 48;
924 	Error += sizeof(glm::highp_f64mat3x3) != 72;
925 	Error += sizeof(glm::highp_f64mat3x4) != 96;
926 	Error += sizeof(glm::highp_f64mat4x2) != 64;
927 	Error += sizeof(glm::highp_f64mat4x3) != 96;
928 	Error += sizeof(glm::highp_f64mat4x4) != 128;
929 
930 	return Error;
931 }
932 
test_quat_size()933 static int test_quat_size()
934 {
935 	int Error = 0;
936 
937 	Error += sizeof(glm::f32quat) != 16;
938 	Error += sizeof(glm::f64quat) != 32;
939 
940 	Error += sizeof(glm::lowp_f32quat) != 16;
941 	Error += sizeof(glm::lowp_f64quat) != 32;
942 
943 	Error += sizeof(glm::mediump_f32quat) != 16;
944 	Error += sizeof(glm::mediump_f64quat) != 32;
945 
946 	Error += sizeof(glm::highp_f32quat) != 16;
947 	Error += sizeof(glm::highp_f64quat) != 32;
948 
949 	return Error;
950 }
951 
test_quat_precision()952 static int test_quat_precision()
953 {
954 	int Error = 0;
955 
956 	{
957 		glm::f32quat q1(0.f, glm::vec3(0.f, 0.f, 1.f));
958 		glm::lowp_f32quat qA(q1);
959 		glm::mediump_f32quat qB(q1);
960 		glm::highp_f32quat qC(q1);
961 		glm::f32quat q2(qA);
962 		glm::f32quat q3(qB);
963 		glm::f32quat q4(qC);
964 
965 		Error += glm::all(glm::equal(q1, q2, glm::epsilon<float>())) ? 0 : 1;
966 		Error += glm::all(glm::equal(q1, q3, glm::epsilon<float>())) ? 0 : 1;
967 		Error += glm::all(glm::equal(q1, q4, glm::epsilon<float>())) ? 0 : 1;
968 	}
969 
970 	return Error;
971 }
972 
test_fvec_conversion()973 static int test_fvec_conversion()
974 {
975 	int Error(0);
976 
977 	{
978 		glm::highp_vec4 a = glm::vec4(1, 2, 3, 4);
979 		glm::mediump_vec4 b = glm::vec4(1, 2, 3, 4);
980 		glm::lowp_vec4 c = b;
981 		glm::mediump_vec4 d = c;
982 		glm::lowp_ivec4 e = glm::ivec4(d);
983 		glm::lowp_ivec3 f = glm::ivec3(e);
984 
985 		Error += glm::all(glm::equal(b, d, glm::epsilon<float>())) ? 0 : 1;
986 	}
987 
988 	return Error;
989 }
990 
991 #if GLM_HAS_OPENMP
test_openmp()992 static int test_openmp()
993 {
994 	std::vector<glm::u8vec3> VectorA(1000);
995 	std::vector<glm::u8vec3> VectorB(1000);
996 	std::vector<glm::u8vec3> VectorC(1000);
997 
998 	for (std::size_t i = 0; i < VectorA.size(); ++i)
999 	{
1000 		VectorA[i] = glm::u8vec3(1, 1, 1);
1001 		VectorB[i] = glm::u8vec3(1, 1, 1);
1002 	}
1003 
1004 	#pragma omp parallel for default(none) shared(VectorA, VectorB, VectorC)
1005 	for (int i = 0; i < static_cast<int>(VectorC.size()); ++i)
1006 	{
1007 		VectorC[i] = VectorA[i] + VectorB[i];
1008 	}
1009 
1010 	return 0;
1011 }
1012 #endif//GLM_HAS_OPENMP
1013 
main()1014 int main()
1015 {
1016 	int Error = 0;
1017 
1018 	Error += test_scalar_size();
1019 	Error += test_fvec_size();
1020 
1021 	Error += test_fvec_precision();
1022 	Error += test_fvec_conversion();
1023 
1024 	Error += test_dvec_precision();
1025 
1026 	Error += test_uvec_size();
1027 	Error += test_uvec_precision();
1028 	Error += test_ivec_size();
1029 	Error += test_ivec_precision();
1030 
1031 	Error += test_fmat_size();
1032 	Error += test_dmat_size();
1033 	Error += test_quat_size();
1034 	Error += test_quat_precision();
1035 
1036 #	if GLM_HAS_OPENMP
1037 		Error += test_openmp();
1038 #	endif//
1039 
1040 	return Error;
1041 }
1042