googletest:测试太大的数据结构

问题描述 投票:0回答:1

我一直在尝试创建一个测试用例,其中向量太大而无法由函数处理,但是将输入向量的大小与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)。鉴于这种复杂性,我应该对输入内容施加不同的限制吗?

c++ googletest bazel
1个回答
0
投票

您的测试成功完成,因为您看到以下行:

© www.soinside.com 2019 - 2024. All rights reserved.