diff --git a/L2023111068_9_Test.java b/L2023111068_9_Test.java new file mode 100644 index 00000000..1941287b --- /dev/null +++ b/L2023111068_9_Test.java @@ -0,0 +1,159 @@ +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * 测试类设计总体原则: + * 1. 等价类划分:将输入数据划分为有效等价类和无效等价类。 + * 2. 边界值分析:对输入空间的边界进行重点测试。 + * 3. 覆盖主要逻辑路径:确保测试用例覆盖程序的所有关键判断和循环。 + */ +public class L2024123456_9_Test { // 请将2024123456替换为你的真实学号 + + /** + * 测试目的:验证正常情况下的二分图分组功能。 + * 测试用例:输入n=4, dislikes=[[1,2],[1,3],[2,4]],期望输出true。 + * 等价类:有效输入,可以成功二分的情况。 + */ + @Test + public void testNormalCaseCanPartition() { + Solution9 solver = new Solution9(); + int n = 4; + int[][] dislikes = {{1,2}, {1,3}, {2,4}}; + assertTrue("正常情况应该可以二分", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证无法二分的情况。 + * 测试用例:输入n=3, dislikes=[[1,2],[1,3],[2,3]],期望输出false。 + * 等价类:有效输入,但存在奇数环无法二分的情况。 + */ + @Test + public void testNormalCaseCannotPartition() { + Solution9 solver = new Solution9(); + int n = 3; + int[][] dislikes = {{1,2}, {1,3}, {2,3}}; + assertFalse("存在三角关系应该无法二分", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证边界情况-只有1个人。 + * 测试用例:输入n=1, dislikes=[],期望输出true。 + * 边界值:最小人数边界。 + */ + @Test + public void testBoundarySinglePerson() { + Solution9 solver = new Solution9(); + int n = 1; + int[][] dislikes = {}; + assertTrue("单个人应该可以任意分组", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证边界情况-没有不喜欢关系。 + * 测试用例:输入n=5, dislikes=[],期望输出true。 + * 边界值:空关系边界。 + */ + @Test + public void testBoundaryNoDislikes() { +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * 测试类设计总体原则: + * 1. 等价类划分:将输入数据划分为有效等价类和无效等价类。 + * 2. 边界值分析:对输入空间的边界进行重点测试。 + * 3. 覆盖主要逻辑路径:确保测试用例覆盖程序的所有关键判断和循环。 + */ +public class L2024123456_9_Test { // 请将2024123456替换为你的真实学号 + + /** + * 测试目的:验证正常情况下的二分图分组功能。 + * 测试用例:输入n=4, dislikes=[[1,2],[1,3],[2,4]],期望输出true。 + * 等价类:有效输入,可以成功二分的情况。 + */ + @Test + public void testNormalCaseCanPartition() { + Solution9 solver = new Solution9(); + int n = 4; + int[][] dislikes = {{1,2}, {1,3}, {2,4}}; + assertTrue("正常情况应该可以二分", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证无法二分的情况。 + * 测试用例:输入n=3, dislikes=[[1,2],[1,3],[2,3]],期望输出false。 + * 等价类:有效输入,但存在奇数环无法二分的情况。 + */ + @Test + public void testNormalCaseCannotPartition() { + Solution9 solver = new Solution9(); + int n = 3; + int[][] dislikes = {{1,2}, {1,3}, {2,3}}; + assertFalse("存在三角关系应该无法二分", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证边界情况-只有1个人。 + * 测试用例:输入n=1, dislikes=[],期望输出true。 + * 边界值:最小人数边界。 + */ + @Test + public void testBoundarySinglePerson() { + Solution9 solver = new Solution9(); + int n = 1; + int[][] dislikes = {}; + assertTrue("单个人应该可以任意分组", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证边界情况-没有不喜欢关系。 + * 测试用例:输入n=5, dislikes=[],期望输出true。 + * 边界值:空关系边界。 + */ + @Test + public void testBoundaryNoDislikes() { + Solution9 solver = new Solution9(); + int n = 5; + int[][] dislikes = {}; + assertTrue("没有不喜欢关系应该可以任意分组", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证复杂情况-多个连通分量。 + * 测试用例:输入n=6, dislikes=[[1,2],[2,3],[4,5],[5,6]],期望输出true。 + * 等价类:多个独立连通分量的情况。 + */ + @Test + public void testMultipleComponents() { + Solution9 solver = new Solution9(); + int n = 6; + int[][] dislikes = {{1,2}, {2,3}, {4,5}, {5,6}}; + assertTrue("多个独立组件应该可以二分", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证复杂情况-存在奇数环。 + * 测试用例:输入n=5, dislikes=[[1,2],[2,3],[3,4],[4,5],[1,5]],期望输出false。 + * 等价类:五元环无法二分的情况。 + */ + @Test + public void testOddCycle() { + Solution9 solver = new Solution9(); + int n = 5; + int[][] dislikes = {{1,2}, {2,3}, {3,4}, {4,5}, {1,5}}; + assertFalse("五元环应该无法二分", solver.possibleBipartition(n, dislikes)); + } + + /** + * 测试目的:验证边界情况-最大人数边界。 + * 测试用例:输入n=2000, dislikes=[],期望输出true。 + * 边界值:题目约束的最大人数边界。 + */ + @Test + public void testBoundaryMaxPeople() { + Solution9 solver = new Solution9(); + int n = 2000; + int[][] dislikes = {}; + assertTrue("最大人数无关系应该可以分组", solver.possibleBipartition(n, dislikes)); + } +}