Home | History | Annotate | Download | only in ptr.align
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // #include <memory>
     11 
     12 // void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
     13 
     14 #include <memory>
     15 #include <cassert>
     16 
     17 int main()
     18 {
     19     const unsigned N = 20;
     20     char buf[N];
     21     void* r;
     22     void* p = &buf[0];
     23     std::size_t s = N;
     24     r = std::align(4, 10, p, s);
     25     assert(p == &buf[0]);
     26     assert(r == p);
     27     assert(s == N);
     28 
     29     p = &buf[1];
     30     s = N;
     31     r = std::align(4, 10, p, s);
     32     assert(p == &buf[4]);
     33     assert(r == p);
     34     assert(s == N-3);
     35 
     36     p = &buf[2];
     37     s = N;
     38     r = std::align(4, 10, p, s);
     39     assert(p == &buf[4]);
     40     assert(r == p);
     41     assert(s == N-2);
     42 
     43     p = &buf[3];
     44     s = N;
     45     r = std::align(4, 10, p, s);
     46     assert(p == &buf[4]);
     47     assert(r == p);
     48     assert(s == N-1);
     49 
     50     p = &buf[4];
     51     s = N;
     52     r = std::align(4, 10, p, s);
     53     assert(p == &buf[4]);
     54     assert(r == p);
     55     assert(s == N);
     56 
     57     p = &buf[0];
     58     s = N;
     59     r = std::align(4, N, p, s);
     60     assert(p == &buf[0]);
     61     assert(r == p);
     62     assert(s == N);
     63 
     64     p = &buf[1];
     65     s = N-1;
     66     r = std::align(4, N-4, p, s);
     67     assert(p == &buf[4]);
     68     assert(r == p);
     69     assert(s == N-4);
     70 
     71     p = &buf[1];
     72     s = N-1;
     73     r = std::align(4, N-3, p, s);
     74     assert(p == &buf[1]);
     75     assert(r == nullptr);
     76     assert(s == N-1);
     77 
     78     p = &buf[0];
     79     s = N;
     80     r = std::align(1, N+1, p, s);
     81     assert(p == &buf[0]);
     82     assert(r == nullptr);
     83     assert(s == N);
     84 }
     85