/* * Copyright 2013 Cameron Beccario * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.nullschool.collect.basic; import net.nullschool.collect.ConstSet; import net.nullschool.reflect.PublicInterfaceRef; import org.junit.Test; import java.util.*; import static org.junit.Assert.*; import static net.nullschool.collect.CollectionTestingTools.*; import static net.nullschool.collect.basic.BasicCollections.*; /** * 2013-04-30<p/> * * @author Cameron Beccario */ public class BasicConstSetTest { private static void compare_order(Set<?> expected, Set<?> actual) { assertArrayEquals(expected.toArray(), actual.toArray()); } @Test public void test_emptySet() { assertSame(BasicSet0.instance(), emptySet()); } @Test public void test_construction_permutations() { for (int a = 0; a < 6; a++) { compare_order(newSet(a), setOf(a)); for (int b = 0; b < 6; b++) { compare_order(newSet(a, b), setOf(a, b)); for (int c = 0; c < 6; c++) { compare_order(newSet(a, b, c), setOf(a, b, c)); for (int d = 0; d < 6; d++) { compare_order(newSet(a, b, c, d), setOf(a, b, c, d)); for (int e = 0; e < 6; e++) { compare_order(newSet(a, b, c, d, e), setOf(a, b, c, d, e)); for (int f = 0; f < 6; f++) { Integer[] elements = new Integer[] {a, b, c, d, e, f}; Set<Integer> expected = newSet(elements); Collection<Integer> collection = Arrays.asList(elements); // setOf compare_order(expected, setOf(a, b, c, d, e, f)); // asSet(array) compare_order(expected, asSet(elements)); // asSet(collection) compare_order(expected, asSet(collection)); // asSet(iterator) compare_order(expected, asSet(collection.iterator())); } } } } } } } @Test public void test_setOf() { compare_sets(newSet(1), setOf(1)); compare_sets(newSet(1, 2), setOf(1, 2)); compare_sets(newSet(1, 2, 3), setOf(1, 2, 3)); compare_sets(newSet(1, 2, 3, 4), setOf(1, 2, 3, 4)); compare_sets(newSet(1, 2, 3, 4, 5), setOf(1, 2, 3, 4, 5)); compare_sets(newSet(1, 2, 3, 4, 5, 6), setOf(1, 2, 3, 4, 5, 6)); compare_sets(newSet(1, 2, 3, 4, 5, 6, 7), setOf(1, 2, 3, 4, 5, 6, 7)); compare_sets(newSet(1, 2, 3, 4, 5, 6, 7, 8), setOf(1, 2, 3, 4, 5, 6, 7, 8)); // noinspection RedundantArrayCreation compare_sets(newSet(1, 2, 3), setOf(1, 1, 1, 1, 1, 1, new Integer[] {1, 2, 3})); compare_sets(newSet((Object)null), setOf(null)); compare_sets(newSet((Object)null), setOf(null, null)); compare_sets(newSet((Object)null), setOf(null, null, null)); compare_sets(newSet((Object)null), setOf(null, null, null, null)); compare_sets(newSet((Object)null), setOf(null, null, null, null, null)); compare_sets(newSet((Object)null), setOf(null, null, null, null, null, null)); compare_sets(newSet((Object)null), setOf(null, null, null, null, null, null, (Object)null)); compare_sets(newSet((Object)null), setOf(null, null, null, null, null, null, null, null)); } @Test public void test_setOf_types() { assertEquals(BasicSet1.class, setOf(1).getClass()); assertEquals(BasicSetN.class, setOf(1, 2).getClass()); assertEquals(BasicSetN.class, setOf(1, 2, 3).getClass()); assertEquals(BasicSetN.class, setOf(1, 2, 3, 4).getClass()); assertEquals(BasicSetN.class, setOf(1, 2, 3, 4, 5).getClass()); assertEquals(BasicSetN.class, setOf(1, 2, 3, 4, 5, 6).getClass()); assertEquals(BasicSetN.class, setOf(1, 2, 3, 4, 5, 6, 7).getClass()); assertEquals(BasicSetN.class, setOf(1, 2, 3, 4, 5, 6, 7, 8).getClass()); } @Test public void test_asSet_array() { assertSame(emptySet(), asSet(new Integer[] {})); compare_sets(newSet(1), asSet(new Integer[] {1})); compare_sets(newSet(1, 2), asSet(new Integer[] {1, 2})); compare_sets(newSet(1, 2, 3), asSet(new Integer[] {1, 2, 3})); compare_sets(newSet(1, 2, 3, 4), asSet(new Integer[] {1, 2, 3, 4})); compare_sets(newSet(1, 2, 3, 4, 5), asSet(new Integer[] {1, 2, 3, 4, 5})); compare_sets(newSet(1, 2, 3, 4, 5, 6), asSet(new Integer[] {1, 2, 3, 4, 5, 6})); } @Test public void test_asSet_array_types() { assertEquals(BasicSet1.class, asSet(new Integer[] {1}).getClass()); assertEquals(BasicSetN.class, asSet(new Integer[] {1, 2}).getClass()); assertEquals(BasicSetN.class, asSet(new Integer[] {1, 2, 3}).getClass()); assertEquals(BasicSetN.class, asSet(new Integer[] {1, 2, 3, 4}).getClass()); assertEquals(BasicSetN.class, asSet(new Integer[] {1, 2, 3, 4, 5}).getClass()); assertEquals(BasicSetN.class, asSet(new Integer[] {1, 2, 3, 4, 5, 6}).getClass()); assertEquals(BasicSetN.class, asSet(new Integer[] {1, 2, 3, 4, 5, 6, 7}).getClass()); assertEquals(BasicSetN.class, asSet(new Integer[] {1, 2, 3, 4, 5, 6, 7, 8}).getClass()); } @Test(expected = NullPointerException.class) public void test_asSet_array_null() { asSet((Integer[])null); } @Test public void test_asSet_collection() { assertSame(emptySet(), asSet(Arrays.asList())); compare_sets(newSet(1), asSet(Arrays.asList(1))); compare_sets(newSet(1, 2), asSet(Arrays.asList(1, 2))); compare_sets(newSet(1, 2, 3), asSet(Arrays.asList(1, 2, 3))); compare_sets(newSet(1, 2, 3, 4), asSet(Arrays.asList(1, 2, 3, 4))); compare_sets(newSet(1, 2, 3, 4, 5), asSet(Arrays.asList(1, 2, 3, 4, 5))); compare_sets(newSet(1, 2, 3, 4, 5, 6), asSet(Arrays.asList(1, 2, 3, 4, 5, 6))); // ConstSet should just be returned as-is. ConstSet<Integer> set; set = setOf(1); assertSame(set, asSet(set)); set = setOf(1, 2); assertSame(set, asSet(set)); set = setOf(1, 2, 3); assertSame(set, asSet(set)); set = setOf(1, 2, 3, 4, 5, 6, 7, 8, 9); assertSame(set, asSet(set)); // However, ConstSortedSet should be converted to a regular ConstSet. set = sortedSetOf(null, 1); assertNotSame(set, asSet(set)); } @Test public void test_asSet_collection_types() { assertEquals(BasicSet1.class, asSet(Arrays.asList(1)).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2)).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3)).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4)).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4, 5)).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4, 5, 6)).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4, 5, 6, 7)).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8)).getClass()); } @Test(expected = NullPointerException.class) public void test_asSet_collection_null() { asSet((Collection<?>)null); } @Test public void test_asSet_iterator() { assertSame(emptySet(), asSet(Arrays.asList().iterator())); compare_sets(newSet(1), asSet(Arrays.asList(1).iterator())); compare_sets(newSet(1, 2), asSet(Arrays.asList(1, 2).iterator())); compare_sets(newSet(1, 2, 3), asSet(Arrays.asList(1, 2, 3).iterator())); compare_sets(newSet(1, 2, 3, 4), asSet(Arrays.asList(1, 2, 3, 4).iterator())); compare_sets(newSet(1, 2, 3, 4, 5), asSet(Arrays.asList(1, 2, 3, 4, 5).iterator())); compare_sets(newSet(1, 2, 3, 4, 5, 6), asSet(Arrays.asList(1, 2, 3, 4, 5, 6).iterator())); } @Test public void test_asSet_iterator_types() { assertEquals(BasicSet1.class, asSet(Arrays.asList(1).iterator()).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2).iterator()).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3).iterator()).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4).iterator()).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4, 5).iterator()).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4, 5, 6).iterator()).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4, 5, 6, 7).iterator()).getClass()); assertEquals(BasicSetN.class, asSet(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8).iterator()).getClass()); } @Test(expected = NullPointerException.class) public void test_asSet_iterator_null() { asSet((Iterator<?>)null); } @Test public void test_condense() { assertSame(emptySet(), condenseToSet(new Object[] {})); assertEquals(BasicSet1.class, condenseToSet(new Object[] {1}).getClass()); assertEquals(BasicSetN.class, condenseToSet(new Object[] {1, 2}).getClass()); assertEquals(BasicSetN.class, condenseToSet(new Object[] {1, 2, 3}).getClass()); assertEquals(BasicSetN.class, condenseToSet(new Object[] {1, 2, 3, 4}).getClass()); assertEquals(BasicSetN.class, condenseToSet(new Object[] {1, 2, 3, 4, 5}).getClass()); assertEquals(BasicSetN.class, condenseToSet(new Object[] {1, 2, 3, 4, 5, 6}).getClass()); assertEquals(BasicSetN.class, condenseToSet(new Object[] {1, 2, 3, 4, 5, 6, 7}).getClass()); assertEquals(BasicSetN.class, condenseToSet(new Object[] {1, 2, 3, 4, 5, 6, 7, 8}).getClass()); } @Test public void test_publicInterfaceRef_annotation_present() { Collection<Integer> elements = new ArrayList<>(); for (int i = 0; i < 15; i++) { assertSame( BasicConstSet.class, asSet(elements).getClass().getAnnotation(PublicInterfaceRef.class).value()); elements.add(i); } } }