我一直在尝试创建一个测试用例,其中向量太大而无法由函数处理,但是将输入向量的大小与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)
我有点困惑,因为即使满足条件,我也不会输入输入验证if语句。
有人知道发生了什么吗?
编辑:
我意识到我正在测试的内容从根本上来说是有缺陷的,因为任何构建太大数组的程序都会崩溃。
我想更好的质疑是:1)如何正确计算过大的向量?2)如何确定“太大”的大小?3)函数本身的运行时间为O(n ^ 2)。鉴于这种复杂性,我应该对输入内容施加不同的限制吗?
您的测试成功完成,因为您看到以下行: