cb_mempool_test.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * SPDX-License-Identifier: Apache-2.0
  3. *
  4. * Change Logs:
  5. * Date Author Notes
  6. * 2023-10-01 tyx first implementation
  7. */
  8. #include <gtest/gtest.h>
  9. #include "cb_mempool.h"
  10. TEST(testCase, cb_mempool_test01)
  11. {
  12. cb_memp_t mempool;
  13. cb_memp_t *mptr;
  14. unsigned long long mem[8];
  15. char *ptr = (char *)mem;
  16. mptr = cb_mempool_init(&mempool, ptr, sizeof(void *), sizeof(mem));
  17. EXPECT_EQ((char *)mptr->next_free, &ptr[0]);
  18. mptr = cb_mempool_init(&mempool, ptr + 1, sizeof(void *), sizeof(mem) - 1);
  19. EXPECT_EQ((char *)mptr->next_free, &ptr[sizeof(void *)]);
  20. mptr = cb_mempool_init(&mempool, ptr, sizeof(void *), sizeof(void *));
  21. EXPECT_EQ((char *)mptr->next_free, &ptr[0]);
  22. mptr = cb_mempool_init(&mempool, ptr, sizeof(void *), sizeof(void *) - 1);
  23. EXPECT_EQ((char *)mptr->next_free, (char *)cb_null);
  24. }
  25. TEST(testCase, cb_mempool_test02)
  26. {
  27. cb_memp_t mempool;
  28. cb_memp_t *mptr;
  29. unsigned long long mem[8];
  30. char *ptr = (char *)mem;
  31. void *ptr_tab[sizeof(mem) / sizeof(void *)];
  32. void *tmp_ptr;
  33. mptr = cb_mempool_init(&mempool, ptr, sizeof(void *), sizeof(mem));
  34. for (unsigned cnt = 3; cnt != 0; cnt --)
  35. {
  36. for (unsigned i = 0; i < sizeof(ptr_tab) / sizeof(ptr_tab[0]); i++)
  37. {
  38. ptr_tab[i] = cb_mempool_alloc(mptr);
  39. EXPECT_NE(ptr_tab[i], (void *)cb_null);
  40. }
  41. tmp_ptr = cb_mempool_alloc(mptr);
  42. EXPECT_EQ(tmp_ptr, (void *)cb_null);
  43. for (unsigned i = 0; i < sizeof(ptr_tab) / sizeof(ptr_tab[0]); i++)
  44. {
  45. cb_mempool_free(mptr, ptr_tab[i]);
  46. }
  47. }
  48. }
  49. static int memcharcmp(const void* ptr, int val, size_t size)
  50. {
  51. int c = 0;
  52. while (c == 0 && size-- > 0)
  53. {
  54. c = *((char *)ptr) - val;
  55. }
  56. return c;
  57. }
  58. TEST(testCase, cb_mempool_test03)
  59. {
  60. cb_memp_t mempool;
  61. cb_memp_t *mptr;
  62. unsigned long long mem[8];
  63. char *ptr = (char *)mem;
  64. void *ptr_tab[sizeof(mem) / sizeof(void *)];
  65. for (unsigned blk_size = 0; blk_size < sizeof(void *) * 2; blk_size ++)
  66. {
  67. mptr = cb_mempool_init(&mempool, ptr, blk_size, sizeof(mem));
  68. for (unsigned i = 0; i < sizeof(ptr_tab) / sizeof(ptr_tab[0]); i++)
  69. {
  70. ptr_tab[i] = cb_mempool_alloc(mptr);
  71. if (ptr_tab[i])
  72. {
  73. memset(ptr_tab[i], i, blk_size);
  74. }
  75. }
  76. for (unsigned i = 0; i < sizeof(ptr_tab) / sizeof(ptr_tab[0]); i++)
  77. {
  78. if (ptr_tab[i])
  79. {
  80. int cmp = memcharcmp(ptr_tab[i], i, blk_size);
  81. EXPECT_EQ(cmp, 0);
  82. }
  83. }
  84. for (unsigned i = 0; i < sizeof(ptr_tab) / sizeof(ptr_tab[0]); i++)
  85. {
  86. cb_mempool_free(mptr, ptr_tab[i]);
  87. }
  88. }
  89. }