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