【问题标题】:How to make test case for my queue code written in c?如何为我用 c 编写的队列代码制作测试用例?
【发布时间】:2020-12-18 00:25:13
【问题描述】:

如何开发测试用例(在 main 中正确运行所有功能)?

阅读:由于某些原因,我不能在这里发布我的代码给我错误,所以我把图片放在下面,代码可以从以下链接查看。

LINK IMAGE
LINK OF THE CODE

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

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

谢谢。

【问题讨论】:

  • 您是在问如何开始使用 C++ 中的 TDD,还是在问如何为您的特定数据结构构建测试用例?
  • 我正在寻找使用这些功能,但我找不到运行它们的方法。就像如何插入和删除名称以及获取 overflowunderflow 打印一样。
  • 您链接的代码实际上并没有调用您编写printf() 调用的任何函数,所以我不确定您希望如何获得输出。如果这是一个 C 问题,这个问题也不应该被标记为 C++,但我离题了。如果您想要函数的输出,请从main() 调用它们。
  • 我需要帮助编写main() 函数来调用函数并运行它们。只想看看insert函数怎么写。

标签: c++ c queue


【解决方案1】:

insert,你有:

if (q->rear = 5) {

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

你想要一个比较

if (q->rear == 5) {

请注意,remove 是标准函数,因此在编译时会发生冲突。

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

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

此外,您可以:#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;
}

【讨论】:

  • 感谢您的回答,但有 1 个问题。我想加入 str 而不是 int。
  • 不确定您所说的想要加入 str 是什么意思。那是因为items 是个人char。所以,你最多可以有 one “字符串”。要获得 字符串 列表(例如 abc, def, hello, world, goodbye, galaxy),需要编写更多代码。 如果您可以容忍字符串长度的固定最大值,那么更改struct 和函数很容易。如果您需要可变长度字符串,则必须为字符串执行 strdup 和 [稍后] free
猜你喜欢
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2013-02-24
相关资源
最近更新 更多