mirror of
https://github.com/sigmasternchen/CFloor
synced 2025-03-15 20:28:56 +00:00
better tests for linked lists
This commit is contained in:
parent
2081c88a98
commit
08743ef960
4 changed files with 84 additions and 23 deletions
2
Makefile
2
Makefile
|
@ -9,6 +9,8 @@ all: $(BIN_NAME)
|
||||||
|
|
||||||
test: obj/test.o obj/networking.o obj/linked.o
|
test: obj/test.o obj/networking.o obj/linked.o
|
||||||
$(LD) $(LDFLAGS) -o $@ $^
|
$(LD) $(LDFLAGS) -o $@ $^
|
||||||
|
valgrind: test
|
||||||
|
valgrind --leak-check=yes ./test
|
||||||
|
|
||||||
obj/test.o: src/networking.h
|
obj/test.o: src/networking.h
|
||||||
obj/networking.o: src/networking.h src/headers.h
|
obj/networking.o: src/networking.h src/headers.h
|
||||||
|
|
|
@ -12,12 +12,12 @@ linkedList_t linked_create() {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t linked_push(linkedList_t* list, void* data) {
|
size_t linked_push(linkedList_t* list, const void* data) {
|
||||||
link_t* new = malloc(sizeof (link_t));
|
link_t* new = malloc(sizeof (link_t));
|
||||||
if (new == NULL)
|
if (new == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
new->data = data;
|
new->data = (void*) data;
|
||||||
sem_init(&(new->modify_sem), 0, 1);
|
sem_init(&(new->modify_sem), 0, 1);
|
||||||
new->inUse = 0;
|
new->inUse = 0;
|
||||||
new->list = list;
|
new->list = list;
|
||||||
|
|
|
@ -21,7 +21,7 @@ typedef struct link {
|
||||||
} link_t;
|
} link_t;
|
||||||
|
|
||||||
linkedList_t linked_create();
|
linkedList_t linked_create();
|
||||||
size_t linked_push(linkedList_t* list, void* data);
|
size_t linked_push(linkedList_t* list, const void* data);
|
||||||
link_t* linked_first(linkedList_t* list);
|
link_t* linked_first(linkedList_t* list);
|
||||||
link_t* linked_next(link_t* link);
|
link_t* linked_next(link_t* link);
|
||||||
size_t linked_length(linkedList_t* list);
|
size_t linked_length(linkedList_t* list);
|
||||||
|
|
99
src/test.c
99
src/test.c
|
@ -1,39 +1,87 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "networking.h"
|
#include "networking.h"
|
||||||
#include "linked.h"
|
#include "linked.h"
|
||||||
|
|
||||||
handler_t handlerGetter(struct metaData metaData, const char* host) {
|
bool global = true;
|
||||||
return NULL;
|
|
||||||
|
void checkBool(bool ok, const char* check) {
|
||||||
|
const char* result;
|
||||||
|
if (ok) {
|
||||||
|
result = "[ OK ]";
|
||||||
|
} else {
|
||||||
|
result = "[FAILED]";
|
||||||
|
global = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%s:%*s%s\n", check, (int) (30 - strlen(check)), "", result);
|
||||||
|
}
|
||||||
|
void checkInt(int value, int compare, const char* check) {
|
||||||
|
checkBool(value == compare, check);
|
||||||
|
}
|
||||||
|
void checkString(const char* value, const char* compare, const char* check) {
|
||||||
|
checkBool(strcmp(value, compare) == 0, check);
|
||||||
|
}
|
||||||
|
void checkVoid(const void* value, const void* compare, const char* check) {
|
||||||
|
checkBool(value == compare, check);
|
||||||
|
}
|
||||||
|
void checkNull(void* value, const char* check) {
|
||||||
|
checkBool(value != NULL, check);
|
||||||
}
|
}
|
||||||
|
|
||||||
void testLinkedList() {
|
void testLinkedList() {
|
||||||
linkedList_t list = linked_create();
|
linkedList_t list = linked_create();
|
||||||
linked_push(&list, "Entry 0");
|
|
||||||
linked_push(&list, "Entry 1");
|
const char* testString = "Test";
|
||||||
linked_push(&list, "Entry 2");
|
|
||||||
linked_push(&list, "Entry 3");
|
|
||||||
|
|
||||||
link_t* current = linked_first(&list);
|
checkInt(linked_length(&list), 0, "empty list length");
|
||||||
while(current != NULL) {
|
checkInt(linked_push(&list, testString), 0, "insert position");
|
||||||
printf("%s\n", (char*) current->data);
|
checkInt(linked_length(&list), 1, "list length");
|
||||||
current = linked_next(current);
|
link_t* link = linked_get(&list, 0);
|
||||||
}
|
checkNull(link, "get not null");
|
||||||
|
checkVoid(link->data, testString, "test string value");
|
||||||
|
checkInt(link->inUse, 1, "inUse counter value");
|
||||||
|
linked_release(link);
|
||||||
|
checkInt(link->inUse, 0, "inUse counter value");
|
||||||
|
|
||||||
current = linked_get(&list, 2);
|
checkInt(linked_push(&list, (void*) 1), 1, "insert position");
|
||||||
printf("%s\n", (char*) current->data);
|
checkInt(linked_push(&list, (void*) 2), 2, "insert position");
|
||||||
linked_unlink(current);
|
checkInt(linked_push(&list, (void*) 3), 3, "insert position");
|
||||||
linked_release(current);
|
checkInt(linked_length(&list), 4, "list length");
|
||||||
|
|
||||||
current = linked_first(&list);
|
link = linked_first(&list);
|
||||||
while(current != NULL) {
|
checkInt(linked_unlink(link), 0, "unlink first result");
|
||||||
printf("%s\n", (char*) current->data);
|
linked_release(link);
|
||||||
current = linked_next(current);
|
checkInt(linked_length(&list), 3, "link length");
|
||||||
}
|
|
||||||
|
link = linked_first(&list);
|
||||||
|
checkNull(link, "get not null");
|
||||||
|
checkInt((long) link->data, 1, "get value");
|
||||||
|
|
||||||
|
link = linked_next(link);
|
||||||
|
checkNull(link, "get not null");
|
||||||
|
checkInt((long) link->data, 2, "get value");
|
||||||
|
|
||||||
|
checkInt(linked_unlink(link), 0, "unlink not first result");
|
||||||
|
|
||||||
|
link = linked_next(link);
|
||||||
|
checkNull(link, "get not null");
|
||||||
|
checkInt((long) link->data, 3, "get value");
|
||||||
|
|
||||||
|
linked_release(link);
|
||||||
|
|
||||||
|
checkInt(linked_length(&list), 2, "list length");
|
||||||
|
|
||||||
linked_destroy(&list);
|
linked_destroy(&list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handler_t handlerGetter(struct metaData metaData, const char* host) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void testNetworking() {
|
void testNetworking() {
|
||||||
initNetworking((struct networkingConfig) {
|
initNetworking((struct networkingConfig) {
|
||||||
.connectionTimeout = 30000,
|
.connectionTimeout = 30000,
|
||||||
|
@ -45,5 +93,16 @@ void testNetworking() {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
|
bool overall = true;
|
||||||
|
|
||||||
|
printf("linked lists\n");
|
||||||
|
printf("============\n\n");
|
||||||
testLinkedList();
|
testLinkedList();
|
||||||
|
if (!global)
|
||||||
|
overall = false;
|
||||||
|
printf("linked lists: %s\n\n", global ? "OK" : "FAILED");
|
||||||
|
global = true;
|
||||||
|
|
||||||
|
|
||||||
|
printf("\nOverall: %s\n", overall ? "OK" : "FAILED");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue