Browse Source

rbtree: vary insert and delete orders in test

This covers more code than simply doing an ordered delete/insert.
Rusty Russell 15 years ago
parent
commit
6a13cea6a9
1 changed files with 22 additions and 10 deletions
  1. 22 10
      ccan/rbtree/test/run-many.c

+ 22 - 10
ccan/rbtree/test/run-many.c

@@ -24,20 +24,27 @@ static bool lookup_all(trbt_tree_t *rb, bool exist)
 	return true;
 	return true;
 }
 }
 
 
+static bool add_one(trbt_tree_t *rb, bool exist, unsigned int i)
+{
+	int *p = trbt_insert32(rb, i, talloc_memdup(rb, &i, sizeof(i)));
+	if (p) {
+		if (!exist)
+			return false;
+		if (*p != i)
+			return false;
+	} else
+		if (exist)
+			return false;
+	return true;
+}
+
 static bool insert_all(trbt_tree_t *rb, bool exist)
 static bool insert_all(trbt_tree_t *rb, bool exist)
 {
 {
 	unsigned int i;
 	unsigned int i;
 
 
 	for (i = 0; i < NUM_ELEMS; i++) {
 	for (i = 0; i < NUM_ELEMS; i++) {
-		int *p = trbt_insert32(rb, i, talloc_memdup(rb, &i, sizeof(i)));
-		if (p) {
-			if (!exist)
-				return false;
-			if (*p != i)
-				return false;
-		} else
-			if (exist)
-				return false;
+		if (!add_one(rb, exist, i))
+			return false;
 	}
 	}
 	return true;
 	return true;
 }
 }
@@ -46,7 +53,12 @@ static void delete_all(trbt_tree_t *rb)
 {
 {
 	unsigned int i;
 	unsigned int i;
 
 
-	for (i = 0; i < NUM_ELEMS; i++) {
+	/* Don't delete them in the obvious order. */
+	for (i = 0; i < NUM_ELEMS / 2; i++) {
+		trbt_delete32(rb, i);
+	}
+
+	for (i = NUM_ELEMS-1; i >= NUM_ELEMS / 2; i--) {
 		trbt_delete32(rb, i);
 		trbt_delete32(rb, i);
 	}
 	}
 }
 }