2022-04-16 02:49:23 +03:00
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
#include "vector.h"
|
|
|
|
|
#include "util.h"
|
|
|
|
|
#include "macro.h"
|
|
|
|
|
#include "munit/munit.h"
|
|
|
|
|
|
2025-12-11 02:05:47 +03:00
|
|
|
|
|
|
|
|
static MunitResult
|
|
|
|
|
test_vector_insert(const MunitParameter params[], void * data)
|
|
|
|
|
{
|
|
|
|
|
ivector v;
|
|
|
|
|
vector_init(&v);
|
|
|
|
|
|
|
|
|
|
vector_push(&v, 1);
|
|
|
|
|
vector_push(&v, 2);
|
|
|
|
|
vector_push(&v, 3);
|
|
|
|
|
vector_push(&v, 4);
|
|
|
|
|
|
|
|
|
|
vector_insert(&v, 2, 99);
|
|
|
|
|
|
|
|
|
|
int *p = vector_data(&v);
|
|
|
|
|
|
|
|
|
|
munit_assert_int(p[0], ==, 1);
|
|
|
|
|
munit_assert_int(p[1], ==, 2);
|
|
|
|
|
munit_assert_int(p[2], ==, 99);
|
|
|
|
|
munit_assert_int(p[3], ==, 3);
|
|
|
|
|
munit_assert_int(p[4], ==, 4);
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, 5);
|
|
|
|
|
|
|
|
|
|
vector_free(&v);
|
|
|
|
|
return MUNIT_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MunitResult
|
|
|
|
|
test_vector_del(const MunitParameter params[], void * data)
|
|
|
|
|
{
|
|
|
|
|
ivector v;
|
|
|
|
|
vector_init(&v);
|
|
|
|
|
|
|
|
|
|
vector_push(&v, 1);
|
|
|
|
|
vector_push(&v, 2);
|
|
|
|
|
vector_push(&v, 3);
|
|
|
|
|
vector_push(&v, 4);
|
|
|
|
|
vector_push(&v, 5);
|
|
|
|
|
|
|
|
|
|
vector_del(&v, 2);
|
|
|
|
|
|
|
|
|
|
int *p = vector_data(&v);
|
|
|
|
|
|
|
|
|
|
munit_assert_int(p[0], ==, 1);
|
|
|
|
|
munit_assert_int(p[1], ==, 2);
|
|
|
|
|
munit_assert_int(p[2], ==, 4);
|
|
|
|
|
munit_assert_int(p[3], ==, 5);
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, 4);
|
|
|
|
|
|
|
|
|
|
vector_free(&v);
|
|
|
|
|
return MUNIT_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2022-04-16 02:49:23 +03:00
|
|
|
static MunitResult
|
2023-04-14 17:18:19 +03:00
|
|
|
test_vector_len(const MunitParameter params[], void * data)
|
2022-04-16 02:49:23 +03:00
|
|
|
{
|
|
|
|
|
ivector v;
|
|
|
|
|
vector_init(&v);
|
|
|
|
|
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, 0);
|
|
|
|
|
|
|
|
|
|
// Lame method, that checks vector_len getter
|
|
|
|
|
v.n = 1337;
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, 1337);
|
2023-04-14 17:18:19 +03:00
|
|
|
|
|
|
|
|
vector_free(&v);
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, 0);
|
|
|
|
|
|
|
|
|
|
return MUNIT_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MunitResult
|
|
|
|
|
test_vector_data(const MunitParameter params[], void * data)
|
|
|
|
|
{
|
|
|
|
|
// (Really stupid) test for vector_data
|
|
|
|
|
ivector v;
|
|
|
|
|
vector_init(&v);
|
|
|
|
|
|
|
|
|
|
munit_assert_not_null(vector_data(&v));
|
2022-04-16 02:49:23 +03:00
|
|
|
vector_free(&v);
|
2023-04-14 17:18:19 +03:00
|
|
|
munit_assert_null(vector_data(&v));
|
2022-04-16 02:49:23 +03:00
|
|
|
|
|
|
|
|
return MUNIT_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MunitResult
|
2023-04-14 17:18:19 +03:00
|
|
|
test_vector_initdata(const MunitParameter params[], void * data)
|
2022-04-16 02:49:23 +03:00
|
|
|
{
|
2023-04-14 17:18:19 +03:00
|
|
|
int *p;
|
2022-04-16 02:49:23 +03:00
|
|
|
int i;
|
2023-04-14 17:18:19 +03:00
|
|
|
ivector v;
|
2022-04-16 02:49:23 +03:00
|
|
|
int arr[] = {
|
|
|
|
|
1, 2, 3, 4, 5
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
vector_initdata(&v, arr, ARRSZ(arr));
|
|
|
|
|
p = vector_data(&v);
|
|
|
|
|
munit_assert_not_null(p);
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, ARRSZ(arr));
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < ARRSZ(arr); i++) {
|
|
|
|
|
munit_assert_int(arr[i], ==, p[i]);
|
|
|
|
|
}
|
2023-04-14 17:18:19 +03:00
|
|
|
vector_free(&v);
|
2022-04-16 02:49:23 +03:00
|
|
|
|
2023-04-14 17:18:19 +03:00
|
|
|
return MUNIT_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MunitResult
|
|
|
|
|
test_vector_resize(const MunitParameter params[], void * data)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
int arr[] = {
|
|
|
|
|
1, 2, 3, 4, 5
|
|
|
|
|
};
|
|
|
|
|
int *p;
|
|
|
|
|
|
|
|
|
|
ivector v;
|
|
|
|
|
|
|
|
|
|
vector_initdata(&v, arr, ARRSZ(arr));
|
2022-04-16 02:49:23 +03:00
|
|
|
vector_resize(&v, 16);
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, 16);
|
|
|
|
|
|
|
|
|
|
munit_assert_size(v.n, <=, v.maxsz);
|
|
|
|
|
|
|
|
|
|
// Try to check that new memory is really zeroed
|
|
|
|
|
i = ARRSZ(arr);
|
|
|
|
|
p = vector_data(&v);
|
|
|
|
|
for (; i < 16; i++) {
|
|
|
|
|
munit_assert_int(0, ==, p[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
vector_free(&v);
|
2023-04-14 17:18:19 +03:00
|
|
|
return MUNIT_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MunitResult
|
|
|
|
|
test_vector_set_get(const MunitParameter params[], void * data)
|
|
|
|
|
{
|
|
|
|
|
int arr[] = {
|
|
|
|
|
1, 2, 3, 4, 5
|
|
|
|
|
};
|
|
|
|
|
ivector v;
|
|
|
|
|
int *p;
|
|
|
|
|
int i;
|
2022-04-16 02:49:23 +03:00
|
|
|
|
2023-04-14 17:18:19 +03:00
|
|
|
vector_initdata(&v, arr, ARRSZ(arr));
|
|
|
|
|
for (i = 0; i < vector_len(&v); i++) {
|
|
|
|
|
vector_set(&v, i, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p = vector_data(&v);
|
|
|
|
|
for (i = 0; i < vector_len(&v); i++) {
|
|
|
|
|
int item = vector_get(&v, i);
|
|
|
|
|
munit_assert_int(item, ==, i);
|
|
|
|
|
//double check with raw pointer
|
|
|
|
|
munit_assert_int(p[i], ==, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
vector_free(&v);
|
2022-04-16 02:49:23 +03:00
|
|
|
return MUNIT_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static MunitResult
|
|
|
|
|
test_vector_push_pop(const MunitParameter params[], void * data)
|
|
|
|
|
{
|
|
|
|
|
int arr[] = {
|
|
|
|
|
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
|
|
|
|
|
11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
|
|
|
|
|
int i, tmp;
|
|
|
|
|
|
|
|
|
|
ivector v;
|
|
|
|
|
|
|
|
|
|
vector_init(&v);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < ARRSZ(arr); i++) {
|
|
|
|
|
vector_push(&v, arr[i]);
|
|
|
|
|
}
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, ARRSZ(arr));
|
|
|
|
|
|
|
|
|
|
// test vector_get
|
|
|
|
|
for (i = 0; i < ARRSZ(arr); i++) {
|
|
|
|
|
tmp = vector_get(&v, i);
|
|
|
|
|
munit_assert_int(tmp, ==, arr[i]);
|
|
|
|
|
}
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, ARRSZ(arr));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vector_pop(&v);
|
|
|
|
|
vector_pop(&v);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < ARRSZ(arr) - 2; i++) {
|
|
|
|
|
tmp = vector_get(&v, i);
|
|
|
|
|
munit_assert_int(tmp, ==, arr[i]);
|
|
|
|
|
}
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, ARRSZ(arr) - 2);
|
|
|
|
|
|
|
|
|
|
//test vector_pop underflow
|
|
|
|
|
for (i = 0; i < ARRSZ(arr); i++) {
|
|
|
|
|
vector_pop(&v);
|
|
|
|
|
}
|
|
|
|
|
munit_assert_size(vector_len(&v), ==, 0);
|
|
|
|
|
|
|
|
|
|
//test vector_pop
|
|
|
|
|
|
|
|
|
|
vector_free(&v);
|
|
|
|
|
|
|
|
|
|
return MUNIT_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define TEST_ITEM(func) {#func, func, NULL, NULL, MUNIT_TEST_OPTION_NONE }
|
|
|
|
|
|
|
|
|
|
static MunitTest test_suite_tests[] = {
|
2023-04-14 17:18:19 +03:00
|
|
|
TEST_ITEM(test_vector_len),
|
|
|
|
|
TEST_ITEM(test_vector_data),
|
|
|
|
|
TEST_ITEM(test_vector_initdata),
|
2022-04-16 02:49:23 +03:00
|
|
|
|
2023-04-14 17:18:19 +03:00
|
|
|
TEST_ITEM(test_vector_resize),
|
|
|
|
|
TEST_ITEM(test_vector_set_get),
|
2022-04-16 02:49:23 +03:00
|
|
|
TEST_ITEM(test_vector_push_pop),
|
|
|
|
|
|
2025-12-11 02:05:47 +03:00
|
|
|
TEST_ITEM(test_vector_insert),
|
|
|
|
|
TEST_ITEM(test_vector_del),
|
2022-04-16 02:49:23 +03:00
|
|
|
{ NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static const MunitSuite test_suite = {
|
|
|
|
|
(char *) "",
|
|
|
|
|
test_suite_tests,
|
|
|
|
|
NULL,
|
|
|
|
|
1,
|
|
|
|
|
MUNIT_SUITE_OPTION_NONE
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
main(int argc, const char *argv[])
|
|
|
|
|
{
|
|
|
|
|
munit_suite_main(&test_suite, (void *) "vector_test", argc, (char * const*) argv);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|