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; } 根据以上代码不考虑算法的实现,仅根据排序的需求规约,使用等价类划分的方 法设计测试用例。要求明确给出等价类划分的思路以及具体划分方法,测试用例使用 gtest测试框架实现。
时间: 2024-04-26 13:20:00 浏览: 74
等价类划分:
1. 空数组:a.size()=0
2. 只有一个元素的数组:a.size()=1
3. 有多个元素的数组:a.size()>1
4. 数组中的元素已经有序:a为升序或降序排列
5. 数组中的元素无序:a为乱序排列
测试用例:
1. 空数组:
EXPECT_EQ(myquickSort(vector<int>{}), vector<int>{});
2. 只有一个元素的数组:
EXPECT_EQ(myquickSort(vector<int>{1}), vector<int>{1});
3. 有多个元素的数组:
(1)升序排列的数组:
EXPECT_EQ(myquickSort(vector<int>{1, 2, 3, 4, 5}), vector<int>{1, 2, 3, 4, 5});
(2)降序排列的数组:
EXPECT_EQ(myquickSort(vector<int>{5, 4, 3, 2, 1}), vector<int>{1, 2, 3, 4, 5});
(3)乱序排列的数组:
EXPECT_EQ(myquickSort(vector<int>{3, 5, 1, 4, 2}), vector<int>{1, 2, 3, 4, 5});
以上测试用例可以使用gtest框架实现。
相关问题
将以下代码根据根据排序的需求规约,使用等价类划分的方法设计测试用例。要求明确给出等价类划分的思路以及具体划分方法,包含有效等价类与无效等价类,测试用例使用 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; }
等价类划分的思路:
- 对于输入数组 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);
}
```
在上面的测试用例中,我们通过等价类划分的方法将所有可能的输入情况划分为几个等价类,并从每个等价类中选择一个或多个测试用例进行测试,以验证程序的正确性和健壮性。
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; } 根据以上代码不考虑算法的实现,仅根据排序的需求规约,使用等价类划分的方 法设计测试用例。要求明确给出等价类划分的思路以及具体划分方法,包含有效等价类和无效等价类,测试用例使用 gtest测试框架实现。
等价类划分:
1. 空数组:a.size()=0
2. 只有一个元素的数组:a.size()=1
3. 有多个元素的数组:a.size()>1
4. 数组中的元素已经有序:a为升序或降序排列
5. 数组中的元素无序:a为乱序排列
有效等价类测试用例:
1. 空数组:
EXPECT_EQ(myquickSort(vector<int>{}), vector<int>{});
2. 只有一个元素的数组:
EXPECT_EQ(myquickSort(vector<int>{1}), vector<int>{1});
3. 有多个元素的数组:
(1)升序排列的数组:
EXPECT_EQ(myquickSort(vector<int>{1, 2, 3, 4, 5}), vector<int>{1, 2, 3, 4, 5});
(2)降序排列的数组:
EXPECT_EQ(myquickSort(vector<int>{5, 4, 3, 2, 1}), vector<int>{1, 2, 3, 4, 5});
(3)乱序排列的数组:
EXPECT_EQ(myquickSort(vector<int>{3, 5, 1, 4, 2}), vector<int>{1, 2, 3, 4, 5});
无效等价类测试用例:
1. 无效数组:a包含非整数元素
EXPECT_DEATH(myquickSort(vector<int>{1, 2, 3, 4, 5, 1.5}), ".*");
2. 无效数组:a包含重复元素
EXPECT_DEATH(myquickSort(vector<int>{1, 2, 3, 4, 5, 5}), ".*");
以上测试用例可以使用gtest框架实现。
阅读全文