public CobwebGraph createCircularWeb(int size) { CobwebGraph cw = new CobwebGraph(size); for (int i = 1; i < cw.size(); i++) { cw.setEdge(i, i + 1, Edge.EdgeOperation.ADDITION, 1); } return cw; }
@Test public void testGraphWithNoCycles() { CobwebGraph unbound = new CobwebGraph(3); unbound.setEdge(1, 2, Edge.EdgeOperation.MULTIPLICATION, 2); unbound.setEdge(2, 3, Edge.EdgeOperation.ADDITION, 5); CobwebSolver solver = new CobwebSolver(unbound.map); assertEquals(CobwebSolver.SolverState.INFINITE_SOLUTIONS, solver.numberOfSolutions()); }
@Test public void testGraphOnlySolvableWithNegativeNumbers() { CobwebGraph negative = new CobwebGraph(3); negative.setEdge(1, 2, Edge.EdgeOperation.MULTIPLICATION, 2); negative.setEdge(2, 3, Edge.EdgeOperation.ADDITION, 5); negative.setEdge(3, 1, Edge.EdgeOperation.ADDITION, 1); CobwebSolver solver = new CobwebSolver(negative.map); assertEquals(CobwebSolver.SolverState.NO_SOLUTION, solver.numberOfSolutions()); }
@Test public void testUnsolvableGraph() { CobwebGraph bad = new CobwebGraph(3); bad.setEdge(1, 2, Edge.EdgeOperation.MULTIPLICATION, 2); bad.setEdge(2, 3, Edge.EdgeOperation.ADDITION, 5); bad.setEdge(3, 1, Edge.EdgeOperation.DIVISION, 2); CobwebSolver solver = new CobwebSolver(bad.map); assertEquals(CobwebSolver.SolverState.NO_SOLUTION, solver.numberOfSolutions()); }
@Test public void testInfiniteSolutions() { CobwebGraph infinite = new CobwebGraph(3); infinite.setEdge(1, 2, Edge.EdgeOperation.ADDITION, 1); infinite.setEdge(2, 3, Edge.EdgeOperation.ADDITION, 1); infinite.setEdge(3, 1, Edge.EdgeOperation.SUBTRACTION, 2); CobwebSolver solver = new CobwebSolver(infinite.map); assertEquals(CobwebSolver.SolverState.INFINITE_SOLUTIONS, solver.numberOfSolutions()); }
@Test public void testGraphWithBadCycle() { CobwebGraph bad = new CobwebGraph(5); bad.setEdge(1, 2, Edge.EdgeOperation.SUBTRACTION, 1); bad.setEdge(2, 3, Edge.EdgeOperation.SUBTRACTION, 1); bad.setEdge(3, 4, Edge.EdgeOperation.SUBTRACTION, 1); bad.setEdge(4, 5, Edge.EdgeOperation.SUBTRACTION, 1); bad.setEdge(2, 4, Edge.EdgeOperation.ADDITION, 2); CobwebSolver solver = new CobwebSolver(bad.map); CobwebSolver.SolverState result = solver.numberOfSolutions(); assertEquals(CobwebSolver.SolverState.NO_SOLUTION, result); }
@Test public void testGraphPentagram() { CobwebGraph bad = new CobwebGraph(5); bad.setEdge(1, 2, Edge.EdgeOperation.MULTIPLICATION, 2); bad.setEdge(2, 3, Edge.EdgeOperation.ADDITION, 1); bad.setEdge(3, 4, Edge.EdgeOperation.SUBTRACTION, 5); bad.setEdge(4, 5, Edge.EdgeOperation.DIVISION, 6); bad.setEdge(5, 1, Edge.EdgeOperation.ADDITION, 8); CobwebSolver solver = new CobwebSolver(bad.map); CobwebSolver.SolverState result = solver.numberOfSolutions(); assertEquals(CobwebSolver.SolverState.SINGLE_SOLUTION, result); }
@Test public void testEasyTriangle() { CobwebGraph easy = new CobwebGraph(3); CobwebSolver solver; easy.setEdge(1, 2, Edge.EdgeOperation.MULTIPLICATION, 2); easy.setEdge(1, 3, Edge.EdgeOperation.ADDITION, 1); easy.setEdge(3, 2, Edge.EdgeOperation.ADDITION, 2); easy.setNode(1, 2); solver = new CobwebSolver(easy.map); assertEquals(CobwebSolver.SolverState.NO_SOLUTION, solver.numberOfSolutions()); easy.setNode(1, 3); solver = new CobwebSolver(easy.map); assertEquals(CobwebSolver.SolverState.SINGLE_SOLUTION, solver.numberOfSolutions()); }
@Test public void testEasyQuad() { CobwebGraph quad = new CobwebGraph(4); CobwebSolver solver; quad.setEdge(1, 2, Edge.EdgeOperation.ADDITION, 6); quad.setEdge(2, 3, Edge.EdgeOperation.MULTIPLICATION, 2); quad.setEdge(1, 4, Edge.EdgeOperation.MULTIPLICATION, 3); quad.setEdge(4, 3, Edge.EdgeOperation.ADDITION, 1); solver = new CobwebSolver(quad.map); assertEquals(CobwebSolver.SolverState.SINGLE_SOLUTION, solver.numberOfSolutions()); quad.setNode(4, 33); solver = new CobwebSolver(quad.map); assertFalse(solver.hasUnreachableNodes()); assertEquals(CobwebSolver.SolverState.SINGLE_SOLUTION, solver.numberOfSolutions()); quad.setNode(4, 15); solver = new CobwebSolver(quad.map); assertEquals(CobwebSolver.SolverState.NO_SOLUTION, solver.numberOfSolutions()); }