11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 The Guava Authors
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License.
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License.
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.primitives;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.Preconditions.checkNotNull;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtIncompatible;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableList;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ListTestSuiteBuilder;
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SampleElements;
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestListGenerator;
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature;
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize;
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.ListFeature;
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test;
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase;
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite;
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
350888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.List;
360888a09821a98ac0680fad765217302858e70fa4Paul Duffin
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test suite covering {@link Shorts#asList(short[])}.
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
427dd252788645e940eada959bdde927426e2531c9Paul Duffin@GwtCompatible(emulated = true)
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ShortArrayAsListTest extends TestCase {
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static List<Short> asList(Short[] values) {
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    short[] temp = new short[values.length];
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (short i = 0; i < values.length; i++) {
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      temp[i] = checkNotNull(values[i]);  // checkNotNull for GWT (do not optimize).
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return Shorts.asList(temp);
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
537dd252788645e940eada959bdde927426e2531c9Paul Duffin  @GwtIncompatible("suite")
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static Test suite() {
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    List<ListTestSuiteBuilder<Short>> builders =
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        ImmutableList.of(
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListTestSuiteBuilder.using(new ShortsAsListGenerator())
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                .named("Shorts.asList"),
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListTestSuiteBuilder.using(new ShortsAsListHeadSubListGenerator())
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                .named("Shorts.asList, head subList"),
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListTestSuiteBuilder.using(new ShortsAsListTailSubListGenerator())
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                .named("Shorts.asList, tail subList"),
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            ListTestSuiteBuilder.using(new ShortsAsListMiddleSubListGenerator())
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                .named("Shorts.asList, middle subList")
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            );
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    TestSuite suite = new TestSuite();
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (ListTestSuiteBuilder<Short> builder : builders) {
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      suite.addTest(
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          builder
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          .withFeatures(CollectionSize.ONE,
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                        CollectionSize.SEVERAL,
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                        CollectionFeature.RESTRICTS_ELEMENTS,
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                        ListFeature.SUPPORTS_SET)
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          .createTestSuite());
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return suite;
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  // Test generators.  To let the GWT test suite generator access them, they need to be
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  // public named classes with a public default constructor.
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final class ShortsAsListGenerator extends TestShortListGenerator {
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override protected List<Short> create(Short[] elements) {
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return asList(elements);
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final class ShortsAsListHeadSubListGenerator extends TestShortListGenerator {
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override protected List<Short> create(Short[] elements) {
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Short[] suffix = {Short.MIN_VALUE, Short.MAX_VALUE};
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Short[] all = concat(elements, suffix);
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return asList(all).subList(0, elements.length);
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final class ShortsAsListTailSubListGenerator extends TestShortListGenerator {
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override protected List<Short> create(Short[] elements) {
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Short[] prefix = {(short) 86, (short) 99};
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Short[] all = concat(prefix, elements);
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return asList(all).subList(2, elements.length + 2);
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final class ShortsAsListMiddleSubListGenerator extends TestShortListGenerator {
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override protected List<Short> create(Short[] elements) {
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Short[] prefix = {Short.MIN_VALUE, Short.MAX_VALUE};
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Short[] suffix = {(short) 86, (short) 99};
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Short[] all = concat(concat(prefix, elements), suffix);
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return asList(all).subList(2, elements.length + 2);
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static Short[] concat(Short[] left, Short[] right) {
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Short[] result = new Short[left.length + right.length];
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    System.arraycopy(left, 0, result, 0, left.length);
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    System.arraycopy(right, 0, result, left.length, right.length);
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return result;
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static abstract class TestShortListGenerator
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      implements TestListGenerator<Short> {
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    public SampleElements<Short> samples() {
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return new SampleShorts();
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    public List<Short> create(Object... elements) {
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Short[] array = new Short[elements.length];
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      short i = 0;
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (Object e : elements) {
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        array[i++] = (Short) e;
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return create(array);
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * Creates a new collection containing the given elements; implement this
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * method instead of {@link #create(Object...)}.
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    protected abstract List<Short> create(Short[] elements);
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    public Short[] createArray(int length) {
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return new Short[length];
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /** Returns the original element list, unchanged. */
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    public List<Short> order(List<Short> insertionOrder) {
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return insertionOrder;
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static class SampleShorts extends SampleElements<Short> {
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    public SampleShorts() {
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      super((short) 0, (short) 1, (short) 2, (short) 3, (short) 4);
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
165