ref: cfd7660a044c8bd3ad0c33a237155b05248c0b0b
dir: /tests/main.c/
#include <u.h>
#include <libc.h>
#include "../ds.h"
#include "../list.h"
usize passed = 0;
usize failed = 0;
// Print whether a given test passes or fails.
void
tfail(char *t, int tf, char *msg)
{
if(tf){
passed++;
fprint(2, "pass: %s\n", t);
}else{
failed++;
fprint(2, "fail: %s failed → %s\n", t, msg);
}
free(msg);
}
// End testing if a given test does not pass.
void
tfatal(char *t, int tf, char *msg)
{
if(tf){
passed++;
fprint(2, "pass: %s\n", t);
free(msg);
}else{
failed++;
sysfatal("fail: %s hard failed → %s", t, msg);
}
}
// Test whether we can create a list.
void
testmklist(void)
{
char *t = "mklist";
List *l = mklist();
tfatal(t, l != nil, smprint("list allocation failed"));
free(l);
}
void
testprependlist(void)
{
char *t = "prependlist";
List *l = mklist();
int i;
int n = 7;
for(i = 0; i < n; i++){
int v = i*i;
listprepend(l, &v);
}
tfail(t, l->size == n,
smprint("size → expected %d, got %ld", n, l->size)
);
ListNode *ln;
usize count = 0;
for(ln = l->head; ln != nil; ln = ln->next)
count++;
tfail(t, l->size == n,
smprint("size → iteration %d, got %ld", n, l->size)
);
// TODO - delete/free contents
free(l);
}
void
testappendlist(void)
{
char *t = "appendlist";
List *l = mklist();
int i;
int n = 7;
for(i = 0; i < n; i++){
int v = i*i;
listappend(l, &v);
}
tfail(t, l->size == n,
smprint("size → expected %d, got %ld", n, l->size)
);
ListNode *ln;
usize count = 0;
for(ln = l->head; ln != nil; ln = ln->next)
count++;
tfail(t, l->size == n,
smprint("size → iteration %d, got %ld", n, l->size)
);
// TODO - delete/free contents
free(l);
}
void
main(int, char*[])
{
// Lists
testmklist();
testprependlist();
testappendlist();
// Final output
double percent = (double)((double)passed/(double)(passed+failed))*100.0;
print("%ld passed. %ld failed. %3.0f%% passing.\n", passed, failed, percent);
exits(nil);
}