Maybe include the file I want to commit
This commit is contained in:
parent
a042169845
commit
d547432270
2 changed files with 153 additions and 0 deletions
91
kernel/tests/tests.c
Normal file
91
kernel/tests/tests.c
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
#ifndef TESTS_C
|
||||||
|
#define TESTS_C
|
||||||
|
|
||||||
|
#define TESTS_ENABLED
|
||||||
|
#ifdef TESTS_ENABLED
|
||||||
|
|
||||||
|
|
||||||
|
#define mu_assert(message, test) do { if (!(test)) return message; } while (0)
|
||||||
|
#define mu_run_test(test) do { char *message = test(); tests_run++; \
|
||||||
|
if (message) return message; } while (0)
|
||||||
|
extern int tests_run;
|
||||||
|
|
||||||
|
#include "../memory.c"
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
|
||||||
|
int tests_run = 0;
|
||||||
|
|
||||||
|
|
||||||
|
static char *test_memory() {
|
||||||
|
|
||||||
|
ll_node *ll_head = __new_node();
|
||||||
|
ll_head->data = malloc(sizeof(size_t) * 5000);
|
||||||
|
ll_head->used = true;
|
||||||
|
ll_head->size = 1;
|
||||||
|
void *ptr0 = __alloc(ll_head, 5);
|
||||||
|
void *ptr1 = __alloc(ll_head, 5);
|
||||||
|
void *ptr4 = __alloc(ll_head, 5);
|
||||||
|
print(ll_head);
|
||||||
|
mu_assert("Error: chain should be complete at 1", ll_head->next != NULL);
|
||||||
|
mu_assert("Error: chain should be complete at 2", ll_head->next->next != NULL);
|
||||||
|
mu_assert("Error: chain should be complete at 3", ll_head->next->next->next != NULL);
|
||||||
|
mu_assert("Error: chain should be complete at 4", ll_head->next->next->next->next == NULL);
|
||||||
|
|
||||||
|
ll_node *current = ll_head;
|
||||||
|
while (current->next != NULL) {
|
||||||
|
current = current->next;
|
||||||
|
|
||||||
|
mu_assert("Error: block should have size 5", current->size == 5);
|
||||||
|
mu_assert("Error: block should be in use", current->used == true);
|
||||||
|
}
|
||||||
|
|
||||||
|
__free(ll_head, ptr1);
|
||||||
|
mu_assert("", ll_head->next->used == true);
|
||||||
|
mu_assert("", ll_head->next->next->used == false);
|
||||||
|
mu_assert("", ll_head->next->next->next->used == true);
|
||||||
|
|
||||||
|
printf("Alloc 3 bytes\n");
|
||||||
|
void *ptr2 = __alloc(ll_head, 3);
|
||||||
|
print(ll_head);
|
||||||
|
|
||||||
|
printf("Alloc 3 bytes\n");
|
||||||
|
__alloc(ll_head, 3);
|
||||||
|
print(ll_head);
|
||||||
|
|
||||||
|
printf("Alloc 2 bytes\n");
|
||||||
|
void *ptr3 = __alloc(ll_head, 2);
|
||||||
|
print(ll_head);
|
||||||
|
|
||||||
|
__free(ll_head, ptr2);
|
||||||
|
print(ll_head);
|
||||||
|
__free(ll_head, ptr4);
|
||||||
|
print(ll_head);
|
||||||
|
__free(ll_head, ptr3);
|
||||||
|
print(ll_head);
|
||||||
|
|
||||||
|
__free(ll_head, ptr0);
|
||||||
|
print(ll_head);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *all_tests() {
|
||||||
|
mu_run_test(test_memory);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
//int main(int argc, char **argv) {
|
||||||
|
// char *result = all_tests();
|
||||||
|
// if (result != 0) {
|
||||||
|
// printf("%s\n", result);
|
||||||
|
// } else {
|
||||||
|
// printf("ALL TESTS PASSED\n");
|
||||||
|
// }
|
||||||
|
// printf("Tests run: %d\n", tests_run);
|
||||||
|
//
|
||||||
|
// return result != 0;
|
||||||
|
//}
|
||||||
|
|
||||||
|
#endif // TESTS_ENABLED
|
||||||
|
|
||||||
|
#endif // TESTS_C
|
62
kernel/util/printer.c
Normal file
62
kernel/util/printer.c
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
#ifndef TABS_PRINTER_C
|
||||||
|
#define TABS_PRINTER_C
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "../terminal.c"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fmt is a string with specifiers where variables can be inserted.
|
||||||
|
*
|
||||||
|
* ex: ("Hello %s", "world") -> "Hello world"
|
||||||
|
*
|
||||||
|
* Specifiers are
|
||||||
|
* - %c: character
|
||||||
|
* - %d: digit (integer)
|
||||||
|
* - %p: pointer (void*)
|
||||||
|
* @param fmt Formatter string
|
||||||
|
* @param ... Variable amount of arguments to be inserted
|
||||||
|
*/
|
||||||
|
void print(const char *fmt, ...) {
|
||||||
|
const char *p;
|
||||||
|
va_list argp;
|
||||||
|
int i;
|
||||||
|
char *s;
|
||||||
|
char fmtbuf[256];
|
||||||
|
|
||||||
|
va_start(argp, fmt);
|
||||||
|
|
||||||
|
for (p = fmt; *p != '\0'; p++)
|
||||||
|
if (*p != '%') {
|
||||||
|
terminal_putchar(*p);
|
||||||
|
} else {
|
||||||
|
switch (*++p) {
|
||||||
|
case 'c':
|
||||||
|
i = va_arg(argp, int);
|
||||||
|
|
||||||
|
terminal_putchar((char) i);
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
i = va_arg(argp, int);
|
||||||
|
s = itoa(i, fmtbuf, 10);
|
||||||
|
terminal_writestring(s);
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
s = va_arg(argp, char *);
|
||||||
|
terminal_writestring(s);
|
||||||
|
break;
|
||||||
|
case 'x':
|
||||||
|
i = va_arg(argp, int);
|
||||||
|
s = itoa(i, fmtbuf, 16);
|
||||||
|
terminal_writestring(s);
|
||||||
|
break;
|
||||||
|
case '%':
|
||||||
|
terminal_putchar('%');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
va_end(argp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //TABS_PRINTER_C
|
Loading…
Reference in a new issue