* balance the left/right search for getitem.
* use assertions instead of tests after internal calls that can't fail.
* expand test coverage
diff --git a/Modules/collectionsmodule.c b/Modules/collectionsmodule.c
index da276ce..367b444 100644
--- a/Modules/collectionsmodule.c
+++ b/Modules/collectionsmodule.c
@@ -245,7 +245,7 @@
 		deque->leftblock->data[deque->leftindex] = item;
 	}
 	Py_DECREF(it);
-	if (PyErr_Occurred()) 
+	if (PyErr_Occurred())
 		return NULL;
 	Py_RETURN_NONE;
 }
@@ -274,8 +274,7 @@
 
 	for (i=0 ; i<n ; i++) {
 		item = deque_pop(deque, NULL);
-		if (item == NULL)
-			return NULL;
+		assert (item != NULL);
 		rv = deque_appendleft(deque, item);
 		Py_DECREF(item);
 		if (rv == NULL)
@@ -284,8 +283,7 @@
 	}
 	for (i=0 ; i>n ; i--) {
 		item = deque_popleft(deque, NULL);
-		if (item == NULL)
-			return NULL;
+		assert (item != NULL);
 		rv = deque_append(deque, item);
 		Py_DECREF(item);
 		if (rv == NULL)
@@ -311,8 +309,7 @@
 
 	while (deque_len(deque)) {
 		item = deque_pop(deque, NULL);
-		if (item == NULL)
-			return -1;
+		assert (item != NULL);
 		Py_DECREF(item);
 	}
 	assert(deque->leftblock == deque->rightblock &&
@@ -388,8 +385,7 @@
 	Py_DECREF(item);
 
 	item = deque_popleft(deque, NULL);
-	if (item == NULL) 
-		goto fail;
+	assert (item != NULL);
 	Py_DECREF(item);
 
 	item = deque_rotate(deque, plus_i);
@@ -409,9 +405,9 @@
 {
 	PyObject *old_value;
 	block *b;
-	int n;
+	int n, len=deque->len, halflen=(len+1)>>1, index=i;
 
-	if (i < 0 || i >= deque->len) {
+	if (i < 0 || i >= len) {
 		PyErr_SetString(PyExc_IndexError,
 				"deque index out of range");
 		return -1;
@@ -422,12 +418,12 @@
 	i += deque->leftindex;
 	n = i / BLOCKLEN;
 	i %= BLOCKLEN;
-	if (i < (deque->len >> 1)) {
+	if (index <= halflen) {
 		b = deque->leftblock;
 		while (n--)
 			b = b->rightlink;
 	} else {
-		n = (deque->leftindex + deque->len - 1) / BLOCKLEN - n;
+		n = (deque->leftindex + len - 1) / BLOCKLEN - n;
 		b = deque->rightblock;
 		while (n--)
 			b = b->leftlink;
@@ -442,8 +438,10 @@
 static PyObject *
 deque_clearmethod(dequeobject *deque)
 {
-	if (deque_clear(deque) == -1)
-		return NULL;
+	int rv;
+
+	rv = deque_clear(deque);
+	assert (rv != -1);
 	Py_RETURN_NONE;
 }