如何为我用 c 编写的队列代码制作测试用例?
How to make test case for my queue code written in c?
如何开发测试用例(运行 main 中所有函数的正确方式)?
阅读:由于某些原因我不能 post 我的代码在这里给我错误,所以我把图片放在下面,可以从下面的 link.
查看代码
我想看看 insert
和 remove
的使用,删除和插入以及打印 underflow
和 overflow
的测试用例。
例子; \
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;
}
如何开发测试用例(运行 main 中所有函数的正确方式)?
阅读:由于某些原因我不能 post 我的代码在这里给我错误,所以我把图片放在下面,可以从下面的 link.
查看代码我想看看 insert
和 remove
的使用,删除和插入以及打印 underflow
和 overflow
的测试用例。
例子; \
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;
}