Как создать тестовый пример для моего кода очереди, написанного на c?

#c #c #queue

#c #c #очередь

Вопрос:

как я могу разработать тестовый пример (правильно запустив все функции в main)?

ЧИТАЙТЕ: по некоторым причинам я не могу опубликовать свой код здесь, что приводит к ошибкам, поэтому я поместил изображение ниже, и код можно просмотреть по следующей ссылке.

ИЗОБРАЖЕНИЕ ССЫЛКИ
ССЫЛКА НА КОД

Я хочу увидеть использование insert и remove как удаление и вставка, а также тестовый пример для печати underflow и overflow .
Примеры;

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

Спасибо.

Комментарии:

1. Вы спрашиваете, как начать работу с TDD на C , или вы спрашиваете, как бы вы структурировали тестовый пример для вашей конкретной структуры данных?

2. Я хочу использовать функции, но не могу найти способ их запуска. Например, как вставлять и удалять имена, а также получать overflow и underflow печатать.

3. Связанный вами код фактически не вызывает ни одну из функций, в которые вы записали свои printf() вызовы, поэтому я не уверен, как вы ожидаете получить результат. Этот вопрос также не должен быть помечен C , если это вопрос C, но я отвлекся. Если вам нужен вывод из ваших функций, вызывайте их из main() .

4. Мне нужна помощь в написании main() функции для вызова функций и их запуска. Просто хочу посмотреть, как написать insert функцию.

Ответ №1:

В insert , у вас есть:

 if (q->rear = 5) {
 

Это [безоговорочно] присваивает значение 5 to 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(amp;q,idx);

    for (int idx = 0;  idx < lim;    idx) {
        int val = dequeue(amp;q);
        printf("idx=%d val=%dn",idx,val);
    }

    return 0;
}
 

Комментарии:

1. Спасибо за ответ, но 1 проблема. Я хочу поставить в очередь str, а не int.

2. Не уверен, что вы имеете в виду, когда хотите поставить str в очередь . Это потому items , что они индивидуальны char . Итак, максимум, у вас может быть одна «строка». Чтобы иметь список строк (например abc, def, hello, world, goodbye, galaxy ), необходимо написать немного больше кода. Если вы могли бы терпеть фиксированный максимум для длины (ов) строки, легко изменить функции struct и . Если вам нужны строки переменной длины, вам нужно будет выполнить strdup и [позже] free для строк.