| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438 |
- #include <stdio.h>
- #include <string.h>
- #include <glib.h>
- #include "test.h"
- RESULT
- test_list_length ()
- {
- GList *list = g_list_prepend (NULL, "foo");
- if (g_list_length (list) != 1)
- return FAILED ("length failed. #1");
- list = g_list_prepend (list, "bar");
- if (g_list_length (list) != 2)
- return FAILED ("length failed. #2");
- list = g_list_append (list, "bar");
- if (g_list_length (list) != 3)
- return FAILED ("length failed. #3");
- g_list_free (list);
- return NULL;
- }
- RESULT
- test_list_nth ()
- {
- char *foo = "foo";
- char *bar = "bar";
- char *baz = "baz";
- GList *nth, *list;
- list = g_list_prepend (NULL, baz);
- list = g_list_prepend (list, bar);
- list = g_list_prepend (list, foo);
- nth = g_list_nth (list, 0);
- if (nth->data != foo)
- return FAILED ("nth failed. #0");
- nth = g_list_nth (list, 1);
- if (nth->data != bar)
- return FAILED ("nth failed. #1");
-
- nth = g_list_nth (list, 2);
- if (nth->data != baz)
- return FAILED ("nth failed. #2");
- nth = g_list_nth (list, 3);
- if (nth)
- return FAILED ("nth failed. #3: %s", nth->data);
- g_list_free (list);
- return OK;
- }
- RESULT
- test_list_index ()
- {
- int i;
- char *foo = "foo";
- char *bar = "bar";
- char *baz = "baz";
- GList *list;
- list = g_list_prepend (NULL, baz);
- list = g_list_prepend (list, bar);
- list = g_list_prepend (list, foo);
- i = g_list_index (list, foo);
- if (i != 0)
- return FAILED ("index failed. #0: %d", i);
- i = g_list_index (list, bar);
- if (i != 1)
- return FAILED ("index failed. #1: %d", i);
-
- i = g_list_index (list, baz);
- if (i != 2)
- return FAILED ("index failed. #2: %d", i);
- g_list_free (list);
- return OK;
- }
- RESULT
- test_list_append ()
- {
- GList *list = g_list_prepend (NULL, "first");
- if (g_list_length (list) != 1)
- return FAILED ("Prepend failed");
- list = g_list_append (list, "second");
- if (g_list_length (list) != 2)
- return FAILED ("Append failed");
- g_list_free (list);
- return OK;
- }
- RESULT
- test_list_last ()
- {
- GList *foo = g_list_prepend (NULL, "foo");
- GList *bar = g_list_prepend (NULL, "bar");
- GList *last;
-
- foo = g_list_concat (foo, bar);
- last = g_list_last (foo);
- if (last != bar)
- return FAILED ("last failed. #1");
- foo = g_list_concat (foo, g_list_prepend (NULL, "baz"));
- foo = g_list_concat (foo, g_list_prepend (NULL, "quux"));
- last = g_list_last (foo);
- if (strcmp ("quux", last->data))
- return FAILED ("last failed. #2");
- g_list_free (foo);
- return OK;
- }
- RESULT
- test_list_concat ()
- {
- GList *foo = g_list_prepend (NULL, "foo");
- GList *bar = g_list_prepend (NULL, "bar");
- GList *list = g_list_concat (foo, bar);
- if (g_list_length (list) != 2)
- return FAILED ("Concat failed. #1");
- if (strcmp (list->data, "foo"))
- return FAILED ("Concat failed. #2");
- if (strcmp (list->next->data, "bar"))
- return FAILED ("Concat failed. #3");
- if (g_list_first (list) != foo)
- return FAILED ("Concat failed. #4");
-
- if (g_list_last (list) != bar)
- return FAILED ("Concat failed. #5");
- g_list_free (list);
- return OK;
- }
- static gint
- compare (gconstpointer a, gconstpointer b)
- {
- char *foo = (char *) a;
- char *bar = (char *) b;
- if (strlen (foo) < strlen (bar))
- return -1;
- return 1;
- }
- RESULT
- test_list_insert_sorted ()
- {
- GList *list = g_list_prepend (NULL, "a");
- list = g_list_append (list, "aaa");
- /* insert at the middle */
- list = g_list_insert_sorted (list, "aa", compare);
- if (strcmp ("aa", list->next->data))
- return FAILED ("insert_sorted failed. #1");
- /* insert at the beginning */
- list = g_list_insert_sorted (list, "", compare);
- if (strcmp ("", list->data))
- return FAILED ("insert_sorted failed. #2");
- /* insert at the end */
- list = g_list_insert_sorted (list, "aaaa", compare);
- if (strcmp ("aaaa", g_list_last (list)->data))
- return FAILED ("insert_sorted failed. #3");
- g_list_free (list);
- return OK;
- }
- RESULT
- test_list_copy ()
- {
- int i, length;
- GList *list, *copy;
- list = g_list_prepend (NULL, "a");
- list = g_list_append (list, "aa");
- list = g_list_append (list, "aaa");
- list = g_list_append (list, "aaaa");
- length = g_list_length (list);
- copy = g_list_copy (list);
- for (i = 0; i < length; i++)
- if (strcmp (g_list_nth (list, i)->data,
- g_list_nth (copy, i)->data))
- return FAILED ("copy failed.");
- g_list_free (list);
- g_list_free (copy);
- return OK;
- }
- RESULT
- test_list_reverse ()
- {
- guint i, length;
- GList *list, *reverse;
- list = g_list_prepend (NULL, "a");
- list = g_list_append (list, "aa");
- list = g_list_append (list, "aaa");
- list = g_list_append (list, "aaaa");
- length = g_list_length (list);
- reverse = g_list_reverse (g_list_copy (list));
- if (g_list_length (reverse) != length)
- return FAILED ("reverse failed #1");
- for (i = 0; i < length; i++){
- guint j = length - i - 1;
- if (strcmp (g_list_nth (list, i)->data,
- g_list_nth (reverse, j)->data))
- return FAILED ("reverse failed. #2");
- }
- g_list_free (list);
- g_list_free (reverse);
- return OK;
- }
- RESULT
- test_list_remove ()
- {
- GList *list = g_list_prepend (NULL, "three");
- char *one = "one";
- list = g_list_prepend (list, "two");
- list = g_list_prepend (list, one);
- list = g_list_remove (list, one);
- if (g_list_length (list) != 2)
- return FAILED ("Remove failed");
- if (strcmp ("two", list->data) != 0)
- return FAILED ("Remove failed");
- g_list_free (list);
- return OK;
- }
- RESULT
- test_list_remove_link ()
- {
- GList *foo = g_list_prepend (NULL, "a");
- GList *bar = g_list_prepend (NULL, "b");
- GList *baz = g_list_prepend (NULL, "c");
- GList *list = foo;
- foo = g_list_concat (foo, bar);
- foo = g_list_concat (foo, baz);
- list = g_list_remove_link (list, bar);
- if (g_list_length (list) != 2)
- return FAILED ("remove_link failed #1");
- if (bar->next != NULL)
- return FAILED ("remove_link failed #2");
- g_list_free (list);
- g_list_free (bar);
- return OK;
- }
- RESULT
- test_list_insert_before ()
- {
- GList *foo, *bar, *baz;
- foo = g_list_prepend (NULL, "foo");
- foo = g_list_insert_before (foo, NULL, "bar");
- bar = g_list_last (foo);
- if (strcmp (bar->data, "bar"))
- return FAILED ("1");
- baz = g_list_insert_before (foo, bar, "baz");
- if (foo != baz)
- return FAILED ("2");
- if (strcmp (g_list_nth_data (foo, 1), "baz"))
- return FAILED ("3: %s", g_list_nth_data (foo, 1));
- g_list_free (foo);
- return OK;
- }
- #define N_ELEMS 101
- static int intcompare (gconstpointer p1, gconstpointer p2)
- {
- return GPOINTER_TO_INT (p1) - GPOINTER_TO_INT (p2);
- }
- static gboolean verify_sort (GList *list, int len)
- {
- int prev;
- if (list->prev)
- return FALSE;
- prev = GPOINTER_TO_INT (list->data);
- len--;
- for (list = list->next; list; list = list->next) {
- int curr = GPOINTER_TO_INT (list->data);
- if (prev > curr)
- return FALSE;
- prev = curr;
- if (!list->prev || list->prev->next != list)
- return FALSE;
- if (len == 0)
- return FALSE;
- len--;
- }
- return len == 0;
- }
- RESULT
- test_list_sort ()
- {
- int i, j, mul;
- GList *list = NULL;
- for (i = 0; i < N_ELEMS; ++i)
- list = g_list_prepend (list, GINT_TO_POINTER (i));
- list = g_list_sort (list, intcompare);
- if (!verify_sort (list, N_ELEMS))
- return FAILED ("decreasing list");
- g_list_free (list);
- list = NULL;
- for (i = 0; i < N_ELEMS; ++i)
- list = g_list_prepend (list, GINT_TO_POINTER (-i));
- list = g_list_sort (list, intcompare);
- if (!verify_sort (list, N_ELEMS))
- return FAILED ("increasing list");
- g_list_free (list);
- list = g_list_prepend (NULL, GINT_TO_POINTER (0));
- for (i = 1; i < N_ELEMS; ++i) {
- list = g_list_prepend (list, GINT_TO_POINTER (i));
- list = g_list_prepend (list, GINT_TO_POINTER (-i));
- }
- list = g_list_sort (list, intcompare);
- if (!verify_sort (list, 2*N_ELEMS-1))
- return FAILED ("alternating list");
- g_list_free (list);
- list = NULL;
- mul = 1;
- for (i = 1; i < N_ELEMS; ++i) {
- mul = -mul;
- for (j = 0; j < i; ++j)
- list = g_list_prepend (list, GINT_TO_POINTER (mul * j));
- }
- list = g_list_sort (list, intcompare);
- if (!verify_sort (list, (N_ELEMS*N_ELEMS - N_ELEMS)/2))
- return FAILED ("wavering list");
- g_list_free (list);
- return OK;
- }
- static gint
- find_custom (gconstpointer a, gconstpointer b)
- {
- return(strcmp (a, b));
- }
- RESULT
- test_list_find_custom ()
- {
- GList *list = NULL, *found;
- char *foo = "foo";
- char *bar = "bar";
- char *baz = "baz";
-
- list = g_list_prepend (list, baz);
- list = g_list_prepend (list, bar);
- list = g_list_prepend (list, foo);
-
- found = g_list_find_custom (list, baz, find_custom);
-
- if (found == NULL)
- return FAILED ("Find failed");
-
- g_list_free (list);
-
- return OK;
- }
- static Test list_tests [] = {
- { "length", test_list_length},
- { "nth", test_list_nth},
- { "index", test_list_index},
- { "last", test_list_last},
- { "append", test_list_append},
- { "concat", test_list_concat},
- {"insert_sorted", test_list_insert_sorted},
- {"insert_before", test_list_insert_before},
- { "copy", test_list_copy},
- { "reverse", test_list_reverse},
- { "remove", test_list_remove},
- { "remove_link", test_list_remove_link},
- { "remove_link", test_list_remove_link},
- { "sort", test_list_sort},
- { "find_custom", test_list_find_custom},
- {NULL, NULL}
- };
- DEFINE_TEST_GROUP_INIT(list_tests_init, list_tests)
|