Skip to content

Корректность теста PopBadArgs #26

@Mako-D

Description

@Mako-D

В данном тесте предлагается сделать вложение в стек массива из 5 элементов

const size_t size = 5;
const int data_in[size] = {1};
stack_push(stack, &data_in, sizeof(data_in)); // В стеке [1,0,0,0,0]

После этого создаётся выходной массив, состоящий из 4-х элементов и идет обращение к стеку, чтобы получить данные

int data_out[size - 1] = {0};
stack_pop(stack, data_out, sizeof(data_out)); // ???

Тестирующая программа ожидает получить на выходе четыре 0,

EXPECT_THAT(data_out, ::testing::Each(0)); // Программа ожидает на выходе 0,0,0,0
// То есть программа ожидает, что мы начнем читать массив из стека "справа-налево" [1,0,0,0,0]<-
// Хотя добавлялись не элементы массива поочередно, а сразу весь массив
// То есть именно массив у нас является элементом стека

Но это значит, что программа ожидает поэлементного добавления массива в стек, что-то вроде

stack_push(stack, &data_in[0], sizeof(data_in[0]));
stack_push(stack, &data_in[1], sizeof(data_in[1]));
// ...
stack_push(stack, &data_in[4], sizeof(data_in[4]));

В ТЗ особых требований по работе с массивом элементов не было, но есть указание, что данные не типизированы. Разумно расценивать массив, как один элемент, который загружается в стек. Поскольку индексирование массива идёт с первого элемента, то разумно ожидать на выходе из стека [1,0,0,0], а не [0,0,0,0]

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions