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
main(int,char **)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