1 #define GLM_FORCE_MESSAGES
2 #include <glm/vec3.hpp>
3 #include <cstdio>
4 
test_compiler()5 int test_compiler()
6 {
7 	int Error(0);
8 
9 	if(GLM_COMPILER & GLM_COMPILER_VC)
10 	{
11 		switch(GLM_COMPILER)
12 		{
13 		case GLM_COMPILER_VC12:
14 			std::printf("Visual C++ 12 - 2013\n");
15 			break;
16 		case GLM_COMPILER_VC14:
17 			std::printf("Visual C++ 14 - 2015\n");
18 			break;
19 		case GLM_COMPILER_VC15:
20 			std::printf("Visual C++ 15 - 2017\n");
21 			break;
22 		case GLM_COMPILER_VC16:
23 			std::printf("Visual C++ 16 - 20XX\n");
24 			break;
25 		default:
26 			std::printf("Visual C++ version not detected\n");
27 			Error += 1;
28 			break;
29 		}
30 	}
31 	else if(GLM_COMPILER & GLM_COMPILER_GCC)
32 	{
33 		switch(GLM_COMPILER)
34 		{
35 		case GLM_COMPILER_GCC46:
36 			std::printf("GCC 4.6\n");
37 			break;
38 		case GLM_COMPILER_GCC47:
39 			std::printf("GCC 4.7\n");
40 			break;
41 		case GLM_COMPILER_GCC48:
42 			std::printf("GCC 4.8\n");
43 			break;
44 		case GLM_COMPILER_GCC49:
45 			std::printf("GCC 4.9\n");
46 			break;
47 		case GLM_COMPILER_GCC5:
48 			std::printf("GCC 5\n");
49 			break;
50 		case GLM_COMPILER_GCC6:
51 			std::printf("GCC 6\n");
52 			break;
53 		case GLM_COMPILER_GCC7:
54 			std::printf("GCC 7\n");
55 			break;
56 		case GLM_COMPILER_GCC8:
57 			std::printf("GCC 8\n");
58 			break;
59 		default:
60 			std::printf("GCC version not detected\n");
61 			Error += 1;
62 			break;
63 		}
64 	}
65 	else if(GLM_COMPILER & GLM_COMPILER_CUDA)
66 	{
67 		std::printf("CUDA\n");
68 	}
69 	else if(GLM_COMPILER & GLM_COMPILER_CLANG)
70 	{
71 		switch(GLM_COMPILER)
72 		{
73 		case GLM_COMPILER_CLANG34:
74 			std::printf("Clang 3.4\n");
75 			break;
76 		case GLM_COMPILER_CLANG35:
77 			std::printf("Clang 3.5\n");
78 			break;
79 		case GLM_COMPILER_CLANG36:
80 			std::printf("Clang 3.6\n");
81 			break;
82 		case GLM_COMPILER_CLANG37:
83 			std::printf("Clang 3.7\n");
84 			break;
85 		case GLM_COMPILER_CLANG38:
86 			std::printf("Clang 3.8\n");
87 			break;
88 		case GLM_COMPILER_CLANG39:
89 			std::printf("Clang 3.9\n");
90 			break;
91 		case GLM_COMPILER_CLANG40:
92 			std::printf("Clang 4.0\n");
93 			break;
94 		case GLM_COMPILER_CLANG41:
95 			std::printf("Clang 4.1\n");
96 			break;
97 		case GLM_COMPILER_CLANG42:
98 			std::printf("Clang 4.2\n");
99 			break;
100 		default:
101 			std::printf("LLVM version not detected\n");
102 			break;
103 		}
104 	}
105 	else if(GLM_COMPILER & GLM_COMPILER_INTEL)
106 	{
107 		switch(GLM_COMPILER)
108 		{
109 		case GLM_COMPILER_INTEL14:
110 			std::printf("ICC 14 - 2013 SP1\n");
111 			break;
112 		case GLM_COMPILER_INTEL15:
113 			std::printf("ICC 15 - 2015\n");
114 			break;
115 		case GLM_COMPILER_INTEL16:
116 			std::printf("ICC 16 - 2017\n");
117 			break;
118 		case GLM_COMPILER_INTEL17:
119 			std::printf("ICC 17 - 20XX\n");
120 			break;
121 		default:
122 			std::printf("Intel compiler version not detected\n");
123 			Error += 1;
124 			break;
125 		}
126 	}
127 	else
128 	{
129 		std::printf("Undetected compiler\n");
130 		Error += 1;
131 	}
132 
133 	return Error;
134 }
135 
test_model()136 int test_model()
137 {
138 	int Error = 0;
139 
140 	Error += ((sizeof(void*) == 4) && (GLM_MODEL == GLM_MODEL_32)) || ((sizeof(void*) == 8) && (GLM_MODEL == GLM_MODEL_64)) ? 0 : 1;
141 
142 	if(GLM_MODEL == GLM_MODEL_32)
143 		std::printf("GLM_MODEL_32\n");
144 	else if(GLM_MODEL == GLM_MODEL_64)
145 		std::printf("GLM_MODEL_64\n");
146 
147 	return Error;
148 }
149 
test_instruction_set()150 int test_instruction_set()
151 {
152 	int Error = 0;
153 
154 	std::printf("GLM_ARCH: ");
155 
156 	if(GLM_ARCH == GLM_ARCH_PURE)
157 		std::printf("GLM_ARCH_PURE ");
158 	if(GLM_ARCH & GLM_ARCH_ARM_BIT)
159 		std::printf("ARM ");
160 	if(GLM_ARCH & GLM_ARCH_NEON_BIT)
161 		std::printf("NEON ");
162 	if(GLM_ARCH & GLM_ARCH_AVX2)
163 		std::printf("AVX2 ");
164 	if(GLM_ARCH & GLM_ARCH_AVX)
165 		std::printf("AVX ");
166 	if(GLM_ARCH & GLM_ARCH_SSE42_BIT)
167 		std::printf("SSE4.2 ");
168 	if(GLM_ARCH & GLM_ARCH_SSE41_BIT)
169 		std::printf("SSE4.1 ");
170 	if(GLM_ARCH & GLM_ARCH_SSSE3_BIT)
171 		std::printf("SSSE3 ");
172 	if(GLM_ARCH & GLM_ARCH_SSE3_BIT)
173 		std::printf("SSE3 ");
174 	if(GLM_ARCH & GLM_ARCH_SSE2_BIT)
175 		std::printf("SSE2 ");
176 
177 	std::printf("\n");
178 
179 	return Error;
180 }
181 
test_cpp_version()182 int test_cpp_version()
183 {
184 	std::printf("__cplusplus: %d\n", static_cast<int>(__cplusplus));
185 
186 	return 0;
187 }
188 
test_operators()189 int test_operators()
190 {
191 	glm::vec3 A(1.0f);
192 	glm::vec3 B(1.0f);
193 	bool R = A != B;
194 	bool S = A == B;
195 
196 	return (S && !R) ? 0 : 1;
197 }
198 
199 template<typename T>
200 struct vec
201 {
202 
203 };
204 
205 template<template<typename> class C, typename T>
206 struct Class
207 {
208 
209 };
210 
211 template<typename T>
212 struct Class<vec, T>
213 {
214 
215 };
216 
main()217 int main()
218 {
219 	//Class<vec, float> C;
220 
221 	int Error = 0;
222 
223 	Error += test_cpp_version();
224 	Error += test_compiler();
225 	Error += test_model();
226 	Error += test_instruction_set();
227 	Error += test_operators();
228 
229 	return Error;
230 }
231