Browse Source

Added aligned storage tests #548

Christophe Riccio 9 years ago
parent
commit
24532ecbf1
2 changed files with 105 additions and 0 deletions
  1. 1 0
      test/core/CMakeLists.txt
  2. 104 0
      test/core/core_type_aligned.cpp

+ 1 - 0
test/core/CMakeLists.txt

@@ -1,3 +1,4 @@
+glmCreateTestGTC(core_type_aligned)
 glmCreateTestGTC(core_type_cast)
 glmCreateTestGTC(core_type_ctor)
 glmCreateTestGTC(core_type_float)

+ 104 - 0
test/core/core_type_aligned.cpp

@@ -0,0 +1,104 @@
+#include <glm/glm.hpp>
+/*
+#define GLM_ALIGNED(x) __declspec(align(x))
+#define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x))
+
+#define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \
+template <typename T> \
+struct storage<T, x, true> { \
+    GLM_ALIGNED_STRUCT(x) type { \
+        uint8_t data[x]; \
+    }; \
+};
+
+template <typename T, std::size_t size, bool aligned>
+struct storage {
+    typedef struct type {
+        uint8_t data[size];
+    } type;
+};
+
+GLM_ALIGNED_STORAGE_TYPE_STRUCT(1)
+GLM_ALIGNED_STORAGE_TYPE_STRUCT(2)
+GLM_ALIGNED_STORAGE_TYPE_STRUCT(4)
+GLM_ALIGNED_STORAGE_TYPE_STRUCT(8)
+GLM_ALIGNED_STORAGE_TYPE_STRUCT(16)
+GLM_ALIGNED_STORAGE_TYPE_STRUCT(32)
+GLM_ALIGNED_STORAGE_TYPE_STRUCT(64)
+*/
+int main() {
+    size_t size1_aligned = sizeof(glm::detail::storage<int, 1, true>::type);
+    size_t size2_aligned = sizeof(glm::detail::storage<int, 2, true>::type);
+    size_t size4_aligned = sizeof(glm::detail::storage<int, 4, true>::type);
+    size_t size8_aligned = sizeof(glm::detail::storage<int, 8, true>::type);
+    size_t size16_aligned = sizeof(glm::detail::storage<int, 16, true>::type);
+    size_t size32_aligned = sizeof(glm::detail::storage<int, 32, true>::type);
+    size_t size64_aligned = sizeof(glm::detail::storage<int, 64, true>::type);
+    size_t size128_aligned = sizeof(glm::detail::storage<int, 128, true>::type);
+
+    size_t size1_unaligned = sizeof(glm::detail::storage<int, 1, false>::type);
+    size_t size2_unaligned = sizeof(glm::detail::storage<int, 2, false>::type);
+    size_t size4_unaligned = sizeof(glm::detail::storage<int, 4, false>::type);
+    size_t size8_unaligned = sizeof(glm::detail::storage<int, 8, false>::type);
+    size_t size16_unaligned = sizeof(glm::detail::storage<int, 16, false>::type);
+    size_t size32_unaligned = sizeof(glm::detail::storage<int, 32, false>::type);
+    size_t size64_unaligned = sizeof(glm::detail::storage<int, 64, false>::type);
+    size_t size128_unaligned = sizeof(glm::detail::storage<int, 128, false>::type);
+
+    size_t align1_aligned = alignof(glm::detail::storage<int, 1, true>::type);
+    size_t align2_aligned = alignof(glm::detail::storage<int, 2, true>::type);
+    size_t align4_aligned = alignof(glm::detail::storage<int, 4, true>::type);
+    size_t align8_aligned = alignof(glm::detail::storage<int, 8, true>::type);
+    size_t align16_aligned = alignof(glm::detail::storage<int, 16, true>::type);
+    size_t align32_aligned = alignof(glm::detail::storage<int, 32, true>::type);
+    size_t align64_aligned = alignof(glm::detail::storage<int, 64, true>::type);
+    size_t align128_aligned = alignof(glm::detail::storage<int, 128, true>::type);
+
+    size_t align1_unaligned = alignof(glm::detail::storage<int, 1, false>::type);
+    size_t align2_unaligned = alignof(glm::detail::storage<int, 2, false>::type);
+    size_t align4_unaligned = alignof(glm::detail::storage<int, 4, false>::type);
+    size_t align8_unaligned = alignof(glm::detail::storage<int, 8, false>::type);
+    size_t align16_unaligned = alignof(glm::detail::storage<int, 16, false>::type);
+    size_t align32_unaligned = alignof(glm::detail::storage<int, 32, false>::type);
+    size_t align64_unaligned = alignof(glm::detail::storage<int, 64, false>::type);
+    size_t align128_unaligned = alignof(glm::detail::storage<int, 128, false>::type);
+
+    // RESULTS
+    // size1_aligned        1
+    // size2_aligned        2
+    // size4_aligned        4
+    // size8_aligned        8
+    // size16_aligned      16
+    // size32_aligned      32
+    // size64_aligned      64
+    // size128_aligned    128
+    // 
+    // size1_unaligned      1
+    // size2_unaligned      2
+    // size4_unaligned      4
+    // size8_unaligned      8
+    // size16_unaligned    16
+    // size32_unaligned    32
+    // size64_unaligned    64
+    // size128_unaligned  128
+    // 
+    // align1_aligned       1
+    // align2_aligned       2
+    // align4_aligned       4
+    // align8_aligned       8
+    // align16_aligned     16
+    // align32_aligned     32
+    // align64_aligned     64
+    // align128_aligned     1
+    // 
+    // align1_unaligned     1
+    // align2_unaligned     1
+    // align4_unaligned     1
+    // align8_unaligned     1
+    // align16_unaligned    1
+    // align32_unaligned    1
+    // align64_unaligned    1
+    // align128_unaligned   1
+    
+    return 0;
+}