summaryrefslogtreecommitdiff
path: root/test/scr023/q.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/scr023/q.c')
-rw-r--r--test/scr023/q.c840
1 files changed, 0 insertions, 840 deletions
diff --git a/test/scr023/q.c b/test/scr023/q.c
deleted file mode 100644
index 4b4943d..0000000
--- a/test/scr023/q.c
+++ /dev/null
@@ -1,840 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 2002-2009 Oracle. All rights reserved.
- */
-
-#include <sys/types.h>
-#include <sys/time.h>
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "queue.h"
-#include "shqueue.h"
-
-typedef enum {
- FORWARD_WALK_FAILED = 1,
- FOREACH_WALK_FAILED,
- LIST_END_NOT_MARKED_FAILURE,
- PREV_WALK_FAILED,
- REVERSE_FOREACH_WALK_FAILED,
- EXPECTED_HEAD_FAILED
-} FAILURE_REASON;
-
-const char *failure_reason_names[] = {
- "",
- "walking the list using the _NEXT forward failed",
- "walking the list using the _FOREACH macro failed",
- "what was expected to be the last element wasn't marked as such",
- "walking the list using the _PREV macro failed",
- "walking the list using the _REVERSE_FOREACH macro failed",
- "expected to be at the head of the list"
-};
-
-SH_LIST_HEAD(sh_lq);
-struct sh_le {
- char content;
- SH_LIST_ENTRY sh_les;
-};
-
-/* create a string from the content of a list queue */
-char *
-sh_l_as_string(l)
- struct sh_lq *l;
-{
- static char buf[1024];
- struct sh_le *ele = SH_LIST_FIRST(l, sh_le);
- int i = 1;
-
- buf[0] = '"';
- while (ele != NULL) {
- buf[i] = ele->content;
- ele = SH_LIST_NEXT(ele, sh_les, sh_le);
- if (ele != NULL)
- buf[++i] = ' ';
- i++;
- }
- buf[i++] = '"';
- buf[i] = '\0';
- return buf;
-}
-
-/* init a list queue */
-struct sh_lq *
-sh_l_init(items)
- const char *items;
-{
- const char *c = items;
- struct sh_le *ele = NULL, *last_ele = (struct sh_le*)-1;
- struct sh_lq *l = calloc(1, sizeof(struct sh_lq));
-
- SH_LIST_INIT(l);
-
- while (*c != '\0') {
- if (c[0] != ' ') {
- last_ele = ele;
- ele = calloc(1, sizeof(struct sh_le));
- ele->content = c[0];
- if (SH_LIST_EMPTY(l))
- SH_LIST_INSERT_HEAD(l, ele, sh_les, sh_le);
- else
- SH_LIST_INSERT_AFTER(
- last_ele, ele, sh_les, sh_le);
- }
- c++;
- }
- return (l);
-}
-
-struct sh_lq *
-sh_l_remove_head(l)
- struct sh_lq *l;
-{
- struct sh_le *ele = SH_LIST_FIRST(l, sh_le);
-
- SH_LIST_REMOVE_HEAD(l, sh_les, sh_le);
- if (ele != NULL)
- free(ele);
-
- return (l);
-}
-
-struct sh_lq *
-sh_l_remove_tail(l)
- struct sh_lq *l;
-{
- struct sh_le *ele = SH_LIST_FIRST(l, sh_le);
-
- if (SH_LIST_EMPTY(l))
- return (l);
-
- while (SH_LIST_NEXT(ele, sh_les, sh_le) != NULL)
- ele = SH_LIST_NEXT(ele, sh_les, sh_le);
-
- if (ele) {
- SH_LIST_REMOVE(ele, sh_les, sh_le);
- free(ele);
- }
- return (l);
-}
-
-struct sh_lq *
-sh_l_remove_item(l, item)
- struct sh_lq *l;
- const char *item;
-{
- struct sh_le *ele = SH_LIST_FIRST(l, sh_le);
-
- while (ele != NULL) {
- if (ele->content == item[0])
- break;
- ele = SH_LIST_NEXT(ele, sh_les, sh_le);
- }
- if (ele)
- SH_LIST_REMOVE(ele, sh_les, sh_le);
- return (l);
-}
-
-struct sh_lq *
-sh_l_insert_head(l, item)
- struct sh_lq *l;
- const char *item;
-{
- struct sh_le *ele = calloc(1, sizeof(struct sh_le));
-
- ele->content = item[0];
- SH_LIST_INSERT_HEAD(l, ele, sh_les, sh_le);
-
- return (l);
-}
-
-struct sh_lq *
-sh_l_insert_tail(l, item)
- struct sh_lq *l;
- const char *item;
-{
- struct sh_le *ele = NULL;
- struct sh_le *last_ele = SH_LIST_FIRST(l, sh_le);
-
- if (last_ele != NULL)
- while (SH_LIST_NEXT(last_ele, sh_les, sh_le) != NULL)
- last_ele = SH_LIST_NEXT(last_ele, sh_les, sh_le);
-
- if (last_ele == NULL) {
- ele = calloc(1, sizeof(struct sh_le));
- ele->content = item[0];
- SH_LIST_INSERT_HEAD(l, ele, sh_les, sh_le);
- } else {
- ele = calloc(1, sizeof(struct sh_le));
- ele->content = item[0];
- SH_LIST_INSERT_AFTER(last_ele, ele, sh_les, sh_le);
- }
-
- return (l);
-}
-
-struct sh_lq *
-sh_l_insert_before(l, item, before_item)
- struct sh_lq *l;
- const char *item;
- const char *before_item;
-{
- struct sh_le *ele = NULL;
- struct sh_le *before_ele = SH_LIST_FIRST(l, sh_le);
-
- while (before_ele != NULL) {
- if (before_ele->content == before_item[0])
- break;
- before_ele = SH_LIST_NEXT(before_ele, sh_les, sh_le);
- }
- if (before_ele != NULL) {
- ele = calloc(1, sizeof(struct sh_le));
- ele->content = item[0];
- SH_LIST_INSERT_BEFORE(l, before_ele, ele, sh_les, sh_le);
- }
- return (l);
-}
-
-struct sh_lq *
-sh_l_insert_after(l, item, after_item)
- struct sh_lq *l;
- const char *item;
- const char *after_item;
-{
- struct sh_le *ele = NULL;
- struct sh_le *after_ele = SH_LIST_FIRST(l, sh_le);
-
- while (after_ele != NULL) {
- if (after_ele->content == after_item[0])
- break;
- after_ele = SH_LIST_NEXT(after_ele, sh_les, sh_le);
- }
- if (after_ele != NULL) {
- ele = calloc(1, sizeof(struct sh_le));
- ele->content = item[0];
- SH_LIST_INSERT_AFTER(after_ele, ele, sh_les, sh_le);
- }
- return (l);
-}
-
-void
-sh_l_discard(l)
- struct sh_lq *l;
-{
- struct sh_le *ele = NULL;
-
- while ((ele = SH_LIST_FIRST(l, sh_le)) != NULL) {
- SH_LIST_REMOVE(ele, sh_les, sh_le);
- free(ele);
- }
-
- free(l);
-}
-
-int
-sh_l_verify(l, items)
- struct sh_lq *l;
- const char *items;
-{
- const char *c = items;
- struct sh_le *ele = NULL, *lele = NULL;
- int i = 0, nele = 0;
-
- while (*c != '\0') {
- if (c[0] != ' ')
- nele++;
- c++;
- }
-
- /* use the FOREACH macro to walk the list */
- c = items;
- i = 0;
- SH_LIST_FOREACH(ele, l, sh_les, sh_le) {
- if (ele->content != c[0])
- return (FOREACH_WALK_FAILED);
- i++;
- c +=2;
- }
- if (i != nele)
- return (FOREACH_WALK_FAILED);
- i = 0;
- if (items[0] != '\0') {
- /* walk the list forward */
- c = items;
- ele = SH_LIST_FIRST(l, sh_le);
- while (*c != '\0') {
- lele = ele;
- if (c[0] != ' ') {
- if (ele->content != c[0])
- return (FORWARD_WALK_FAILED);
- i++;
- ele = SH_LIST_NEXT(ele, sh_les, sh_le);
- }
- c++;
- }
- ele = lele;
-
- if (i != nele)
- return (FOREACH_WALK_FAILED);
-
- /* ele should be the last element in the list... */
- /* ... so sle_next should be -1 */
- if (ele->sh_les.sle_next != -1)
- return (LIST_END_NOT_MARKED_FAILURE);
-
- /* and NEXT needs to be NULL */
- if (SH_LIST_NEXT(ele, sh_les, sh_le) != NULL)
- return (LIST_END_NOT_MARKED_FAILURE);
-
- /*
- * walk the list backwards using PREV macro, first move c
- * back a bit
- */
- c--;
- i = 0;
- while (c >= items) {
- if (c[0] != ' ') {
- lele = ele;
- if (ele->content != c[0])
- return (PREV_WALK_FAILED);
- ele = SH_LIST_PREV(ele, sh_les, sh_le);
- i++;
- }
- c--;
- }
- ele = lele;
-
- if (i != nele)
- return (PREV_WALK_FAILED);
-
- if (ele != SH_LIST_FIRST(l, sh_le))
- return (EXPECTED_HEAD_FAILED);
- }
- return (0);
-}
-
-SH_TAILQ_HEAD(sh_tq);
-struct sh_te {
- char content;
- SH_TAILQ_ENTRY sh_tes;
-};
-
-/* create a string from the content of a list queue */
-char *
-sh_t_as_string(l)
- struct sh_tq *l;
-{
- static char buf[1024];
- struct sh_te *ele = SH_TAILQ_FIRST(l, sh_te);
- int i = 1;
-
- buf[0] = '"';
- while (ele != NULL) {
- buf[i] = ele->content;
- ele = SH_TAILQ_NEXT(ele, sh_tes, sh_te);
- if (ele != NULL)
- buf[++i] = ' ';
- i++;
- }
- buf[i++] = '"';
- buf[i] = '\0';
- return (buf);
-}
-
-/* init a tail queue */
-struct sh_tq *
-sh_t_init(items)
- const char *items;
-{
- const char *c = items;
- struct sh_te *ele = NULL, *last_ele = (struct sh_te*)-1;
- struct sh_tq *l = calloc(1, sizeof(struct sh_tq));
-
- SH_TAILQ_INIT(l);
-
- while (*c != '\0') {
- if (c[0] != ' ') {
- ele = calloc(1, sizeof(struct sh_te));
- ele->content = c[0];
-
- if (SH_TAILQ_EMPTY(l))
- SH_TAILQ_INSERT_HEAD(l, ele, sh_tes, sh_te);
- else
- SH_TAILQ_INSERT_AFTER(
- l, last_ele, ele, sh_tes, sh_te);
- last_ele = ele;
- }
- c++;
- }
- return (l);
-}
-
-struct sh_tq *
-sh_t_remove_head(l)
- struct sh_tq *l;
-{
- struct sh_te *ele = SH_TAILQ_FIRST(l, sh_te);
-
- if (ele != NULL)
- SH_TAILQ_REMOVE(l, ele, sh_tes, sh_te);
-
- free(ele);
-
- return (l);
-}
-
-struct sh_tq *
-sh_t_remove_tail(l)
- struct sh_tq *l;
-{
- struct sh_te *ele = SH_TAILQ_FIRST(l, sh_te);
-
- if (SH_TAILQ_EMPTY(l))
- return (l);
-
- while (SH_TAILQ_NEXT(ele, sh_tes, sh_te) != NULL)
- ele = SH_TAILQ_NEXT(ele, sh_tes, sh_te);
-
- if (ele != NULL) {
- SH_TAILQ_REMOVE(l, ele, sh_tes, sh_te);
- free(ele);
- }
-
- return (l);
-}
-
-struct sh_tq *
-sh_t_remove_item(l, item)
- struct sh_tq *l;
- const char *item;
-{
- struct sh_te *ele = SH_TAILQ_FIRST(l, sh_te);
-
- while (ele != NULL) {
- if (ele->content == item[0])
- break;
- ele = SH_TAILQ_NEXT(ele, sh_tes, sh_te);
- }
- if (ele != NULL)
- SH_TAILQ_REMOVE(l, ele, sh_tes, sh_te);
-
- return (l);
-}
-
-struct sh_tq *
-sh_t_insert_head(l, item)
- struct sh_tq *l;
- const char *item;
-{
- struct sh_te *ele = calloc(1, sizeof(struct sh_te));
-
- ele->content = item[0];
- SH_TAILQ_INSERT_HEAD(l, ele, sh_tes, sh_te);
-
- return (l);
-}
-
-struct sh_tq *
-sh_t_insert_tail(l, item)
- struct sh_tq *l;
- const char *item;
-{
- struct sh_te *ele = 0;
- ele = calloc(1, sizeof(struct sh_te));
- ele->content = item[0];
- SH_TAILQ_INSERT_TAIL(l, ele, sh_tes);
- return l;
-}
-
-struct sh_tq *
-sh_t_insert_before(l, item, before_item)
- struct sh_tq *l;
- const char *item;
- const char *before_item;
-{
- struct sh_te *ele = NULL;
- struct sh_te *before_ele = SH_TAILQ_FIRST(l, sh_te);
-
- while (before_ele != NULL) {
- if (before_ele->content == before_item[0])
- break;
- before_ele = SH_TAILQ_NEXT(before_ele, sh_tes, sh_te);
- }
-
- if (before_ele != NULL) {
- ele = calloc(1, sizeof(struct sh_te));
- ele->content = item[0];
- SH_TAILQ_INSERT_BEFORE(l, before_ele, ele, sh_tes, sh_te);
- }
-
- return (l);
-}
-
-struct sh_tq *
-sh_t_insert_after(l, item, after_item)
- struct sh_tq *l;
- const char *item;
- const char *after_item;
-{
- struct sh_te *ele = NULL;
- struct sh_te *after_ele = SH_TAILQ_FIRST(l, sh_te);
-
- while (after_ele != NULL) {
- if (after_ele->content == after_item[0])
- break;
- after_ele = SH_TAILQ_NEXT(after_ele, sh_tes, sh_te);
- }
-
- if (after_ele != NULL) {
- ele = calloc(1, sizeof(struct sh_te));
- ele->content = item[0];
- SH_TAILQ_INSERT_AFTER(l, after_ele, ele, sh_tes, sh_te);
- }
-
- return (l);
-}
-
-void
-sh_t_discard(l)
- struct sh_tq *l;
-{
- struct sh_te *ele = NULL;
-
- while ((ele = SH_TAILQ_FIRST(l, sh_te)) != NULL) {
- SH_TAILQ_REMOVE(l, ele, sh_tes, sh_te);
- free(ele);
- }
- free(l);
-}
-
-int
-sh_t_verify(l, items)
- struct sh_tq *l;
- const char *items;
-{
- const char *c = items, *b = NULL;
- struct sh_te *ele = NULL, *lele = NULL;
- int i = 0, nele = 0;
-
- while (*c != '\0') {
- if (c[0] != ' ')
- nele++;
- c++;
- }
-
- /* use the FOREACH macro to walk the list */
- c = items;
- i = 0;
- SH_TAILQ_FOREACH(ele, l, sh_tes, sh_te) {
- if (ele->content != c[0])
- return (FOREACH_WALK_FAILED);
- i++;
- c +=2;
- }
- if (i != nele)
- return (FOREACH_WALK_FAILED);
- i = 0;
- if (items[0] != '\0') {
- /* walk the list forward */
- c = items;
- ele = SH_TAILQ_FIRST(l, sh_te);
- while (*c != '\0') {
- lele = ele;
- if (c[0] != ' ') {
- if (ele->content != c[0])
- return (FORWARD_WALK_FAILED);
- i++;
- ele = SH_TAILQ_NEXT(ele, sh_tes, sh_te);
- }
- c++;
- }
-
- if (i != nele)
- return (FOREACH_WALK_FAILED);
-
- if (lele != SH_TAILQ_LAST(l, sh_tes, sh_te))
- return (LIST_END_NOT_MARKED_FAILURE);
- ele = lele;
-
- /* ele should be the last element in the list... */
- /* ... so sle_next should be -1 */
- if (ele->sh_tes.stqe_next != -1)
- return (LIST_END_NOT_MARKED_FAILURE);
-
- /* and NEXT needs to be NULL */
- if (SH_TAILQ_NEXT(ele, sh_tes, sh_te) != NULL)
- return (LIST_END_NOT_MARKED_FAILURE);
-
- /* walk the list backwards using SH_LIST_PREV macro */
- c--;
- b = c;
- i = 0;
- while (c >= items) {
- if (c[0] != ' ') {
- lele = ele;
- if (ele->content != c[0])
- return (PREV_WALK_FAILED);
- ele = SH_TAILQ_PREV(l, ele, sh_tes, sh_te);
- i++;
- }
- c--;
- }
- ele = lele;
-
- if (i != nele)
- return (PREV_WALK_FAILED);
-
- if (ele != SH_TAILQ_FIRST(l, sh_te))
- return (-1);
-
- /* c should be the last character in the array, walk backwards
- from here using FOREACH_REVERSE and check the values again */
- c = b;
- i = 0;
- ele = SH_TAILQ_LAST(l, sh_tes, sh_te);
- SH_TAILQ_FOREACH_REVERSE(ele, l, sh_tes, sh_te) {
- if (ele->content != c[0])
- return (REVERSE_FOREACH_WALK_FAILED);
- i++;
- c -=2;
- }
- if (i != nele)
- return (REVERSE_FOREACH_WALK_FAILED);
- }
- return (0);
-}
-
-int
-sh_t_verify_TAILQ_LAST(l, items)
- struct sh_tq *l;
- const char *items;
-{
- const char *c = items;
- struct sh_te *ele = NULL;
-
- c = items;
- while (*c != '\0') {
- c++;
- }
- if (c == items) {
- /* items is empty, so last should be NULL */
- if (SH_TAILQ_LAST(l, sh_tes, sh_te) != NULL)
- return (-1);
- } else {
- c--;
- ele = SH_TAILQ_LAST(l, sh_tes, sh_te);
- if (ele->content != c[0])
- return (-1);
- }
- return (0);
-}
-
-typedef void *qds_t;
-struct {
- const char *name;
- qds_t *(*f_init)(const char *);
- qds_t *(*f_remove_head)(qds_t *);
- qds_t *(*f_remove_tail)(qds_t *);
- qds_t *(*f_remove_item)(qds_t *, const char *);
- qds_t *(*f_insert_head)(qds_t *, const char *);
- qds_t *(*f_insert_tail)(qds_t *, const char *);
- qds_t *(*f_insert_before)(qds_t *, const char *, const char *);
- qds_t *(*f_insert_after)(qds_t *, const char *, const char *);
- qds_t *(*f_discard)(qds_t *);
- char *(*f_as_string)(qds_t *);
- int (*f_verify)(qds_t *, const char *);
-} qfns[]= {
-{ "sh_list",
- (qds_t*(*)(const char *))sh_l_init,
- (qds_t*(*)(qds_t *))sh_l_remove_head,
- (qds_t*(*)(qds_t *))sh_l_remove_tail,
- (qds_t*(*)(qds_t *, const char *))sh_l_remove_item,
- (qds_t*(*)(qds_t *, const char *))sh_l_insert_head,
- (qds_t*(*)(qds_t *, const char *))sh_l_insert_tail,
- (qds_t*(*)(qds_t *, const char *, const char *))sh_l_insert_before,
- (qds_t*(*)(qds_t *, const char *, const char *))sh_l_insert_after,
- (qds_t*(*)(qds_t *))sh_l_discard,
- (char *(*)(qds_t *))sh_l_as_string,
- (int(*)(qds_t *, const char *))sh_l_verify },
-{ "sh_tailq",
- (qds_t*(*)(const char *))sh_t_init,
- (qds_t*(*)(qds_t *))sh_t_remove_head,
- (qds_t*(*)(qds_t *))sh_t_remove_tail,
- (qds_t*(*)(qds_t *, const char *))sh_t_remove_item,
- (qds_t*(*)(qds_t *, const char *))sh_t_insert_head,
- (qds_t*(*)(qds_t *, const char *))sh_t_insert_tail,
- (qds_t*(*)(qds_t *, const char *, const char *))sh_t_insert_before,
- (qds_t*(*)(qds_t *, const char *, const char *))sh_t_insert_after,
- (qds_t*(*)(qds_t *))sh_t_discard,
- (char *(*)(qds_t *))sh_t_as_string,
- (int(*)(qds_t *, const char *))sh_t_verify }
-};
-
-typedef enum {
- INSERT_BEFORE,
- INSERT_AFTER,
- INSERT_HEAD,
- INSERT_TAIL,
- REMOVE_HEAD,
- REMOVE_ITEM,
- REMOVE_TAIL,
-} OP;
-
-const char *op_names[] = {
- "INSERT_BEFORE",
- "INSERT_AFTER",
- "INSERT_HEAD",
- "INSERT_TAIL",
- "REMOVE_HEAD",
- "REMOVE_ITEM",
- "REMOVE_TAIL" };
-
-struct {
- char *init; /* initial state. */
- char *final; /* final state. */
- char *elem; /* element to operate on */
- char *insert; /* element to insert */
- OP op; /* operation. */
-} ops[] = {
-
- /* most operations on a empty list */
- { "", "", NULL, NULL, REMOVE_HEAD },
- { "", "", NULL, NULL, REMOVE_TAIL },
- { "", "A", NULL, "A", INSERT_HEAD },
- { "", "A", NULL, "A", INSERT_TAIL },
-
- /* all operations on a one element list */
- { "A", "", NULL, NULL, REMOVE_HEAD },
- { "A", "", NULL, NULL, REMOVE_TAIL },
- { "A", "", "A", NULL, REMOVE_ITEM },
- { "B", "A B", NULL, "A", INSERT_HEAD },
- { "A", "A B", NULL, "B", INSERT_TAIL },
- { "B", "A B", "B", "A", INSERT_BEFORE },
- { "A", "A B", "A", "B", INSERT_AFTER },
-
- /* all operations on a two element list */
- { "A B", "B", NULL, NULL, REMOVE_HEAD },
- { "A B", "A", NULL, NULL, REMOVE_TAIL },
- { "A B", "A", "B", NULL, REMOVE_ITEM },
- { "A B", "B", "A", NULL, REMOVE_ITEM },
- { "B C", "A B C", NULL, "A", INSERT_HEAD },
- { "A B", "A B C", NULL, "C", INSERT_TAIL },
- { "B C", "A B C", "B", "A", INSERT_BEFORE },
- { "A C", "A B C", "C", "B", INSERT_BEFORE },
- { "A C", "A B C", "A", "B", INSERT_AFTER },
- { "A C", "A C B", "C", "B", INSERT_AFTER },
-
- /* all operations on a three element list */
-
- { "A B C", "B C", NULL, NULL, REMOVE_HEAD },
- { "A B C", "A B", NULL, NULL, REMOVE_TAIL },
- { "A B C", "A B", "C", NULL, REMOVE_ITEM },
- { "A B C", "A C", "B", NULL, REMOVE_ITEM },
- { "A B C", "B C", "A", NULL, REMOVE_ITEM },
- { "B C D", "A B C D", NULL, "A", INSERT_HEAD },
- { "A B C", "A B C D", NULL, "D", INSERT_TAIL },
- { "A B C", "X A B C", "A", "X", INSERT_BEFORE },
- { "A B C", "A X B C", "B", "X", INSERT_BEFORE },
- { "A B C", "A B X C", "C", "X", INSERT_BEFORE },
- { "A B C", "A X B C", "A", "X", INSERT_AFTER },
- { "A B C", "A B X C", "B", "X", INSERT_AFTER },
- { "A B C", "A B C X", "C", "X", INSERT_AFTER },
-};
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- void *list;
- int fc, tc; /* tc is total count, fc is failed count */
- int eval, i, t, result;
-
- eval = 0;
- for (t = 0; t < sizeof(qfns) / sizeof(qfns[0]); ++t) {
- fc = tc = 0;
- printf("TESTING: %s\n", qfns[t].name);
-
- for (i = 0; i < sizeof(ops) / sizeof(ops[0]); i++) {
- list = qfns[t].f_init(ops[i].init);
- result = qfns[t].f_verify(list, ops[i].init);
- if (result == 0) {
- fc++;
- putchar('.');
- } else {
- putchar('+'); /* + means failed before op */
- printf("\nVerify failed: %s\n",
- failure_reason_names[result]);
- eval = 1;
- }
- if (!strcmp("sh_tailq", qfns[t].name)) {
- result =
- sh_t_verify_TAILQ_LAST(list, ops[i].init);
- }
-#ifdef VERBOSE
- printf("\ncase %d %s in %s init: \"%s\" desired: \"%s\" elem: \"%s\" insert: \"%s\"\n",
- i, op_names[ops[i].op], qfns[t].name,
- ops[i].init, ops[i].final,
- ops[i].elem, ops[i].insert);
- fflush(stdout);
-#endif
- tc++;
- switch (ops[i].op) {
- case REMOVE_HEAD:
- qfns[t].f_remove_head(list);
- break;
- case REMOVE_TAIL:
- qfns[t].f_remove_tail(list);
- break;
- case REMOVE_ITEM:
- qfns[t].f_remove_item(list, ops[i].elem);
- break;
- case INSERT_HEAD:
- qfns[t].f_insert_head(list, ops[i].insert);
- break;
- case INSERT_TAIL:
- qfns[t].f_insert_tail(list, ops[i].insert);
- break;
- case INSERT_BEFORE:
- qfns[t].f_insert_before(
- list, ops[i].insert, ops[i].elem);
- break;
- case INSERT_AFTER:
- qfns[t].f_insert_after(
- list, ops[i].insert, ops[i].elem);
- break;
- }
- if (!strcmp("sh_tailq", op_names[ops[i].op])) {
- result = sh_t_verify_TAILQ_LAST(list,
- ops[i].final);
- }
- if (result == 0)
- result = qfns[t].f_verify(list, ops[i].final);
- if (result == 0) {
- fc++;
- putchar('.');
- } else {
- putchar('*'); /* * means failed after op */
- printf("\ncase %d %s in %s init: \"%s\" desired: \"%s\" elem: \"%s\" insert: \"%s\" got: %s - %s\n",
- i, op_names[ops[i].op], qfns[t].name,
- ops[i].init, ops[i].final,
- ops[i].elem, ops[i].insert,
- qfns[t].f_as_string(list),
- failure_reason_names[result]);
- fflush(stdout);
- eval = 1;
- }
-
- tc++;
- qfns[t].f_discard(list);
- }
-
- printf("\t%0.2f%% passed (%d/%d).\n",
- (((double)fc/tc) * 100), fc, tc);
- }
- return (eval);
-}