| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/memory/aligned_memory.h" | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "build/build_config.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | #define EXPECT_ALIGNED(ptr, align) \ | 
 |     EXPECT_EQ(0u, reinterpret_cast<uintptr_t>(ptr) & (align - 1)) | 
 |  | 
 | namespace base { | 
 |  | 
 | TEST(AlignedMemoryTest, DynamicAllocation) { | 
 |   void* p = AlignedAlloc(8, 8); | 
 |   EXPECT_TRUE(p); | 
 |   EXPECT_ALIGNED(p, 8); | 
 |   AlignedFree(p); | 
 |  | 
 |   p = AlignedAlloc(8, 16); | 
 |   EXPECT_TRUE(p); | 
 |   EXPECT_ALIGNED(p, 16); | 
 |   AlignedFree(p); | 
 |  | 
 |   p = AlignedAlloc(8, 256); | 
 |   EXPECT_TRUE(p); | 
 |   EXPECT_ALIGNED(p, 256); | 
 |   AlignedFree(p); | 
 |  | 
 |   p = AlignedAlloc(8, 4096); | 
 |   EXPECT_TRUE(p); | 
 |   EXPECT_ALIGNED(p, 4096); | 
 |   AlignedFree(p); | 
 | } | 
 |  | 
 | TEST(AlignedMemoryTest, ScopedDynamicAllocation) { | 
 |   std::unique_ptr<float, AlignedFreeDeleter> p( | 
 |       static_cast<float*>(AlignedAlloc(8, 8))); | 
 |   EXPECT_TRUE(p.get()); | 
 |   EXPECT_ALIGNED(p.get(), 8); | 
 | } | 
 |  | 
 | }  // namespace base |