将以下代码根据根据排序的需求规约,使用等价类划分的方法设计测试用例。要求明确给出等价类划分的思路以及具体划分方法,包含有效等价类与无效等价类,测试用例使用 gtest测试框架实现: void qqsort(vector<int>& a, int left, int right) { if (left>= right) { return; } int p = left; int l = left; int r = right; while (l < r) { while (r > l && a[r] >= a[p]) { r--; } while (l < r && a[l] <= a[p]) { l++; } if (l < r) { swap(a[l], a[r]); } } swap(a[p], a[l]); p = l; qqsort(a, left, p - 1); qqsort(a, p + 1, right); } vector<int> myquickSort(vector<int>& a) { qqsort(a, 0, a.size() - 1); return a; }
时间: 2024-03-10 07:43:41 浏览: 92
等价类划分的思路:
- 对于输入数组 a,我们需要考虑以下等价类:
1. 有效的整数数组,包括正整数、负整数和零
2. 无效的整数数组,包括非整数数组和超出计算机可表示范围的整数数组
3. 空数组和只有一个元素的数组
- 对于左右边界 left 和 right,我们需要考虑以下等价类:
1. left 小于 right
2. left 等于 right
3. left 大于 right
根据上述等价类划分,我们可以设计以下测试用例:
```
TEST(QQSortTest, ValidArray) {
// 有效的整数数组
vector<int> a1 = {2, 5, 3, 1, 4};
vector<int> a2 = {-2, -5, -3, -1, -4};
vector<int> a3 = {0, 5, -3, 1, 0};
vector<int> a4 = {2147483647, -2147483647, 0};
// 测试有效的整数数组
EXPECT_EQ(myquickSort(a1), vector<int>({1, 2, 3, 4, 5}));
EXPECT_EQ(myquickSort(a2), vector<int>({-5, -4, -3, -2, -1}));
EXPECT_EQ(myquickSort(a3), vector<int>({-3, 0, 0, 1, 5}));
EXPECT_EQ(myquickSort(a4), vector<int>({-2147483647, 0, 2147483647}));
}
TEST(QQSortTest, InvalidArray) {
// 无效的整数数组
vector<int> a1 = {2, 5, 3.5, 1, 4};
vector<int> a2 = {2, 5, INT_MAX + 1, 1, 4};
// 测试无效的整数数组
EXPECT_THROW(myquickSort(a1), invalid_argument);
EXPECT_THROW(myquickSort(a2), invalid_argument);
}
TEST(QQSortTest, EdgeCases) {
// 空数组和只有一个元素的数组
vector<int> a1 = {};
vector<int> a2 = {1};
// 测试空数组和只有一个元素的数组
EXPECT_EQ(myquickSort(a1), vector<int>({}));
EXPECT_EQ(myquickSort(a2), vector<int>({1}));
}
TEST(QQSortTest, ValidLeftRight) {
// left 小于 right
vector<int> a1 = {2, 5, 3, 1, 4};
vector<int> a2 = {-2, -5, -3, -1, -4};
vector<int> a3 = {0, 5, -3, 1, 0};
// 测试 left 小于 right 的情况
EXPECT_EQ(myquickSort(a1), vector<int>({1, 2, 3, 4, 5}));
EXPECT_EQ(myquickSort(a2), vector<int>({-5, -4, -3, -2, -1}));
EXPECT_EQ(myquickSort(a3), vector<int>({-3, 0, 0, 1, 5}));
}
TEST(QQSortTest, ValidLeftRightEqual) {
// left 等于 right
vector<int> a1 = {2};
vector<int> a2 = {-2};
vector<int> a3 = {0};
// 测试 left 等于 right 的情况
EXPECT_EQ(myquickSort(a1), vector<int>({2}));
EXPECT_EQ(myquickSort(a2), vector<int>({-2}));
EXPECT_EQ(myquickSort(a3), vector<int>({0}));
}
TEST(QQSortTest, InvalidLeftRight) {
// left 大于 right
vector<int> a1 = {2, 5, 3, 1, 4};
// 测试 left 大于 right 的情况
EXPECT_THROW(myquickSort(a1, 3, 2), invalid_argument);
}
```
在上面的测试用例中,我们通过等价类划分的方法将所有可能的输入情况划分为几个等价类,并从每个等价类中选择一个或多个测试用例进行测试,以验证程序的正确性和健壮性。
阅读全文