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