2025-01-28 21:42:26 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
2025-02-04 13:03:27 +00:00
|
|
|
#include <mcutil/test.h>
|
|
|
|
#include <mcutil/iter.h>
|
|
|
|
#include <mcutil/lambda.h>
|
|
|
|
#include <mcutil/result.h>
|
|
|
|
#include <mcutil/hash/md5.h>
|
|
|
|
#include <mcutil/collect/str.h>
|
|
|
|
#include <mcutil/collect/gen_vec.h>
|
|
|
|
#include <mcutil/collect/gen_hash_map.h>
|
|
|
|
#include <mcutil/collect/typed_vec.h>
|
|
|
|
#include <mcutil/collect/typed_hash_map.h>
|
|
|
|
#include <string.h>
|
2025-01-28 21:42:26 +00:00
|
|
|
|
|
|
|
|
2025-02-04 13:03:27 +00:00
|
|
|
#define GEN_VEC_ERR_BAD_ORDER 1
|
|
|
|
const char* gen_vec_error_t[] = {
|
|
|
|
[GEN_VEC_ERR_BAD_ORDER] = "Returned items in bad order",
|
|
|
|
};
|
|
|
|
|
|
|
|
int test_gen_vec() {
|
|
|
|
char* a = malloc(2);
|
|
|
|
char* b = malloc(2);
|
|
|
|
char* c = malloc(2);
|
|
|
|
char* d = malloc(2);
|
|
|
|
memcpy(a, "A", 2);
|
|
|
|
memcpy(b, "B", 2);
|
|
|
|
memcpy(c, "C", 2);
|
|
|
|
memcpy(d, "D", 2);
|
|
|
|
|
|
|
|
// C A B D
|
|
|
|
mcu_gen_vec_t vec = {0};
|
|
|
|
mcu_gen_vec_init(&vec);
|
|
|
|
|
|
|
|
|
2025-02-04 13:32:09 +00:00
|
|
|
|
|
|
|
printf("Testing mcu_gen_vec_remove_front:\n");
|
|
|
|
{
|
|
|
|
vec.inner[0] = c;
|
|
|
|
vec.inner[1] = a;
|
|
|
|
vec.inner[2] = b;
|
|
|
|
vec.inner[3] = d;
|
|
|
|
vec.count = 4;
|
|
|
|
printf("Inserted: [");
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[0]);
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[1]);
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[2]);
|
|
|
|
printf("\"%s\"]\n", (char*) vec.inner[3]);
|
|
|
|
|
|
|
|
printf("Got: [");
|
|
|
|
printf("\"%s\", ", (char*)mcu_gen_vec_remove_front(&vec));
|
|
|
|
printf("\"%s\", ", (char*)mcu_gen_vec_remove_front(&vec));
|
|
|
|
printf("\"%s\", ", (char*)mcu_gen_vec_remove_front(&vec));
|
|
|
|
printf("\"%s\"]\n", (char*)mcu_gen_vec_remove_front(&vec));
|
|
|
|
}
|
|
|
|
printf("Testing mcu_gen_vec_remove_back:\n");
|
|
|
|
{
|
|
|
|
vec.inner[0] = c;
|
|
|
|
vec.inner[1] = a;
|
|
|
|
vec.inner[2] = b;
|
|
|
|
vec.inner[3] = d;
|
|
|
|
vec.count = 4;
|
|
|
|
printf("Inserted: [");
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[0]);
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[1]);
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[2]);
|
|
|
|
printf("\"%s\"]\n", (char*) vec.inner[3]);
|
|
|
|
|
|
|
|
char* v1 = (char*)mcu_gen_vec_remove_back(&vec);
|
|
|
|
char* v2 = (char*)mcu_gen_vec_remove_back(&vec);
|
|
|
|
char* v3 = (char*)mcu_gen_vec_remove_back(&vec);
|
|
|
|
char* v4 = (char*)mcu_gen_vec_remove_back(&vec);
|
|
|
|
|
|
|
|
printf("Got: [");
|
|
|
|
printf("\"%s\", ", v4);
|
|
|
|
printf("\"%s\", ", v3);
|
|
|
|
printf("\"%s\", ", v2);
|
|
|
|
printf("\"%s\"]\n", v1);
|
|
|
|
}
|
|
|
|
printf("Testing mcu_gen_vec_insert_front:\n");
|
|
|
|
{
|
|
|
|
mcu_gen_vec_insert_front(&vec, d);
|
|
|
|
mcu_gen_vec_insert_front(&vec, c);
|
|
|
|
mcu_gen_vec_insert_front(&vec, b);
|
|
|
|
mcu_gen_vec_insert_front(&vec, a);
|
|
|
|
printf("Expected: [\"A\", \"B\", \"C\", \"D\"]\n");
|
|
|
|
printf("Got: [");
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[0]);
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[1]);
|
|
|
|
printf("\"%s\", ", (char*) vec.inner[2]);
|
|
|
|
printf("\"%s\"]\n", (char*) vec.inner[3]);
|
|
|
|
}
|
2025-02-04 13:03:27 +00:00
|
|
|
|
2025-02-04 13:32:09 +00:00
|
|
|
//printf("A: %s\n", res_a);
|
|
|
|
//printf("B: %s\n", res_b);
|
|
|
|
//printf("C: %s\n", res_c);
|
|
|
|
//printf("D: %s\n", res_d);
|
2025-02-04 13:03:27 +00:00
|
|
|
if ((
|
2025-02-04 13:32:09 +00:00
|
|
|
//strcmp(res_a, "A") ||
|
|
|
|
//strcmp(res_b, "B") ||
|
|
|
|
//strcmp(res_c, "C") ||
|
|
|
|
//strcmp(res_d, "D")
|
|
|
|
1
|
2025-02-04 13:03:27 +00:00
|
|
|
)) {
|
|
|
|
return GEN_VEC_ERR_BAD_ORDER;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mcu_test_case_t cases[] = {
|
|
|
|
{
|
|
|
|
.short_name="GEN_VEC",
|
|
|
|
.test_fn=test_gen_vec,
|
|
|
|
.error_types = (char**)gen_vec_error_t,
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
RUN_TEST_CASES(cases);
|
2025-01-28 21:42:26 +00:00
|
|
|
return 0;
|
|
|
|
}
|