package de.axone.data; import static org.testng.Assert.*; import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.NoSuchElementException; import org.testng.annotations.Test; import de.axone.data.collections.SingleImmutableSet; @Test( groups="tools.singleimmutableset" ) public class SingleImmutableSetTest { public void testSet(){ SingleImmutableSet<String> s1 = new SingleImmutableSet<>( "foo" ), s2 = new SingleImmutableSet<>( "f"+'o'+"o" ), s3 = new SingleImmutableSet<>( "bar" ) ; Iterator<String> it = s1.iterator(); assertTrue( it.hasNext() ); assertEquals( it.next(), "foo" ); assertFalse( it.hasNext() ); try { it.next(); fail( "Should have thrown exception" ); } catch( NoSuchElementException e ){ } int c=0; for( String s : s1 ){ assertEquals( s, "foo" ); c++; } assertEquals( c, 1 ); assertTrue( s1.contains( "foo" ) ); assertTrue( s2.contains( "foo" ) ); assertFalse( s3.contains( "foo" ) ); assertFalse( s1.contains( "var" ) ); assertTrue( s1.equals( s2 ) ); assertEquals( s1.hashCode(), s2.hashCode() ); assertFalse( s1.equals( s3 ) ); // This has a probability of failing if String's hashCode changes. (Which it won't) assertNotEquals( s1.hashCode(), s3.hashCode() ); assertTrue( s1.containsAll( s2 ) ); assertTrue( s2.containsAll( s1 ) ); assertFalse( s1.containsAll( s3 ) ); HashSet<String> hs1 = new HashSet<>(), hs2 = new HashSet<>( Arrays.asList( "foo" ) ), hs3 = new HashSet<>( Arrays.asList( "foo", "bar" ) ) ; assertTrue( s1.containsAll( hs1 ) ); assertTrue( s1.containsAll( hs2 ) ); assertFalse( s1.containsAll( hs3 ) ); assertFalse( hs1.containsAll( s1 ) ); assertTrue( hs2.containsAll( s1 ) ); assertTrue( hs3.containsAll( s1 ) ); } }