DArray_tests.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #include <cmocka.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include "scufcont/DArray.h"
  5. #include "scufcont/scufcont.h"
  6. SCDARRAY_HEADER(int, int);
  7. SCDARRAY_IMPL(int, int)
  8. void test_DArray_alloc(void **state) {
  9. (void) state;
  10. SCDArray_int arr;
  11. assert_true(SCDArray_int_alloc(&arr, NULL) == SCUFCONT_SUCCESS);
  12. assert_non_null(arr.data);
  13. assert_uint_equal(arr.len, 0u);
  14. assert_uint_equal(arr.capacity, 1u);
  15. SCDArray_int_free(&arr);
  16. }
  17. void test_DArray_alloc_copy(void **state) {
  18. (void) state;
  19. srand(time(NULL));
  20. SCDArray_int arr;
  21. assert_true(SCDArray_int_alloc(&arr, NULL) == SCUFCONT_SUCCESS);
  22. const size_t elems_n = rand() % 100;
  23. for (size_t i = 0; i < elems_n; i++) {
  24. const int elem = rand();
  25. assert_true(SCDArray_int_push_back(&arr, &elem) == SCUFCONT_SUCCESS);
  26. }
  27. SCDArray_int copied;
  28. assert_true(SCDArray_int_alloc_copy(&copied, &arr) == SCUFCONT_SUCCESS);
  29. assert_non_null(copied.data);
  30. assert_uint_equal(copied.capacity, arr.capacity);
  31. assert_uint_equal(copied.len, arr.len);
  32. assert_memory_equal(copied.data, arr.data, copied.len);
  33. SCDArray_int_free(&arr);
  34. SCDArray_int_free(&copied);
  35. }
  36. void test_DArray_push_back(void **state) {
  37. (void) state;
  38. SCDArray_int arr;
  39. SCDArray_int_alloc(&arr, NULL);
  40. assert_true(SCDArray_int_push_back(&arr, &(int) { 7 }) == SCUFCONT_SUCCESS);
  41. assert_true(arr.data[0] == 7);
  42. assert_true(SCDArray_int_push_back(&arr, &(int) { 10 }) == SCUFCONT_SUCCESS);
  43. assert_true(arr.data[0] == 7);
  44. assert_true(arr.data[1] == 10);
  45. SCDArray_int_free(&arr);
  46. }
  47. void test_DArray_at(void **state) {
  48. (void) state;
  49. SCDArray_int arr;
  50. SCDArray_int_alloc(&arr, NULL);
  51. assert_true(SCDArray_int_push_back(&arr, &(int) { 7 }) == SCUFCONT_SUCCESS);
  52. assert_int_equal(*SCDArray_int_at(&arr, 0), 7);
  53. assert_true(SCDArray_int_push_back(&arr, &(int) { 10 }) == SCUFCONT_SUCCESS);
  54. assert_int_equal(*SCDArray_int_at(&arr, 0), 7);
  55. assert_int_equal(*SCDArray_int_at(&arr, 1), 10);
  56. SCDArray_int_free(&arr);
  57. }
  58. void test_DArray_push_back_multiple(void **state) {
  59. (void) state;
  60. SCDArray_int arr;
  61. SCDArray_int_alloc(&arr, NULL);
  62. int nums[] = { 1, 2, 3, 4, 5 };
  63. const size_t nums_len = sizeof(nums) / sizeof(nums[0]);
  64. assert_true(SCDArray_int_push_back_multiple(&arr, nums, sizeof(nums) / sizeof(nums[0])) == SCUFCONT_SUCCESS);
  65. for (size_t i = 0; i < arr.len; i++) {
  66. assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
  67. }
  68. int nums2[] = { 6, 7, 8 };
  69. const size_t nums2_len = sizeof(nums2) / sizeof(nums2[0]);
  70. assert_true(SCDArray_int_push_back_multiple(&arr, nums2, sizeof(nums2) / sizeof(nums2[0])) == SCUFCONT_SUCCESS);
  71. for (size_t i = 0; i < nums_len; i++) {
  72. assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
  73. }
  74. for (size_t i = 0; i < nums2_len; i++) {
  75. assert_int_equal(*SCDArray_int_at(&arr, i + nums_len), nums2[i]);
  76. }
  77. SCDArray_int_free(&arr);
  78. }
  79. void test_DArray_remove(void **state) {
  80. (void) state;
  81. SCDArray_int arr;
  82. SCDArray_int_alloc(&arr, NULL);
  83. int nums[] = { 1, 2, 3, 4, 5 };
  84. SCDArray_int_push_back_multiple(&arr, nums, sizeof(nums) / sizeof(nums[0]));
  85. for (size_t i = 0; i < arr.len; i++) {
  86. assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
  87. }
  88. // Remove last
  89. {
  90. const size_t old_len = arr.len;
  91. SCDArray_int_remove(&arr, arr.len - 1);
  92. assert_uint_equal(arr.len, old_len - 1);
  93. int new_nums[] = { 1, 2, 3, 4 };
  94. assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
  95. for (size_t i = 0; i < arr.len; i++) {
  96. assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
  97. }
  98. }
  99. // Remove from middle
  100. {
  101. const size_t old_len = arr.len;
  102. SCDArray_int_remove(&arr, 1);
  103. assert_uint_equal(arr.len, old_len - 1);
  104. int new_nums[] = { 1, 3, 4 };
  105. assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
  106. for (size_t i = 0; i < arr.len; i++) {
  107. assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
  108. }
  109. }
  110. // Remove first
  111. {
  112. const size_t old_len = arr.len;
  113. SCDArray_int_remove(&arr, 0);
  114. assert_uint_equal(arr.len, old_len - 1);
  115. int new_nums[] = { 3, 4 };
  116. assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
  117. for (size_t i = 0; i < arr.len; i++) {
  118. assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
  119. }
  120. }
  121. SCDArray_int_free(&arr);
  122. }
  123. void test_DArray_clear(void **state) {
  124. (void) state;
  125. SCDArray_int arr;
  126. SCDArray_int_alloc(&arr, NULL);
  127. for (int i = 1; i <= 10; i++) {
  128. SCDArray_int_push_back(&arr, &i);
  129. }
  130. assert_uint_equal(arr.len, 10);
  131. for (int i = 0; i < 10; i++) {
  132. const int *const n = SCDArray_int_at(&arr, i);
  133. assert_int_equal(*n, i + 1);
  134. }
  135. SCDArray_int_clear(&arr);
  136. assert_uint_equal(arr.len, 0);
  137. }
  138. int DArray_tests_run(void) {
  139. const struct CMUnitTest tests[] = {
  140. cmocka_unit_test(test_DArray_alloc),
  141. cmocka_unit_test(test_DArray_alloc_copy),
  142. cmocka_unit_test(test_DArray_push_back),
  143. cmocka_unit_test(test_DArray_at),
  144. cmocka_unit_test(test_DArray_push_back_multiple),
  145. cmocka_unit_test(test_DArray_remove),
  146. cmocka_unit_test(test_DArray_clear)
  147. };
  148. return cmocka_run_group_tests_name("DArray", tests, NULL, NULL);
  149. }