Add new System.Json assembly sources based on http://aspnetwebstack.codeplex.com/
[mono.git] / eglib / test / slist.c
index aa1bf6bd4b81e0dc7a7471df1761dcee618e96b5..3f8360ecae9536cc9f3749543a442693071f3afa 100644 (file)
@@ -3,6 +3,66 @@
 #include <glib.h>
 #include "test.h"
 
+
+RESULT
+test_slist_nth ()
+{
+       char *foo = "foo";
+       char *bar = "bar";
+       char *baz = "baz";
+       GSList *nth, *list;
+       list = g_slist_prepend (NULL, baz);
+       list = g_slist_prepend (list, bar);
+       list = g_slist_prepend (list, foo);
+
+       nth = g_slist_nth (list, 0);
+       if (nth->data != foo)
+               return FAILED ("nth failed. #0");
+
+       nth = g_slist_nth (list, 1);
+       if (nth->data != bar)
+               return FAILED ("nth failed. #1");
+       
+       nth = g_slist_nth (list, 2);
+       if (nth->data != baz)
+               return FAILED ("nth failed. #2");
+
+       nth = g_slist_nth (list, 3);
+       if (nth)
+               return FAILED ("nth failed. #3: %s", nth->data);
+
+       g_slist_free (list);
+       return OK;
+}
+
+RESULT
+test_slist_index ()
+{
+       int i;
+       char *foo = "foo";
+       char *bar = "bar";
+       char *baz = "baz";
+       GSList *list;
+       list = g_slist_prepend (NULL, baz);
+       list = g_slist_prepend (list, bar);
+       list = g_slist_prepend (list, foo);
+
+       i = g_slist_index (list, foo);
+       if (i != 0)
+               return FAILED ("index failed. #0: %d", i);
+
+       i = g_slist_index (list, bar);
+       if (i != 1)
+               return FAILED ("index failed. #1: %d", i);
+       
+       i = g_slist_index (list, baz);
+       if (i != 2)
+               return FAILED ("index failed. #2: %d", i);
+
+       g_slist_free (list);
+       return OK;
+}
+
 RESULT
 test_slist_append ()
 {
@@ -59,6 +119,34 @@ test_slist_find ()
        return OK;
 }
 
+static gint
+find_custom (gconstpointer a, gconstpointer b)
+{
+       return(strcmp (a, b));
+}
+
+RESULT
+test_slist_find_custom ()
+{
+       GSList *list = NULL, *found;
+       char *foo = "foo";
+       char *bar = "bar";
+       char *baz = "baz";
+       
+       list = g_slist_prepend (list, baz);
+       list = g_slist_prepend (list, bar);
+       list = g_slist_prepend (list, foo);
+       
+       found = g_slist_find_custom (list, baz, find_custom);
+       
+       if (found == NULL)
+               return FAILED ("Find failed");
+       
+       g_slist_free (list);
+       
+       return OK;
+}
+
 RESULT
 test_slist_remove ()
 {
@@ -191,7 +279,7 @@ static gboolean verify_sort (GSList *list, int len)
 RESULT
 test_slist_sort ()
 {
-       int i = 0;
+       int i, j, mul;
        GSList *list = NULL;
 
        for (i = 0; i < N_ELEMS; ++i)
@@ -222,13 +310,29 @@ test_slist_sort ()
 
        g_slist_free (list);
 
+       list = NULL;
+       mul = 1;
+       for (i = 1; i < N_ELEMS; ++i) {
+               mul = -mul;
+               for (j = 0; j < i; ++j)
+                       list = g_slist_prepend (list, GINT_TO_POINTER (mul * j));
+       }
+       list = g_slist_sort (list, intcompare);
+       if (!verify_sort (list, (N_ELEMS*N_ELEMS - N_ELEMS)/2))
+               return FAILED ("wavering list");
+
+       g_slist_free (list);
+
        return OK;
 }
 
 static Test slist_tests [] = {
+       {"nth", test_slist_nth},
+       {"index", test_slist_index},
        {"append", test_slist_append},
        {"concat", test_slist_concat},
        {"find", test_slist_find},
+       {"find_custom", test_slist_find_custom},
        {"remove", test_slist_remove},
        {"remove_link", test_slist_remove_link},
        {"insert_sorted", test_slist_insert_sorted},