如何为我用 c 编写的队列代码制作测试用例?

How to make test case for my queue code written in c?

如何开发测试用例(运行 main 中所有函数的正确方式)?

阅读:由于某些原因我不能 post 我的代码在这里给我错误,所以我把图片放在下面,可以从下面的 link.

查看代码

LINK IMAGE
LINK OF THE CODE

我想看看 insertremove 的使用,删除和插入以及打印 underflowoverflow 的测试用例。
例子; \

   insert("James") - inserts james \
   insert("Sarah") -> prints overflow \
   remove() - removes james \
   remove() - prints underflow \

谢谢。

insert中,你有:

if (q->rear = 5) {

这[无条件]5的值分配给q->rear

你想要一个比较:

if (q->rear == 5) {

注意remove是一个标准函数,所以编译时会发生冲突。

我已将 remove 重命名为 dequeue [并将 insert 重命名为 enqueue]。

使用循环可以生成测试代码(例如,您可以入队 and/or 出队 任意 次以生成边缘情况)。

此外,您这样做:#define MAXQUEUE 6 但到处都是“硬接线”5。我会将其替换为(例如):(MAXQUEUE - 1)

这是包含测试用例的更正代码:

#include <stdio.h>
#include <stdlib.h>

#define MAXQUEUE        6
#define LASTQUEUE       (MAXQUEUE - 1)

struct queue {
    char items[MAXQUEUE];
    int front, rear;
};

struct queue q;

int
empty(struct queue *q)
{
    int temp;

#if 0
    temp = (q->front == q->rear) ? 1 : 0;
#else
    temp = (q->front == q->rear);
#endif

    return temp;
}

char
dequeue(struct queue *q)
{

    if (empty(q)) {
        printf("undeflow");
        exit(1);
    }

#if 0
    if (q->front == 5) {
        q->front = 0;
    }
    else {
        (q->front)++;
    }
#else
    if (q->front == LASTQUEUE) {
        q->front = 0;
    }
    else {
        (q->front)++;
    }
#endif

    return (q->items[q->front]);
}

int
enqueue(struct queue *q, char x)
{

// NOTE/BUG: "q->rear = 5" _assigns_ 5 to q->rear (need == instead)
#if 0
    if (q->rear = 5) {
        q->rear = 0;
    }
    else {
        (q->rear)++;
    }
#else
    if (q->rear == LASTQUEUE) {
        q->rear = 0;
    }
    else {
        (q->rear)++;
    }
#endif

    if (q->rear == q->front) {
        printf("overflow");
        (q->rear)--;
        if (q->rear == -1) {
#if 0
            q->rear = 5;
#else
            q->rear = LASTQUEUE;
#endif
        }
        return 0;
    }

    q->items[q->rear] = x;

    return 0;
}

int
main()
{
    q.front = q.rear = MAXQUEUE - 1;

    int lim = LASTQUEUE;

    for (int idx = 0;  idx < lim;  ++idx)
        enqueue(&q,idx);

    for (int idx = 0;  idx < lim;  ++idx) {
        int val = dequeue(&q);
        printf("idx=%d val=%d\n",idx,val);
    }

    return 0;
}