Я пытался создать тестовый пример, где мои векторы слишком велики, чтобы их могла обработать моя функция, но моя проверка ввода не запускается при сравнении размера входного вектора с std :: vector
Я использую Bazel в качестве платформы для сборки и googletest в качестве моей тестовой среды.
Вот оператор проверки, используемый для определения вектора превышения размера:
std::vector<int> Solution::fit_sum(std::vector<int> v, int sum)
{
// input validation
if(v.empty() ||
v.size() > v.max_size() ||
v.size() < 0) // handle int overflow
{
printf("input invalid\n");
return {};
}
printf("v.size = %d\n", v.size());
printf("v.max_size() = %d\n", v.max_size());
// functional code below
}
Вот тестовый пример, который я создал :
TEST(FIT_SUM_TEST, TOO_LARGE) {
Solution solution;
std::vector<int> input;
for (int i = 0; i < input.max_size() + 1; i++)
{
input.push_back(i);
}
int sum = 1;
std::vector<int> actual = solution.fit_sum(input, sum);
std::vector<int> expected = {};
EXPECT_EQ(expected, actual);
}
Вывод выглядит следующим образом:
[ RUN ] FIT_SUM_TEST.TOO_LARGE
v.size = -2147483648
v.max_size() = -1
[ OK ] FIT_SUM_TEST.TOO_LARGE (46174 ms)
Я немного сбит с толку, потому что я не ввожу свою проверку ввода, если утверждение выполнено даже при соблюдении условий.
Кто-нибудь знает, что происходит?
Редактировать:
Я понимаю, что то, что я проверяю, в корне неверно, потому что любая программа, создающая слишком большой массив, будет ломать sh.
Полагаю, лучше задать вопрос: 1) Как правильно учесть векторы, которые слишком велики? 2) Как определить, насколько велик "слишком большой"? 3) Сама функция имеет время выполнения O (n ^ 2). Есть ли другая линия ограничений, которую я должен наложить на мои данные, учитывая эту сложность?