You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by yl...@apache.org on 2015/03/14 00:46:58 UTC

svn commit: r1666611 - /apr/apr/trunk/test/testskiplist.c

Author: ylavic
Date: Fri Mar 13 23:46:58 2015
New Revision: 1666611

URL: http://svn.apache.org/r1666611
Log:
testskiplist: Add a test to show that comparek == compare is required for
apr_skiplist_remove() and apr_skiplist_find() to work.

It also shows that a single compare function can be used for add semantic
with apr_skiplist_insert() (and unique pointers).

Modified:
    apr/apr/trunk/test/testskiplist.c

Modified: apr/apr/trunk/test/testskiplist.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/test/testskiplist.c?rev=1666611&r1=1666610&r2=1666611&view=diff
==============================================================================
--- apr/apr/trunk/test/testskiplist.c (original)
+++ apr/apr/trunk/test/testskiplist.c Fri Mar 13 23:46:58 2015
@@ -241,8 +241,8 @@ static void skiplist_random_loop(abts_ca
 }
 
 typedef struct elem {
-    int a;
     int b;
+    int a;
 } elem;
 
 
@@ -262,16 +262,17 @@ static int comp(void *a, void *b){
     return *((int*) a) - *((int*) b);
 }
 
-static int compk(void *a, void *b){
-    return comp(a, b);
-}
-
 static int scomp(void *a, void *b){
     return ((elem*) a)->a - ((elem*) b)->a;
 }
 
-static int scompk(void *a, void *b){
-    return scomp(a, b);
+static int acomp(void *a, void *b){
+    if (a != b) {
+        return (scomp(a, b) < 0) ? -1 : 1;
+    }
+    else {
+        return 0;
+    }
 }
 
 static void skiplist_test(abts_case *tc, void *data) {
@@ -281,6 +282,7 @@ static void skiplist_test(abts_case *tc,
     elem *val2 = NULL;
     apr_skiplist * list = NULL;
     apr_skiplist * list2 = NULL;
+    apr_skiplist * list3 = NULL;
     int first_forty_two = 42,
         second_forty_two = 42;
     elem t1, t2, t3, t4, t5;
@@ -291,7 +293,7 @@ static void skiplist_test(abts_case *tc,
     t5.a = 142; t5.b = 1;
 
     ABTS_INT_EQUAL(tc, APR_SUCCESS, apr_skiplist_init(&list, ptmp));
-    apr_skiplist_set_compare(list, comp, compk);
+    apr_skiplist_set_compare(list, comp, comp);
     
     /* insert 10 objects */
     for (i = 0; i < test_elems; ++i){
@@ -346,7 +348,7 @@ static void skiplist_test(abts_case *tc,
     ABTS_INT_EQUAL(tc, *val, 142);
 
     ABTS_INT_EQUAL(tc, APR_SUCCESS, apr_skiplist_init(&list2, ptmp));
-    apr_skiplist_set_compare(list2, scomp, scompk);
+    apr_skiplist_set_compare(list2, scomp, scomp);
     add_elem_to_skiplist(list2, t2);
     add_elem_to_skiplist(list2, t1);
     add_elem_to_skiplist(list2, t3);
@@ -367,6 +369,20 @@ static void skiplist_test(abts_case *tc,
     ABTS_INT_EQUAL(tc, val2->a, 142);
     ABTS_INT_EQUAL(tc, val2->b, 1);
 
+    ABTS_INT_EQUAL(tc, APR_SUCCESS, apr_skiplist_init(&list3, ptmp));
+    apr_skiplist_set_compare(list3, acomp, acomp);
+    apr_skiplist_insert(list3, &t2);
+    val2 = apr_skiplist_find(list3, &t2, NULL);
+    ABTS_PTR_EQUAL(tc, &t2, val2);
+    apr_skiplist_insert(list3, &t3);
+    val2 = apr_skiplist_find(list3, &t3, NULL);
+    ABTS_PTR_EQUAL(tc, &t3, val2);
+    apr_skiplist_remove(list3, &t3, NULL);
+    val2 = apr_skiplist_find(list3, &t3, NULL);
+    ABTS_PTR_EQUAL(tc, NULL, val2);
+    apr_skiplist_remove(list3, &t2, NULL);
+    val2 = apr_skiplist_find(list3, &t2, NULL);
+    ABTS_PTR_EQUAL(tc, NULL, val2);
 
     apr_pool_clear(ptmp);
 }