Memory.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // Copyright (C) 2009-2015, Panagiotis Christopoulos Charitos.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include "tests/framework/Framework.h"
  6. #include "tests/util/Foo.h"
  7. #include "anki/util/Memory.h"
  8. #include <type_traits>
  9. ANKI_TEST(Util, HeapMemoryPool)
  10. {
  11. // Simple
  12. {
  13. HeapMemoryPool pool;
  14. ANKI_TEST_EXPECT_NO_ERR(pool.create(allocAligned, nullptr));
  15. void* ptr = pool.allocate(123, 1);
  16. ANKI_TEST_EXPECT_NEQ(ptr, nullptr);
  17. pool.free(ptr);
  18. }
  19. // Simple array
  20. {
  21. HeapMemoryPool pool;
  22. ANKI_TEST_EXPECT_NO_ERR(pool.create(allocAligned, nullptr));
  23. void* ptr = pool.allocate(2, 1);
  24. ANKI_TEST_EXPECT_NEQ(ptr, nullptr);
  25. pool.free(ptr);
  26. }
  27. }
  28. ANKI_TEST(Util, StackMemoryPool)
  29. {
  30. // Create/destroy test
  31. {
  32. StackMemoryPool pool;
  33. }
  34. // Create/destroy test #2
  35. {
  36. StackMemoryPool pool;
  37. ANKI_TEST_EXPECT_NO_ERR(pool.create(allocAligned, nullptr, 10, 4));
  38. }
  39. // Allocate
  40. {
  41. StackMemoryPool pool;
  42. ANKI_TEST_EXPECT_NO_ERR(pool.create(allocAligned, nullptr, 100, 4));
  43. void* a = pool.allocate(25, 1);
  44. ANKI_TEST_EXPECT_NEQ(a, nullptr);
  45. ANKI_TEST_EXPECT_EQ(pool.getAllocationsCount(), 1);
  46. ANKI_TEST_EXPECT_GEQ(pool.getAllocatedSize(), 25);
  47. pool.free(a);
  48. ANKI_TEST_EXPECT_EQ(pool.getAllocationsCount(), 0);
  49. // Allocate a few
  50. a = pool.allocate(25, 1);
  51. ANKI_TEST_EXPECT_NEQ(a, nullptr);
  52. a = pool.allocate(25, 1);
  53. ANKI_TEST_EXPECT_NEQ(a, nullptr);
  54. a = pool.allocate(25, 1);
  55. ANKI_TEST_EXPECT_NEQ(a, nullptr);
  56. a = pool.allocate(25, 1);
  57. ANKI_TEST_EXPECT_EQ(a, nullptr);
  58. ANKI_TEST_EXPECT_EQ(pool.getAllocationsCount(), 3);
  59. // Reset
  60. pool.reset();
  61. ANKI_TEST_EXPECT_EQ(pool.getAllocationsCount(), 0);
  62. // Allocate again
  63. a = pool.allocate(25, 1);
  64. ANKI_TEST_EXPECT_NEQ(a, nullptr);
  65. a = pool.allocate(25, 1);
  66. ANKI_TEST_EXPECT_NEQ(a, nullptr);
  67. a = pool.allocate(25, 1);
  68. ANKI_TEST_EXPECT_NEQ(a, nullptr);
  69. a = pool.allocate(25, 1);
  70. ANKI_TEST_EXPECT_EQ(a, nullptr);
  71. ANKI_TEST_EXPECT_EQ(pool.getAllocationsCount(), 3);
  72. }
  73. }
  74. ANKI_TEST(Util, ChainMemoryPool)
  75. {
  76. // Basic test
  77. {
  78. const U size = 8;
  79. ChainMemoryPool pool;
  80. Error error = pool.create(
  81. allocAligned, nullptr,
  82. size, size + 1,
  83. ChainMemoryPool::ChunkGrowMethod::MULTIPLY, 2, 1);
  84. ANKI_TEST_EXPECT_EQ(error, ErrorCode::NONE);
  85. void* mem = pool.allocate(5, 1);
  86. ANKI_TEST_EXPECT_NEQ(mem, nullptr);
  87. void* mem1 = pool.allocate(5, 1);
  88. ANKI_TEST_EXPECT_NEQ(mem1, nullptr);
  89. pool.free(mem1);
  90. pool.free(mem);
  91. ANKI_TEST_EXPECT_EQ(pool.getChunksCount(), 0);
  92. }
  93. // Basic test 2
  94. {
  95. const U size = sizeof(PtrSize) + 10;
  96. ChainMemoryPool pool;
  97. Error error = pool.create(
  98. allocAligned, nullptr,
  99. size, size * 2,
  100. ChainMemoryPool::ChunkGrowMethod::MULTIPLY, 2, 1);
  101. ANKI_TEST_EXPECT_EQ(error, ErrorCode::NONE);
  102. void* mem = pool.allocate(size, 1);
  103. ANKI_TEST_EXPECT_NEQ(mem, nullptr);
  104. void* mem1 = pool.allocate(size, 1);
  105. ANKI_TEST_EXPECT_NEQ(mem1, nullptr);
  106. void* mem3 = pool.allocate(size, 1);
  107. ANKI_TEST_EXPECT_NEQ(mem1, nullptr);
  108. pool.free(mem1);
  109. mem1 = pool.allocate(size, 1);
  110. ANKI_TEST_EXPECT_NEQ(mem1, nullptr);
  111. pool.free(mem3);
  112. pool.free(mem1);
  113. pool.free(mem);
  114. ANKI_TEST_EXPECT_EQ(pool.getChunksCount(), 0);
  115. }
  116. }