about summary refs log tree commit diff
path: root/misc/tst-insremque.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-07-12 18:26:36 +0000
committerJakub Jelinek <jakub@redhat.com>2007-07-12 18:26:36 +0000
commit0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (patch)
tree2ea1f8305970753e4a657acb2ccc15ca3eec8e2c /misc/tst-insremque.c
parent7d58530341304d403a6626d7f7a1913165fe2f32 (diff)
downloadglibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.gz
glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.xz
glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.zip
2.5-18.1
Diffstat (limited to 'misc/tst-insremque.c')
-rw-r--r--misc/tst-insremque.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/misc/tst-insremque.c b/misc/tst-insremque.c
new file mode 100644
index 0000000000..9f17055ef5
--- /dev/null
+++ b/misc/tst-insremque.c
@@ -0,0 +1,61 @@
+#include <search.h>
+#include <stdio.h>
+#include <string.h>
+
+#define CHECK(cond) \
+  do									\
+    if (! (cond))							\
+      {									\
+	printf ("Condition " #cond " not true on line %d\n", __LINE__);	\
+	ret = 1;							\
+      }									\
+  while (0)
+
+static int
+do_test (void)
+{
+  struct qelem elements[4];
+  int ret = 0;
+
+  /* Linear list.  */
+  memset (elements, 0xff, sizeof (elements));
+  insque (&elements[0], NULL);
+  remque (&elements[0]);
+  insque (&elements[0], NULL);
+  insque (&elements[2], &elements[0]);
+  insque (&elements[1], &elements[0]);
+  insque (&elements[3], &elements[2]);
+  remque (&elements[2]);
+  insque (&elements[2], &elements[0]);
+  CHECK (elements[0].q_back == NULL);
+  CHECK (elements[0].q_forw == &elements[2]);
+  CHECK (elements[1].q_back == &elements[2]);
+  CHECK (elements[1].q_forw == &elements[3]);
+  CHECK (elements[2].q_back == &elements[0]);
+  CHECK (elements[2].q_forw == &elements[1]);
+  CHECK (elements[3].q_back == &elements[1]);
+  CHECK (elements[3].q_forw == NULL);
+
+  /* Circular list.  */
+  memset (elements, 0xff, sizeof (elements));
+  elements[0].q_back = &elements[0];
+  elements[0].q_forw = &elements[0];
+  insque (&elements[2], &elements[0]);
+  insque (&elements[1], &elements[0]);
+  insque (&elements[3], &elements[2]);
+  remque (&elements[2]);
+  insque (&elements[2], &elements[0]);
+  CHECK (elements[0].q_back == &elements[3]);
+  CHECK (elements[0].q_forw == &elements[2]);
+  CHECK (elements[1].q_back == &elements[2]);
+  CHECK (elements[1].q_forw == &elements[3]);
+  CHECK (elements[2].q_back == &elements[0]);
+  CHECK (elements[2].q_forw == &elements[1]);
+  CHECK (elements[3].q_back == &elements[1]);
+  CHECK (elements[3].q_forw == &elements[0]);
+
+  return ret;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"