align.pass.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. // #include <memory>
  9. // void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
  10. #include <memory>
  11. #include <cassert>
  12. #include "test_macros.h"
  13. int main(int, char**)
  14. {
  15. const unsigned N = 20;
  16. char buf[N];
  17. void* r;
  18. void* p = &buf[0];
  19. std::size_t s = N;
  20. r = std::align(4, 10, p, s);
  21. assert(p == &buf[0]);
  22. assert(r == p);
  23. assert(s == N);
  24. p = &buf[1];
  25. s = N;
  26. r = std::align(4, 10, p, s);
  27. assert(p == &buf[4]);
  28. assert(r == p);
  29. assert(s == N-3);
  30. p = &buf[2];
  31. s = N;
  32. r = std::align(4, 10, p, s);
  33. assert(p == &buf[4]);
  34. assert(r == p);
  35. assert(s == N-2);
  36. p = &buf[3];
  37. s = N;
  38. r = std::align(4, 10, p, s);
  39. assert(p == &buf[4]);
  40. assert(r == p);
  41. assert(s == N-1);
  42. p = &buf[4];
  43. s = N;
  44. r = std::align(4, 10, p, s);
  45. assert(p == &buf[4]);
  46. assert(r == p);
  47. assert(s == N);
  48. p = &buf[0];
  49. s = N;
  50. r = std::align(4, N, p, s);
  51. assert(p == &buf[0]);
  52. assert(r == p);
  53. assert(s == N);
  54. p = &buf[1];
  55. s = N-1;
  56. r = std::align(4, N-4, p, s);
  57. assert(p == &buf[4]);
  58. assert(r == p);
  59. assert(s == N-4);
  60. p = &buf[1];
  61. s = N-1;
  62. r = std::align(4, N-3, p, s);
  63. assert(p == &buf[1]);
  64. assert(r == nullptr);
  65. assert(s == N-1);
  66. p = &buf[0];
  67. s = N;
  68. r = std::align(1, N+1, p, s);
  69. assert(p == &buf[0]);
  70. assert(r == nullptr);
  71. assert(s == N);
  72. return 0;
  73. }