import graphlib.edges.UndirectedEdge; import graphlib.graphs.UndirectedGraph; import graphlib.util.Graphs; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import java.util.stream.Stream; public class SimpleTest { private static Kleuring kleuring; private static UndirectedGraph graaf1; @BeforeClass public static void init() { kleuring = new GraafKleuring(); graaf1 = new UndirectedGraph<>(); graaf1.addNode("n1"); graaf1.addNode("n2"); graaf1.addNode("n3"); graaf1.addEdge(new UndirectedEdge<>(graaf1.getNode("n1"), graaf1.getNode("n2"))); graaf1.addEdge(new UndirectedEdge<>(graaf1.getNode("n2"), graaf1.getNode("n3"))); graaf1.addEdge(new UndirectedEdge<>(graaf1.getNode("n1"), graaf1.getNode("n3"))); } @Test public void testGraaf1() { Assert.assertTrue(kleuring.kleuringMogelijk(Graphs.unmodifiableUndirectedGraph(graaf1), 3)); } @Test public void testGraaf1TeVeelKleuren() { Assert.assertTrue(kleuring.kleuringMogelijk(Graphs.unmodifiableUndirectedGraph(graaf1), 6)); } @Test public void testGraaf1False() { Assert.assertFalse(kleuring.kleuringMogelijk(Graphs.unmodifiableUndirectedGraph(graaf1), 2)); } @Test public void testGraaf2() { UndirectedGraph graaf = new UndirectedGraph<>(); graaf.addNode("n1"); graaf.addNode("n2"); graaf.addNode("n3"); graaf.addNode("n4"); graaf.addNode("n5"); graaf.addNode("n6"); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n1"), graaf.getNode("n2"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n2"), graaf.getNode("n3"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n3"), graaf.getNode("n4"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n4"), graaf.getNode("n5"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n5"), graaf.getNode("n6"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n6"), graaf.getNode("n1"))); Assert.assertTrue(kleuring.kleuringMogelijk(Graphs.unmodifiableUndirectedGraph(graaf), 2)); } @Test public void testGraaf3() { UndirectedGraph graaf = new UndirectedGraph<>(); graaf.addNode("n1"); graaf.addNode("n2"); graaf.addNode("n3"); graaf.addNode("n4"); graaf.addNode("n5"); graaf.addNode("n6"); graaf.addNode("n7"); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n1"), graaf.getNode("n2"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n1"), graaf.getNode("n3"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n1"), graaf.getNode("n4"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n1"), graaf.getNode("n5"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n2"), graaf.getNode("n3"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n2"), graaf.getNode("n6"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n2"), graaf.getNode("n4"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n3"), graaf.getNode("n6"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n4"), graaf.getNode("n6"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n4"), graaf.getNode("n7"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n5"), graaf.getNode("n6"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n5"), graaf.getNode("n7"))); graaf.addEdge(new UndirectedEdge<>(graaf.getNode("n6"), graaf.getNode("n7"))); Assert.assertTrue(kleuring.kleuringMogelijk(Graphs.unmodifiableUndirectedGraph(graaf), 3)); } @Test public void testGreedy(){ UndirectedGraph graph = new UndirectedGraph<>(); Stream.of("0", "1","2", "3", "4").forEach(graph::addNode); graph.addEdge(new UndirectedEdge<>(graph.getNode("0"), graph.getNode("1"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("2"), graph.getNode("0"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("0"), graph.getNode("3"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("0"), graph.getNode("4"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("1"), graph.getNode("3"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("3"), graph.getNode("4"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("4"), graph.getNode("2"))); Assert.assertTrue(kleuring.kleuringMogelijk(Graphs.unmodifiableUndirectedGraph(graph),3)); } @Test public void testSemiGreedy(){ UndirectedGraph graph = new UndirectedGraph<>(); Stream.of("0", "1","2", "3", "4", "5", "6", "7","8").forEach(graph::addNode); graph.addEdge(new UndirectedEdge<>(graph.getNode("0"), graph.getNode("2"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("2"), graph.getNode("3"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("2"), graph.getNode("4"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("3"), graph.getNode("4"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("0"), graph.getNode("7"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("2"), graph.getNode("5"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("3"), graph.getNode("5"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("3"), graph.getNode("6"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("5"), graph.getNode("7"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("6"), graph.getNode("7"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("5"), graph.getNode("6"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("0"), graph.getNode("1"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("0"), graph.getNode("8"))); graph.addEdge(new UndirectedEdge<>(graph.getNode("1"), graph.getNode("8"))); Assert.assertTrue(kleuring.kleuringMogelijk(Graphs.unmodifiableUndirectedGraph(graph),3)); } }