DArray_tests.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include <cmocka.h>
  2. #include "DArray.h"
  3. #include "scufcont.h"
  4. SCDARRAY_HEADER(int, int)
  5. SCDARRAY_IMPL(int, int)
  6. void test_DArray_alloc(void** state) {
  7. (void) state;
  8. SCDArray_int arr;
  9. assert_true(SCDArray_int_alloc(&arr) == SCUFCONT_SUCCESS);
  10. assert_non_null(arr.data);
  11. assert_uint_equal(arr.len, 0u);
  12. assert_uint_equal(arr.capacity, 1u);
  13. SCDArray_int_free(&arr);
  14. }
  15. void test_DArray_push_back(void** state) {
  16. (void) state;
  17. SCDArray_int arr;
  18. SCDArray_int_alloc(&arr);
  19. assert_true(SCDArray_int_push_back(&arr, &(int){7}) == SCUFCONT_SUCCESS);
  20. assert_true(arr.data[0] == 7);
  21. assert_true(SCDArray_int_push_back(&arr, &(int){10}) == SCUFCONT_SUCCESS);
  22. assert_true(arr.data[0] == 7);
  23. assert_true(arr.data[1] == 10);
  24. SCDArray_int_free(&arr);
  25. }
  26. void test_DArray_at(void** state) {
  27. (void) state;
  28. SCDArray_int arr;
  29. SCDArray_int_alloc(&arr);
  30. assert_true(SCDArray_int_push_back(&arr, &(int){7}) == SCUFCONT_SUCCESS);
  31. assert_int_equal(*SCDArray_int_at(&arr, 0), 7);
  32. assert_true(SCDArray_int_push_back(&arr, &(int){10}) == SCUFCONT_SUCCESS);
  33. assert_int_equal(*SCDArray_int_at(&arr, 0), 7);
  34. assert_int_equal(*SCDArray_int_at(&arr, 1), 10);
  35. SCDArray_int_free(&arr);
  36. }
  37. void test_DArray_push_back_multiple(void** state) {
  38. (void) state;
  39. SCDArray_int arr;
  40. SCDArray_int_alloc(&arr);
  41. int nums[] = { 1, 2, 3, 4, 5 };
  42. const size_t nums_len = sizeof(nums) / sizeof(nums[0]);
  43. assert_true(SCDArray_int_push_back_multiple(&arr, nums, sizeof(nums) / sizeof(nums[0])) == SCUFCONT_SUCCESS);
  44. for (size_t i = 0; i < arr.len; i++) {
  45. assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
  46. }
  47. int nums2[] = { 6, 7, 8 };
  48. const size_t nums2_len = sizeof(nums2) / sizeof(nums2[0]);
  49. assert_true(SCDArray_int_push_back_multiple(&arr, nums2, sizeof(nums2) / sizeof(nums2[0])) == SCUFCONT_SUCCESS);
  50. for (size_t i = 0; i < nums_len; i++) {
  51. assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
  52. }
  53. for (size_t i = 0; i < nums2_len; i++) {
  54. assert_int_equal(*SCDArray_int_at(&arr, i + nums_len), nums2[i]);
  55. }
  56. SCDArray_int_free(&arr);
  57. }
  58. void test_DArray_remove(void** state) {
  59. (void) state;
  60. SCDArray_int arr;
  61. SCDArray_int_alloc(&arr);
  62. int nums[] = { 1, 2, 3, 4, 5 };
  63. SCDArray_int_push_back_multiple(&arr, nums, sizeof(nums) / sizeof(nums[0]));
  64. for (size_t i = 0; i < arr.len; i++) {
  65. assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
  66. }
  67. // Remove last
  68. {
  69. const size_t old_len = arr.len;
  70. SCDArray_int_remove(&arr, arr.len - 1);
  71. assert_uint_equal(arr.len, old_len - 1);
  72. int new_nums[] = { 1, 2, 3, 4 };
  73. assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
  74. for (size_t i = 0; i < arr.len; i++) {
  75. assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
  76. }
  77. }
  78. // Remove from middle
  79. {
  80. const size_t old_len = arr.len;
  81. SCDArray_int_remove(&arr, 1);
  82. assert_uint_equal(arr.len, old_len - 1);
  83. int new_nums[] = { 1, 3, 4 };
  84. assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
  85. for (size_t i = 0; i < arr.len; i++) {
  86. assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
  87. }
  88. }
  89. // Remove first
  90. {
  91. const size_t old_len = arr.len;
  92. SCDArray_int_remove(&arr, 0);
  93. assert_uint_equal(arr.len, old_len - 1);
  94. int new_nums[] = { 3, 4 };
  95. assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
  96. for (size_t i = 0; i < arr.len; i++) {
  97. assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
  98. }
  99. }
  100. SCDArray_int_free(&arr);
  101. }
  102. int DArray_tests_run(void) {
  103. const struct CMUnitTest tests[] = {
  104. cmocka_unit_test(test_DArray_alloc),
  105. cmocka_unit_test(test_DArray_push_back),
  106. cmocka_unit_test(test_DArray_at),
  107. cmocka_unit_test(test_DArray_push_back_multiple),
  108. cmocka_unit_test(test_DArray_remove),
  109. };
  110. return cmocka_run_group_tests_name("DArray", tests, NULL, NULL);
  111. }