1 #define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
2 #include <glm/glm.hpp>
3 
4 #if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
5 #include <type_traits>
6 
7 static_assert(sizeof(glm::bvec4) > sizeof(glm::bvec2), "Invalid sizeof");
8 static_assert(sizeof(glm::ivec4) > sizeof(glm::uvec2), "Invalid sizeof");
9 static_assert(sizeof(glm::dvec4) > sizeof(glm::dvec2), "Invalid sizeof");
10 
11 static_assert(sizeof(glm::bvec4) == sizeof(glm::bvec3), "Invalid sizeof");
12 static_assert(sizeof(glm::uvec4) == sizeof(glm::uvec3), "Invalid sizeof");
13 static_assert(sizeof(glm::dvec4) == sizeof(glm::dvec3), "Invalid sizeof");
14 
test_storage_aligned()15 static int test_storage_aligned()
16 {
17 	int Error = 0;
18 
19 	size_t size1_aligned = sizeof(glm::detail::storage<1, int, true>::type);
20 	Error += size1_aligned == sizeof(int) * 1 ? 0 : 1;
21 	size_t size2_aligned = sizeof(glm::detail::storage<2, int, true>::type);
22 	Error += size2_aligned == sizeof(int) * 2 ? 0 : 1;
23 	size_t size4_aligned = sizeof(glm::detail::storage<4, int, true>::type);
24 	Error += size4_aligned == sizeof(int) * 4 ? 0 : 1;
25 
26 	size_t align1_aligned = alignof(glm::detail::storage<1, int, true>::type);
27 	Error += align1_aligned == 4 ? 0 : 1;
28 	size_t align2_aligned = alignof(glm::detail::storage<2, int, true>::type);
29 	Error += align2_aligned == 8 ? 0 : 1;
30 	size_t align4_aligned = alignof(glm::detail::storage<4, int, true>::type);
31 	Error += align4_aligned == 16 ? 0 : 1;
32 
33 	return Error;
34 }
35 
test_storage_unaligned()36 static int test_storage_unaligned()
37 {
38 	int Error = 0;
39 
40 	size_t align1_unaligned = alignof(glm::detail::storage<1, int, false>::type);
41 	Error += align1_unaligned == sizeof(int) ? 0 : 1;
42 	size_t align2_unaligned = alignof(glm::detail::storage<2, int, false>::type);
43 	Error += align2_unaligned == sizeof(int) ? 0 : 1;
44 	size_t align3_unaligned = alignof(glm::detail::storage<3, int, false>::type);
45 	Error += align3_unaligned == sizeof(int) ? 0 : 1;
46 	size_t align4_unaligned = alignof(glm::detail::storage<4, int, false>::type);
47 	Error += align4_unaligned == sizeof(int) ? 0 : 1;
48 
49 	return Error;
50 }
51 
test_vec3_aligned()52 static int test_vec3_aligned()
53 {
54 	int Error = 0;
55 
56 	struct Struct1
57 	{
58 		glm::vec4 A;
59 		float B;
60 		glm::vec3 C;
61 	};
62 
63 	std::size_t const Size1 = sizeof(Struct1);
64 	Error += Size1 == 48 ? 0 : 1;
65 
66 	struct Struct2
67 	{
68 		glm::vec4 A;
69 		glm::vec3 B;
70 		float C;
71 	};
72 
73 	std::size_t const Size2 = sizeof(Struct2);
74 	Error += Size2 == 48 ? 0 : 1;
75 
76 	return Error;
77 }
78 
79 #endif
80 
main()81 int main()
82 {
83 	int Error = 0;
84 
85 #	if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
86 		Error += test_storage_aligned();
87 		Error += test_storage_unaligned();
88 		Error += test_vec3_aligned();
89 #	endif
90 
91 	return Error;
92 }
93