/* ========================================== * JGraphT : a free Java graph-theory library * ========================================== * * Project Info: http://jgrapht.sourceforge.net/ * Project Creator: Barak Naveh (http://sourceforge.net/users/barak_naveh) * * (C) Copyright 2003-2008, by Barak Naveh and Contributors. * * This program and the accompanying materials are dual-licensed under * either * * (a) the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation, or (at your option) any * later version. * * or (per the licensee's choosing) * * (b) the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation. */ /* ------------------------- * UndirectedCycleBaseTest.java * ------------------------- * (C) Copyright 2013, by Nikolay Ognyanov * * Original Author: Nikolay Ognyanov * Contributor(s) : * * $Id$ * * Changes * ------- * 06-Sep-2013 : Initial revision (NO); */ package org.jgrapht.alg.cycle; import static org.junit.Assert.assertTrue; import org.jgrapht.graph.ClassBasedEdgeFactory; import org.jgrapht.graph.DefaultEdge; import org.jgrapht.graph.SimpleGraph; import org.junit.Test; public class UndirectedCycleBaseTest { private static int MAX_SIZE = 10; private static int[] RESULTS = { 0, 0, 0, 1, 3, 6, 10, 15, 21, 28, 36 }; @Test public void test() { PatonCycleBase<Integer, DefaultEdge> patonFinder = new PatonCycleBase<Integer, DefaultEdge>(); testAlgorithm(patonFinder); } private void testAlgorithm( UndirectedCycleBase<Integer, DefaultEdge> finder) { SimpleGraph<Integer, DefaultEdge> graph = new SimpleGraph<Integer, DefaultEdge> ( new ClassBasedEdgeFactory<Integer, DefaultEdge> ( DefaultEdge.class ) ); for (int i = 0; i < 7; i++) { graph.addVertex(i); } finder.setGraph(graph); graph.addEdge(0, 1); graph.addEdge(1, 2); graph.addEdge(2, 0); checkResult(finder, 1); graph.addEdge(2, 3); graph.addEdge(3, 0); checkResult(finder, 2); graph.addEdge(3, 1); checkResult(finder, 3); graph.addEdge(3, 4); graph.addEdge(4, 2); checkResult(finder, 4); graph.addEdge(4, 5); checkResult(finder, 4); graph.addEdge(5, 2); checkResult(finder, 5); graph.addEdge(5, 6); graph.addEdge(6, 4); checkResult(finder, 6); for (int size = 1; size <= MAX_SIZE; size++) { graph = new SimpleGraph<Integer, DefaultEdge> ( new ClassBasedEdgeFactory<Integer, DefaultEdge> ( DefaultEdge.class ) ); for (int i = 0; i < size; i++) { graph.addVertex(i); } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (i != j) { graph.addEdge(i, j); } } } finder.setGraph(graph); checkResult(finder, RESULTS[size]); } } private void checkResult(UndirectedCycleBase <Integer, DefaultEdge> finder, int size) { assertTrue(finder.findCycleBase().size() == size); } }