// // Copyright (C) 2012 United States Government as represented by the // Administrator of the National Aeronautics and Space Administration // (NASA). All Rights Reserved. // // This software is distributed under the NASA Open Source Agreement // (NOSA), version 1.3. The NOSA has been approved by the Open Source // Initiative. See the file NOSA-1.3-JPF at the top of the distribution // directory tree for the complete NOSA document. // // THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY // KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT // LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO // SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR // A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT // THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT // DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. // package gov.nasa.jpf.util; import java.util.NoSuchElementException; import org.junit.Test; import gov.nasa.jpf.util.test.TestJPF; public abstract class ArrayIntSetTestBase extends TestJPF { protected abstract ArrayIntSet createArrayIntSet(); protected abstract ArrayIntSet createArrayIntSet(int n); @Test public void testInsert(){ ArrayIntSet s = createArrayIntSet(); s.add(42); s.add(43); s.add(41); s.add(42); s.add(0); System.out.println(s); assertTrue(s.size() == 4); assertTrue(s.contains(0)); assertTrue(s.contains(41)); assertTrue(s.contains(42)); assertTrue(s.contains(43)); } @Test public void testRemove(){ ArrayIntSet s = createArrayIntSet(); s.add(42); assertTrue(s.size() == 1); assertTrue(s.contains(42)); s.remove(42); assertFalse(s.contains(42)); assertTrue(s.size() == 0); s.add(42); s.add(42000); s.add(0); assertTrue(s.size() == 3); s.remove(42000); assertTrue(s.size() == 2); assertFalse(s.contains(42000)); s.remove(0); assertFalse(s.contains(0)); assertTrue(s.size() == 1); } @Test public void testRemoveLast(){ ArrayIntSet s = createArrayIntSet(2); s.add(1); s.add(2); s.remove(2); assertTrue( s.size() == 1); assertTrue( s.contains(1)); s.remove(1); assertTrue( s.isEmpty()); } @Test public void testRemoveFirst(){ ArrayIntSet s = createArrayIntSet(2); s.add(1); s.add(2); s.remove(1); assertTrue( s.size() == 1); assertTrue( s.contains(2)); s.remove(2); assertTrue( s.isEmpty()); } @Test public void testIterator(){ ArrayIntSet s = createArrayIntSet(); s.add(1); s.add(2); s.add(3); int i=0; IntIterator it = s.intIterator(); while (it.hasNext()){ System.out.print(it.next()); i++; } System.out.println(); assertTrue(i == 3); assertTrue( !it.hasNext()); try { it.next(); fail("iterator failed to throw NoSuchElementException"); } catch (NoSuchElementException nsex){ // that's expected } it = s.intIterator(); // fresh one while (it.hasNext()){ if (it.next() == 2){ it.remove(); assertTrue( s.size() == 2); break; } } i = it.next(); assertTrue(i == 3); it.remove(); assertTrue(s.size() == 1); assertTrue( !it.hasNext()); s.add(42); it = s.intIterator(); assertTrue(it.next() == 1); it.remove(); assertTrue( it.next() == 42); it.remove(); assertTrue( s.isEmpty()); } @Test public void testComparison(){ int[][] a = { {42, 0, 41}, {42, 41, 0}, {0, 42, 41}, {0, 41, 42}, {41, 0, 42}, {41, 42, 0} }; ArrayIntSet[] set = new ArrayIntSet[a.length]; for (int i=0; i< a.length; i++) { set[i]= createArrayIntSet(); int[] v = a[i]; for (int j=0; j<v.length; j++) { set[i].add(v[j]); } } ArrayIntSet s1 = null, s2 = null; for (int i=1; i< a.length; i++) { s1 = set[i-1]; s2 = set[i]; System.out.println("comparing " + s1 + " with " + s2); assertTrue(s1.hashCode() == s2.hashCode()); assertTrue(s1.equals(s2)); } // inverse test s2.remove(41); assertFalse( s1.hashCode() == s2.hashCode()); assertFalse( s1.equals(s2)); } }