Added push_back_multiple, free, and remove to DArray. Added tests.
This commit is contained in:
+123
-1
@@ -1,11 +1,12 @@
|
||||
#include <cmocka.h>
|
||||
|
||||
#include "DArray.h"
|
||||
#include "scufcont.h"
|
||||
|
||||
SCDARRAY_HEADER(int, int)
|
||||
SCDARRAY_IMPL(int, int)
|
||||
|
||||
void DArray_alloc_test(void** state) {
|
||||
void test_DArray_alloc(void** state) {
|
||||
(void) state;
|
||||
|
||||
SCDArray_int arr;
|
||||
@@ -13,5 +14,126 @@ void DArray_alloc_test(void** state) {
|
||||
assert_non_null(arr.data);
|
||||
assert_uint_equal(arr.len, 0u);
|
||||
assert_uint_equal(arr.capacity, 1u);
|
||||
|
||||
SCDArray_int_free(&arr);
|
||||
}
|
||||
|
||||
void test_DArray_push_back(void** state) {
|
||||
(void) state;
|
||||
|
||||
SCDArray_int arr;
|
||||
SCDArray_int_alloc(&arr);
|
||||
|
||||
assert_true(SCDArray_int_push_back(&arr, &(int){7}) == SCUFCONT_SUCCESS);
|
||||
assert_true(arr.data[0] == 7);
|
||||
|
||||
assert_true(SCDArray_int_push_back(&arr, &(int){10}) == SCUFCONT_SUCCESS);
|
||||
assert_true(arr.data[0] == 7);
|
||||
assert_true(arr.data[1] == 10);
|
||||
|
||||
SCDArray_int_free(&arr);
|
||||
}
|
||||
|
||||
void test_DArray_at(void** state) {
|
||||
(void) state;
|
||||
|
||||
SCDArray_int arr;
|
||||
SCDArray_int_alloc(&arr);
|
||||
|
||||
assert_true(SCDArray_int_push_back(&arr, &(int){7}) == SCUFCONT_SUCCESS);
|
||||
assert_int_equal(*SCDArray_int_at(&arr, 0), 7);
|
||||
|
||||
assert_true(SCDArray_int_push_back(&arr, &(int){10}) == SCUFCONT_SUCCESS);
|
||||
assert_int_equal(*SCDArray_int_at(&arr, 0), 7);
|
||||
assert_int_equal(*SCDArray_int_at(&arr, 1), 10);
|
||||
|
||||
SCDArray_int_free(&arr);
|
||||
}
|
||||
|
||||
void test_DArray_push_back_multiple(void** state) {
|
||||
(void) state;
|
||||
|
||||
SCDArray_int arr;
|
||||
SCDArray_int_alloc(&arr);
|
||||
|
||||
int nums[] = { 1, 2, 3, 4, 5 };
|
||||
const size_t nums_len = sizeof(nums) / sizeof(nums[0]);
|
||||
assert_true(SCDArray_int_push_back_multiple(&arr, nums, sizeof(nums) / sizeof(nums[0])) == SCUFCONT_SUCCESS);
|
||||
for (size_t i = 0; i < arr.len; i++) {
|
||||
assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
|
||||
}
|
||||
int nums2[] = { 6, 7, 8 };
|
||||
const size_t nums2_len = sizeof(nums2) / sizeof(nums2[0]);
|
||||
assert_true(SCDArray_int_push_back_multiple(&arr, nums2, sizeof(nums2) / sizeof(nums2[0])) == SCUFCONT_SUCCESS);
|
||||
for (size_t i = 0; i < nums_len; i++) {
|
||||
assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
|
||||
}
|
||||
for (size_t i = 0; i < nums2_len; i++) {
|
||||
assert_int_equal(*SCDArray_int_at(&arr, i + nums_len), nums2[i]);
|
||||
}
|
||||
|
||||
SCDArray_int_free(&arr);
|
||||
}
|
||||
|
||||
void test_DArray_remove(void** state) {
|
||||
(void) state;
|
||||
|
||||
SCDArray_int arr;
|
||||
SCDArray_int_alloc(&arr);
|
||||
|
||||
int nums[] = { 1, 2, 3, 4, 5 };
|
||||
SCDArray_int_push_back_multiple(&arr, nums, sizeof(nums) / sizeof(nums[0]));
|
||||
for (size_t i = 0; i < arr.len; i++) {
|
||||
assert_int_equal(*SCDArray_int_at(&arr, i), nums[i]);
|
||||
}
|
||||
|
||||
// Remove last
|
||||
{
|
||||
const size_t old_len = arr.len;
|
||||
SCDArray_int_remove(&arr, arr.len - 1);
|
||||
assert_uint_equal(arr.len, old_len - 1);
|
||||
int new_nums[] = { 1, 2, 3, 4 };
|
||||
assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
|
||||
for (size_t i = 0; i < arr.len; i++) {
|
||||
assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove from middle
|
||||
{
|
||||
const size_t old_len = arr.len;
|
||||
SCDArray_int_remove(&arr, 1);
|
||||
assert_uint_equal(arr.len, old_len - 1);
|
||||
int new_nums[] = { 1, 3, 4 };
|
||||
assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
|
||||
for (size_t i = 0; i < arr.len; i++) {
|
||||
assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove first
|
||||
{
|
||||
const size_t old_len = arr.len;
|
||||
SCDArray_int_remove(&arr, 0);
|
||||
assert_uint_equal(arr.len, old_len - 1);
|
||||
int new_nums[] = { 3, 4 };
|
||||
assert_uint_equal(arr.len, sizeof(new_nums) / sizeof(new_nums[0]));
|
||||
for (size_t i = 0; i < arr.len; i++) {
|
||||
assert_int_equal(*SCDArray_int_at(&arr, i), new_nums[i]);
|
||||
}
|
||||
}
|
||||
|
||||
SCDArray_int_free(&arr);
|
||||
}
|
||||
|
||||
int DArray_tests_run(void) {
|
||||
const struct CMUnitTest tests[] = {
|
||||
cmocka_unit_test(test_DArray_alloc),
|
||||
cmocka_unit_test(test_DArray_push_back),
|
||||
cmocka_unit_test(test_DArray_at),
|
||||
cmocka_unit_test(test_DArray_push_back_multiple),
|
||||
cmocka_unit_test(test_DArray_remove),
|
||||
};
|
||||
|
||||
return cmocka_run_group_tests_name("DArray", tests, NULL, NULL);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,19 @@
|
||||
#include <cmocka.h>
|
||||
|
||||
int DString_tests_run(void);
|
||||
int DArray_tests_run(void);
|
||||
|
||||
int main(void) {
|
||||
int failed = 0;
|
||||
|
||||
failed = DString_tests_run();
|
||||
if (failed) {
|
||||
return failed;
|
||||
}
|
||||
failed = DArray_tests_run();
|
||||
if (failed) {
|
||||
return failed;
|
||||
}
|
||||
|
||||
return failed;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
cmocka_tests = executable(
|
||||
'cmocka_tests',
|
||||
'DArray_tests.c',
|
||||
'DString_tests.c',
|
||||
'main.c',
|
||||
include_directories: [
|
||||
|
||||
Reference in New Issue
Block a user