1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // #include <memory> 10 11 // void* align(size_t alignment, size_t size, void*& ptr, size_t& space); 12 13 #include <memory> 14 #include <cassert> 15 16 #include "test_macros.h" 17 18 int main(int, char**) 19 { 20 const unsigned N = 20; 21 char buf[N]; 22 void* r; 23 void* p = &buf[0]; 24 std::size_t s = N; 25 r = std::align(4, 10, p, s); 26 assert(p == &buf[0]); 27 assert(r == p); 28 assert(s == N); 29 30 p = &buf[1]; 31 s = N; 32 r = std::align(4, 10, p, s); 33 assert(p == &buf[4]); 34 assert(r == p); 35 assert(s == N-3); 36 37 p = &buf[2]; 38 s = N; 39 r = std::align(4, 10, p, s); 40 assert(p == &buf[4]); 41 assert(r == p); 42 assert(s == N-2); 43 44 p = &buf[3]; 45 s = N; 46 r = std::align(4, 10, p, s); 47 assert(p == &buf[4]); 48 assert(r == p); 49 assert(s == N-1); 50 51 p = &buf[4]; 52 s = N; 53 r = std::align(4, 10, p, s); 54 assert(p == &buf[4]); 55 assert(r == p); 56 assert(s == N); 57 58 p = &buf[0]; 59 s = N; 60 r = std::align(4, N, p, s); 61 assert(p == &buf[0]); 62 assert(r == p); 63 assert(s == N); 64 65 p = &buf[1]; 66 s = N-1; 67 r = std::align(4, N-4, p, s); 68 assert(p == &buf[4]); 69 assert(r == p); 70 assert(s == N-4); 71 72 p = &buf[1]; 73 s = N-1; 74 r = std::align(4, N-3, p, s); 75 assert(p == &buf[1]); 76 assert(r == nullptr); 77 assert(s == N-1); 78 79 p = &buf[0]; 80 s = N; 81 r = std::align(1, N+1, p, s); 82 assert(p == &buf[0]); 83 assert(r == nullptr); 84 assert(s == N); 85 86 return 0; 87 } 88