mem_test.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /*
  2. *******************************************************************************
  3. \file mem_test.c
  4. \brief Tests for memory functions
  5. \project bee2/test
  6. \created 2014.02.01
  7. \version 2022.07.05
  8. \license This program is released under the GNU General Public License
  9. version 3. See Copyright Notices in bee2/info.h.
  10. *******************************************************************************
  11. */
  12. #include <bee2/core/mem.h>
  13. #include <bee2/core/hex.h>
  14. #include <bee2/core/str.h>
  15. #include <bee2/core/util.h>
  16. /*
  17. *******************************************************************************
  18. Тестирование
  19. *******************************************************************************
  20. */
  21. bool_t memTest()
  22. {
  23. octet buf[16];
  24. octet buf1[16];
  25. octet buf2[16];
  26. void* p;
  27. void* p1;
  28. size_t i;
  29. // pre
  30. CASSERT(sizeof(buf) == sizeof(buf1));
  31. if (!memIsValid(buf, sizeof(buf)) || !memIsValid(0, 0))
  32. return FALSE;
  33. // alloc (считаем, что памяти хватает)
  34. p = memAlloc(100);
  35. if (!p)
  36. return FALSE;
  37. memSet(p, 7, 100);
  38. if (!(p1 = memRealloc(p, 102)) ||
  39. !memIsRep(p = p1, 100, 7) ||
  40. !(p1 = memRealloc(p, 90)) ||
  41. !memIsRep(p = p1, 90, 7) ||
  42. (p = memRealloc(p, 0)))
  43. {
  44. memFree(p);
  45. return FALSE;
  46. }
  47. memFree(p);
  48. // заполнение / копирование
  49. memSet(buf, 12, sizeof(buf));
  50. memCopy(buf1, buf, sizeof(buf));
  51. for (i = 0; i < sizeof(buf); ++i)
  52. {
  53. if (buf1[i] != buf[i])
  54. return FALSE;
  55. buf[i] = buf1[i] = i % 256u;
  56. }
  57. memMove(buf, buf + 1, sizeof(buf) - 1);
  58. memMove(buf1 + 1, buf1, sizeof(buf1) - 1);
  59. for (i = 0; i < sizeof(buf) - 2; ++i)
  60. {
  61. if (buf1[i + 2] != buf[i])
  62. return FALSE;
  63. }
  64. memCopy(buf1, 0, 0);
  65. memMove(buf1, 0, 0);
  66. // сравнение
  67. hexTo(buf, "000102030405060708090A0B0C0D0E0F");
  68. hexTo(buf1, "F00102030405060708090A0B0C0D0EFF");
  69. if (SAFE(memIsZero)(buf, 15) ||
  70. FAST(memIsZero)(buf, 15) ||
  71. FAST(memIsZero)(buf, 3) ||
  72. SAFE(memEq)(buf + 1, buf1 + 1, 15) ||
  73. FAST(memEq)(buf + 1, buf1 + 1, 15) ||
  74. SAFE(memEq)(buf + 8, buf1 + 8, 8) ||
  75. FAST(memEq)(buf + 8, buf1 + 8, 8) ||
  76. !SAFE(memEq)(buf + 1, buf1 + 1, 8) ||
  77. !FAST(memEq)(buf + 1, buf1 + 1, 8) ||
  78. !SAFE(memEq)(buf + 1, buf1 + 1, 14) ||
  79. !FAST(memEq)(buf + 1, buf1 + 1, 14) ||
  80. SAFE(memCmp)(buf, buf1, 7) != -1 ||
  81. FAST(memCmp)(buf, buf1, 7) != -1 ||
  82. SAFE(memCmpRev)(buf, buf1, 7) != -1 ||
  83. FAST(memCmpRev)(buf, buf1, 7) != -1 ||
  84. SAFE(memCmp)(buf, buf1, 15) != -1 ||
  85. FAST(memCmp)(buf, buf1, 15) != -1 ||
  86. SAFE(memCmpRev)(buf, buf1, 15) != -1 ||
  87. FAST(memCmpRev)(buf, buf1, 15) != -1 ||
  88. SAFE(memCmp)(buf1, buf, 15) != 1 ||
  89. FAST(memCmp)(buf1, buf, 15) != 1 ||
  90. SAFE(memCmpRev)(buf1, buf, 15) != 1 ||
  91. FAST(memCmpRev)(buf1, buf, 15) != 1 ||
  92. SAFE(memCmp)(buf, buf1, 8) != -1 ||
  93. FAST(memCmp)(buf, buf1, 8) != -1 ||
  94. SAFE(memCmpRev)(buf, buf1, 8) != -1 ||
  95. FAST(memCmpRev)(buf, buf1, 8) != -1 ||
  96. SAFE(memCmp)(buf1, buf, 8) != 1 ||
  97. FAST(memCmp)(buf1, buf, 8) != 1 ||
  98. SAFE(memCmpRev)(buf1, buf, 8) != 1 ||
  99. FAST(memCmpRev)(buf1, buf, 8) != 1 ||
  100. SAFE(memCmp)(buf + 1, buf1 + 1, 8) != 0 ||
  101. FAST(memCmp)(buf + 1, buf1 + 1, 8) != 0 ||
  102. SAFE(memCmp)(buf + 1, buf1 + 1, 14) != 0 ||
  103. FAST(memCmp)(buf + 1, buf1 + 1, 14) != 0 ||
  104. SAFE(memCmpRev)(buf + 1, buf1 + 1, 8) != 0 ||
  105. FAST(memCmpRev)(buf + 1, buf1 + 1, 8) != 0 ||
  106. SAFE(memCmpRev)(buf + 1, buf1 + 1, 14) != 0 ||
  107. FAST(memCmpRev)(buf + 1, buf1 + 1, 14) != 0)
  108. return FALSE;
  109. memRev(buf, 15);
  110. if (memNonZeroSize(buf, 15) != 14)
  111. return FALSE;
  112. hexTo(buf, "F001020304050607");
  113. hexTo(buf1, "00010203040506F7");
  114. if (SAFE(memCmp)(buf, buf1, 8) != 1 ||
  115. FAST(memCmp)(buf, buf1, 8) != 1 ||
  116. SAFE(memCmp)(buf1, buf, 8) != -1 ||
  117. FAST(memCmp)(buf1, buf, 8) != -1 ||
  118. SAFE(memCmpRev)(buf, buf1, 8) != -1 ||
  119. FAST(memCmpRev)(buf, buf1, 8) != -1 ||
  120. SAFE(memCmpRev)(buf1, buf, 8) != 1 ||
  121. FAST(memCmpRev)(buf1, buf, 8) != 1)
  122. return FALSE;
  123. hexTo(buf, "01010101010101010102");
  124. if (SAFE(memIsRep)(buf, 7, 0x01) != TRUE ||
  125. FAST(memIsRep)(buf, 7, 0x01) != TRUE ||
  126. SAFE(memIsRep)(buf, 8, 0x01) != TRUE ||
  127. FAST(memIsRep)(buf, 8, 0x01) != TRUE ||
  128. SAFE(memIsRep)(buf, 9, 0x01) != TRUE ||
  129. FAST(memIsRep)(buf, 9, 0x01) != TRUE ||
  130. SAFE(memIsRep)(buf, 10, 0x01) == TRUE ||
  131. FAST(memIsRep)(buf, 10, 0x01) == TRUE)
  132. return FALSE;
  133. // join
  134. hexTo(buf, "0001020304050607");
  135. memJoin(buf, buf + 1, 3, buf + 3, 4);
  136. if (!hexEq(buf, "01020303040506"))
  137. return FALSE;
  138. hexTo(buf, "0001020304050607");
  139. memJoin(buf, buf + 1, 3, buf + 1, 4);
  140. if (!hexEq(buf, "01020301020304"))
  141. return FALSE;
  142. hexTo(buf, "0001020304050607");
  143. memJoin(buf, buf + 3, 4, buf + 2, 2);
  144. if (!hexEq(buf, "030405060203"))
  145. return FALSE;
  146. hexTo(buf, "0001020304050607");
  147. memJoin(buf + 2, buf, 4, buf + 4, 2);
  148. if (!hexEq(buf + 2, "000102030405"))
  149. return FALSE;
  150. // xor
  151. hexTo(buf, "000102030405060708");
  152. hexTo(buf1, "F0F1F2F3F4F5F6F7F8");
  153. memXor(buf2, buf, buf1, 9);
  154. if (!memIsRep(buf2, 9, 0xF0))
  155. return FALSE;
  156. memXor2(buf2, buf1, 9);
  157. memXor2(buf2, buf, 8);
  158. if (!memIsRep(buf2, 8, 0) || buf2[8] != 0x08)
  159. return FALSE;
  160. // все нормально
  161. return TRUE;
  162. }