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 int main(int, char**) 17 { 18 const unsigned N = 20; 19 char buf[N]; 20 void* r; 21 void* p = &buf[0]; 22 std::size_t s = N; 23 r = std::align(4, 10, p, s); 24 assert(p == &buf[0]); 25 assert(r == p); 26 assert(s == N); 27 28 p = &buf[1]; 29 s = N; 30 r = std::align(4, 10, p, s); 31 assert(p == &buf[4]); 32 assert(r == p); 33 assert(s == N-3); 34 35 p = &buf[2]; 36 s = N; 37 r = std::align(4, 10, p, s); 38 assert(p == &buf[4]); 39 assert(r == p); 40 assert(s == N-2); 41 42 p = &buf[3]; 43 s = N; 44 r = std::align(4, 10, p, s); 45 assert(p == &buf[4]); 46 assert(r == p); 47 assert(s == N-1); 48 49 p = &buf[4]; 50 s = N; 51 r = std::align(4, 10, p, s); 52 assert(p == &buf[4]); 53 assert(r == p); 54 assert(s == N); 55 56 p = &buf[0]; 57 s = N; 58 r = std::align(4, N, p, s); 59 assert(p == &buf[0]); 60 assert(r == p); 61 assert(s == N); 62 63 p = &buf[1]; 64 s = N-1; 65 r = std::align(4, N-4, p, s); 66 assert(p == &buf[4]); 67 assert(r == p); 68 assert(s == N-4); 69 70 p = &buf[1]; 71 s = N-1; 72 r = std::align(4, N-3, p, s); 73 assert(p == &buf[1]); 74 assert(r == nullptr); 75 assert(s == N-1); 76 77 p = &buf[0]; 78 s = N; 79 r = std::align(1, N+1, p, s); 80 assert(p == &buf[0]); 81 assert(r == nullptr); 82 assert(s == N); 83 84 return 0; 85 } 86