diff options
Diffstat (limited to 'test/lib/list.c')
-rw-r--r-- | test/lib/list.c | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/test/lib/list.c b/test/lib/list.c deleted file mode 100644 index e72b50c..0000000 --- a/test/lib/list.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * This file is part of libdom test suite. - * Licensed under the MIT License, - * http://www.opensource.org/licenses/mit-license.php - * Copyright 2007 James Shaw <jshaw@netsurf-browser.org> - */ - - -#include <stdbool.h> -#include <stdio.h> -#include <stdlib.h> - -#include "comparators.h" -#include "list.h" -#include "testassert.h" - -/** - * Private helper function. - * Create a new list_elt and initialise it. - */ -struct list_elt* list_new_elt(void* data); - -struct list_elt* list_new_elt(void* data) { - struct list_elt* elt = malloc(sizeof(struct list_elt)); - assert(elt != NULL); - elt->data = data; - elt->next = NULL; - return elt; -} - -struct list* list_new(void) -{ - struct list* list = malloc(sizeof(struct list)); - assert(list != NULL); - list->size = 0; - list->head = NULL; - list->tail = NULL; - return list; -} - -void list_destroy(struct list* list) -{ - struct list_elt* elt = list->head; - while (elt != NULL) { - struct list_elt* nextElt = elt->next; - free(elt); - elt = nextElt; - } - free(list); -} - -void list_add(struct list* list, void* data) -{ - struct list_elt* elt = list_new_elt(data); - struct list_elt* tail = list->tail; - - /* if tail was set, make its 'next' ptr point to elt */ - if (tail != NULL) { - tail->next = elt; - } - - /* make elt the new tail */ - list->tail = elt; - - if (list->head == NULL) { - list->head = elt; - } - - /* inc the size of the list */ - list->size++; -} - -bool list_remove(struct list* list, void* data) -{ - struct list_elt* prevElt = NULL; - struct list_elt* elt = list->head; - - bool found = false; - - while (elt != NULL) { - struct list_elt* nextElt = elt->next; - - /* if data is identical, fix up pointers, and free the element */ - if (data == elt->data) { - if (prevElt == NULL) { - list->head = nextElt; - } else { - prevElt->next = nextElt; - } - free(elt); - list->size--; - found = true; - break; - } - - prevElt = elt; - elt = nextElt; - } - - return found; -} - -struct list* list_clone(struct list* list) -{ - struct list* newList = list_new(); - struct list_elt* elt = list->head; - - while (elt != NULL) { - list_add(newList, elt->data); - elt = elt->next; - } - - return newList; -} - -bool list_contains(struct list* list, void* data, comparator comparator) -{ - struct list_elt* elt = list->head; - while (elt != NULL) { - if (comparator(elt->data, data) == 0) { - return true; - } - elt = elt->next; - } - return false; -} - -bool list_contains_all(struct list* superList, struct list* subList, - comparator comparator) -{ - struct list_elt* subElt = subList->head; - struct list* superListClone = list_clone(superList); - - bool found = true; - - while (subElt != NULL) { - struct list_elt* superElt = superListClone->head; - - found = false; - while (superElt != NULL && found == false) { - if (comparator(subElt->data, superElt->data) == 0) { - found = true; - list_remove(superListClone, superElt->data); - } - superElt = superElt->next; - } - - subElt = subElt->next; - } - free(superListClone); - - return found; -} - |