/* ========================================== * 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. */ /* ----------------- * EquivalenceGroupCreatorTest.java * ----------------- * (C) Copyright 2005-2008, by Assaf Lehr and Contributors. * * Original Author: Assaf Lehr * Contributor(s): - * * $Id$ * * Changes * ------- */ package org.jgrapht.experimental.equivalence; import java.util.*; import junit.framework.*; import org.jgrapht.experimental.isomorphism.comparators.*; /** * @author Assaf * @since Jul 22, 2005 */ public class EquivalenceGroupCreatorTest extends TestCase { //~ Instance fields -------------------------------------------------------- // create the groups array as 0 to X (it) final int INTEGER_ARRAY_SIZE = 25; //~ Methods ---------------------------------------------------------------- /* * @see TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); } public void testUniformGroup() { // expecting two seperate groups , one with odd , one with even nubmers" testOneComparator(new UniformEquivalenceComparator(), 1); // " expecting 3 seperate groups , one for each mod3 testOneComparator( new org.jgrapht.experimental.isomorphism.comparators.Mod3GroupComparator(), 3); } public void testOddEvenGroup() { // " expecting two seperate groups , one with odd , one with even // nubmers"); testOneComparator( new org.jgrapht.experimental.isomorphism.comparators.OddEvenGroupComparator(), 2); // " expecting 3 seperate groups , one for each mod3"); testOneComparator( new org.jgrapht.experimental.isomorphism.comparators.Mod3GroupComparator(), 3); } /** * Using a chain of evenOdd(mod2) and mod3 comparator , should yield the 6 * groups , which are infact mod6 , examples: * <li>mod2 = 0 , mod3 = 0 --> mod6=0 , like : 6 , 12 * <li>mod2 = 1 , mod3 = 0 --> mod6=1 , like : 7 , 13 * <li> */ public void testComparatorChain() { EquivalenceComparatorChain<Integer, Object> comparatorChain = new EquivalenceComparatorChainBase<Integer, Object>( new OddEvenGroupComparator()); comparatorChain.appendComparator(new Mod3GroupComparator()); // for (int i=0 ; i<INTEGER_ARRAY_SIZE ; i++) // { // System.out.println("hash of "+i+" = // "+comparatorChain.equivalenceHashcode(integerArray[i], null)); // // // } // expecting six seperate groups , with the different mod6 values"); testOneComparator( comparatorChain, 6); } @SuppressWarnings("unchecked") public void testComparatorChainSameComparatorTwice() { EquivalenceComparatorChain comparatorChain = new EquivalenceComparatorChainBase(new OddEvenGroupComparator()); comparatorChain.appendComparator(new UniformEquivalenceComparator()); comparatorChain.appendComparator(new OddEvenGroupComparator()); // still expecting 2 groups " testOneComparator( comparatorChain, 2); } @SuppressWarnings("unchecked") private void testOneComparator( EquivalenceComparator comparator, int expectedNumOfGroups) { ArrayList<Integer> integerArray = new ArrayList<Integer>(INTEGER_ARRAY_SIZE); for (int i = 0; i < INTEGER_ARRAY_SIZE; i++) { integerArray.add(i); } EquivalenceSet [] eqGroupArray = EquivalenceSetCreator.createEqualityGroupOrderedArray( integerArray, comparator, null); assertEquals(expectedNumOfGroups, eqGroupArray.length); // assert the group order size is sorted. for (int i = 1; i < eqGroupArray.length; i++) { EquivalenceSet set = eqGroupArray[i]; assertTrue(set.size() >= eqGroupArray[i - 1].size()); } // System.out.println("\nTesting the EquivalenceSet[] returned from // Integer[" // +INTEGER_ARRAY_SIZE+"] filled with the integers as the indexes. \n" // + expectedResult); // System.out.println("result size="+eqGroupArray.length); // for (int i = 0; i < eqGroupArray.length; i++) { // System.out.println(eqGroupArray[i]); // } } } // End EquivalenceGroupCreatorTest.java