Search in sources :

Example 6 with ArrayDataSchema

use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.

the class TestArrayTemplate method testDoubleArray.

@Test
public void testDoubleArray() {
    ArrayDataSchema schema = (ArrayDataSchema) DataTemplateUtil.parseSchema("{ \"type\" : \"array\", \"items\" : \"double\" }");
    // must be unique
    List<Double> input = Arrays.asList(1.0, 3.0, 5.0, 7.0, 11.0);
    List<Double> adds = Arrays.asList(13.0, 17.0, 19.0);
    List<Object> badInput = asList(true, "hello", ByteString.empty(), new StringMap(), new StringArray(), null);
    List<Object> badOutput = asList(true, "hello", ByteString.empty(), new DataMap(), new DataList());
    testArray(DoubleArray.class, schema, input, adds);
    testArrayBadInput(DoubleArray.class, schema, input, badInput, badOutput);
    @SuppressWarnings("unchecked") List<? extends Number> castFrom = Arrays.asList(1, 3L, 5.0f, 7.0, 11.0);
    testNumberArray(DoubleArray.class, schema, input, castFrom);
}
Also used : ArrayDataSchema(com.linkedin.data.schema.ArrayDataSchema) DataList(com.linkedin.data.DataList) DataMap(com.linkedin.data.DataMap) Test(org.testng.annotations.Test)

Example 7 with ArrayDataSchema

use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.

the class TestArrayTemplate method testFloatArray.

@Test
public void testFloatArray() {
    ArrayDataSchema schema = (ArrayDataSchema) DataTemplateUtil.parseSchema("{ \"type\" : \"array\", \"items\" : \"float\" }");
    // must be unique
    List<Float> input = Arrays.asList(1.0f, 3.0f, 5.0f, 7.0f, 11.0f);
    List<Float> adds = Arrays.asList(13.0f, 17.0f, 19.0f);
    List<Object> badInput = asList(true, "hello", ByteString.empty(), new StringMap(), new StringArray(), null);
    List<Object> badOutput = asList(true, "hello", ByteString.empty(), new DataMap(), new DataList());
    testArray(FloatArray.class, schema, input, adds);
    testArrayBadInput(FloatArray.class, schema, input, badInput, badOutput);
    @SuppressWarnings("unchecked") List<? extends Number> castFrom = Arrays.asList(1, 3L, 5.0, 7.0f, 11.0f);
    testNumberArray(FloatArray.class, schema, input, castFrom);
}
Also used : ArrayDataSchema(com.linkedin.data.schema.ArrayDataSchema) DataList(com.linkedin.data.DataList) DataMap(com.linkedin.data.DataMap) Test(org.testng.annotations.Test)

Example 8 with ArrayDataSchema

use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.

the class TestArrayTemplate method testLongArray.

@Test
public void testLongArray() {
    ArrayDataSchema schema = (ArrayDataSchema) DataTemplateUtil.parseSchema("{ \"type\" : \"array\", \"items\" : \"long\" }");
    // must be unique
    List<Long> input = Arrays.asList(1L, 3L, 5L, 7L, 11L);
    List<Long> adds = Arrays.asList(13L, 17L, 19L);
    List<Object> badInput = asList(true, "hello", ByteString.empty(), new StringMap(), new StringArray(), null);
    List<Object> badOutput = asList(true, "hello", ByteString.empty(), new DataMap(), new DataList());
    testArray(LongArray.class, schema, input, adds);
    testArrayBadInput(LongArray.class, schema, input, badInput, badOutput);
    @SuppressWarnings("unchecked") List<? extends Number> castFrom = Arrays.asList(1, 3.0f, 5.0, 7L, 11L);
    testNumberArray(LongArray.class, schema, input, castFrom);
}
Also used : ArrayDataSchema(com.linkedin.data.schema.ArrayDataSchema) DataList(com.linkedin.data.DataList) DataMap(com.linkedin.data.DataMap) Test(org.testng.annotations.Test)

Example 9 with ArrayDataSchema

use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.

the class TestArrayTemplate method testArray.

public static <ArrayTemplate extends AbstractArrayTemplate<E>, E> void testArray(Class<ArrayTemplate> templateClass, ArrayDataSchema schema, List<E> input, List<E> adds) {
    try {
        // constructors and addAll
        ArrayTemplate array1 = templateClass.newInstance();
        array1.addAll(input);
        assertEquals(input, array1);
        /*
      Constructor[] constructors = templateClass.getConstructors();
      for (Constructor c : constructors)
      {
        out.println(c);
      }
      */
        try {
            int size = input.size();
            // constructor(int capacity)
            Constructor<ArrayTemplate> capacityConstructor = templateClass.getConstructor(int.class);
            ArrayTemplate array = capacityConstructor.newInstance(input.size());
            assertEquals(array, Collections.emptyList());
            array.addAll(input);
            assertEquals(input, array);
            array.clear();
            assertEquals(size, input.size());
            // constructor(Collection<E>)
            Constructor<ArrayTemplate> collectionConstructor = templateClass.getConstructor(Collection.class);
            array = collectionConstructor.newInstance(input);
            assertEquals(input, array);
            array.clear();
            assertEquals(size, input.size());
            // constructor(DataList)
            Constructor<ArrayTemplate> dataListConstructor = templateClass.getConstructor(DataList.class);
            array = dataListConstructor.newInstance(array1.data());
            assertEquals(array1, array);
            assertEquals(input, array);
            array.clear();
            assertEquals(array1, array);
        } catch (Exception e) {
            assertSame(e, null);
        }
        // test wrapping
        array1.clear();
        array1.addAll(input);
        DataList dataList2 = new DataList();
        // with schema arg
        ArrayTemplate array2 = DataTemplateUtil.wrap(dataList2, schema, templateClass);
        for (E e : input) {
            if (e instanceof DataTemplate) {
                dataList2.add(((DataTemplate<?>) e).data());
            } else if (e instanceof Enum) {
                dataList2.add(e.toString());
            } else {
                dataList2.add(e);
            }
        }
        assertEquals(array1, array2);
        // without schema arg
        ArrayTemplate array2a = DataTemplateUtil.wrap(dataList2, templateClass);
        assertEquals(array1, array2a);
        assertSame(array2.data(), array2a.data());
        // schema()
        ArrayDataSchema schema1 = array1.schema();
        assertTrue(schema1 != null);
        assertEquals(schema1.getType(), DataSchema.Type.ARRAY);
        assertEquals(schema1, schema);
        // add(E element), get(int index)
        ArrayTemplate array3 = templateClass.newInstance();
        for (int i = 0; i < adds.size(); ++i) {
            E value = adds.get(i);
            assertTrue(array3.add(value));
            assertEquals(array3.get(i), value);
            assertSame(array3.get(i), value);
            assertTrue(array3.toString().contains(value.toString()));
        }
        assertEquals(array3, adds);
        // add(int index, E element), get(int index)
        ArrayTemplate array4 = templateClass.newInstance();
        for (int i = 0; i < adds.size(); ++i) {
            E value = adds.get(adds.size() - i - 1);
            array4.add(0, value);
            assertEquals(array4.get(0), value);
            assertSame(array4.get(0), value);
        }
        assertEquals(array4, adds);
        // clear(), isEmpty(), size()
        assertEquals(array4.size(), adds.size());
        assertFalse(array4.isEmpty());
        array4.clear();
        assertTrue(array4.isEmpty());
        assertEquals(array4.size(), 0);
        // equals()
        array4.clear();
        array4.addAll(input);
        assertTrue(array4.equals(array4));
        assertTrue(array4.equals(input));
        assertFalse(array4.equals(null));
        assertFalse(array4.equals(adds));
        for (int i = 0; i <= input.size(); ++i) {
            List<E> subList = input.subList(0, i);
            ArrayTemplate a = templateClass.newInstance();
            a.addAll(subList);
            if (i == input.size()) {
                assertTrue(array4.equals(subList));
                assertTrue(array4.equals(a));
            } else {
                assertFalse(array4.equals(subList));
                assertFalse(array4.equals(a));
            }
        }
        // hashcode()
        ArrayTemplate array5 = templateClass.newInstance();
        array5.addAll(input);
        assertEquals(array5.hashCode(), array5.data().hashCode());
        array5.addAll(adds);
        assertEquals(array5.hashCode(), array5.data().hashCode());
        array5.clear();
        int lastHash = 0;
        for (int i = 0; i < input.size(); ++i) {
            array5.add(input.get(i));
            int newHash = array5.hashCode();
            if (i > 0) {
                assertFalse(newHash == lastHash);
            }
            lastHash = newHash;
        }
        // indexOf(Object o), lastIndexOf(Object o)
        ArrayTemplate array6 = templateClass.newInstance();
        array6.addAll(adds);
        for (E e : adds) {
            assertEquals(array6.indexOf(e), adds.indexOf(e));
            assertEquals(array6.lastIndexOf(e), adds.lastIndexOf(e));
        }
        // remove(int index), subList(int fromIndex, int toIndex)
        ArrayTemplate array7 = templateClass.newInstance();
        array7.addAll(input);
        ArrayTemplate array8 = templateClass.newInstance();
        array8.addAll(input);
        for (int i = 0; i < input.size(); ++i) {
            array7.remove(0);
            assertEquals(array7, input.subList(i + 1, input.size()));
            assertEquals(array7, array8.subList(i + 1, input.size()));
        }
        // removeRange(int fromIndex, int toIndex), subList(int fromIndex, int toIndex)
        for (int from = 0; from < input.size(); ++from) {
            for (int to = from + 1; to <= input.size(); ++to) {
                ArrayTemplate arrayRemove = templateClass.newInstance();
                arrayRemove.addAll(input);
                InternalList<E> reference = new InternalList<E>(input);
                arrayRemove.removeRange(from, to);
                reference.removeRange(from, to);
                assertEquals(reference, arrayRemove);
            }
        }
        // set(int index, E element)
        ArrayTemplate array9 = templateClass.newInstance();
        array9.addAll(input);
        InternalList<E> reference9 = new InternalList<E>(input);
        for (int i = 0; i < input.size() / 2; ++i) {
            int k = input.size() - i - 1;
            E lo = array9.get(i);
            E hi = array9.get(k);
            E hiPrev = array9.set(k, lo);
            E loPrev = array9.set(i, hi);
            E refHiPrev = reference9.set(k, lo);
            E refLoPrev = reference9.set(i, hi);
            assertEquals(hiPrev, refHiPrev);
            assertEquals(loPrev, refLoPrev);
            assertEquals(array9.get(i), reference9.get(i));
            assertEquals(array9.get(k), reference9.get(k));
        }
        // clone and copy return types
        TestDataTemplateUtil.assertCloneAndCopyReturnType(templateClass);
        // clone
        Exception exc = null;
        ArrayTemplate array10 = templateClass.newInstance();
        array10.addAll(input);
        try {
            @SuppressWarnings("unchecked") ArrayTemplate array10Clone = (ArrayTemplate) array10.clone();
            assertTrue(array10Clone.getClass() == templateClass);
            assertEquals(array10Clone, array10);
            assertTrue(array10Clone != array10);
            for (int i = 0; i < array10.size(); i++) {
                assertSame(array10Clone.data().get(i), array10.data().get(i));
            }
            array10Clone.remove(0);
            assertEquals(array10Clone.size(), array10.size() - 1);
            assertFalse(array10Clone.equals(array10));
            assertTrue(array10.containsAll(array10Clone));
            array10.remove(0);
            assertEquals(array10Clone, array10);
        } catch (CloneNotSupportedException e) {
            exc = e;
        }
        assert (exc == null);
        // copy
        ArrayTemplate array10a = templateClass.newInstance();
        array10a.addAll(input);
        try {
            @SuppressWarnings("unchecked") ArrayTemplate array10aCopy = (ArrayTemplate) array10a.copy();
            assertTrue(array10aCopy.getClass() == templateClass);
            assertEquals(array10a, array10aCopy);
            boolean hasComplex = false;
            for (int i = 0; i < array10a.size(); i++) {
                if (array10a.data().get(i) instanceof DataComplex) {
                    assertNotSame(array10aCopy.data().get(i), array10a.data().get(i));
                    hasComplex = true;
                }
            }
            assertTrue(DataTemplate.class.isAssignableFrom(array10a._elementClass) == false || hasComplex);
            assertTrue(noCommonDataComplex(array10a.data(), array10aCopy.data()));
            boolean mutated = false;
            for (Object items : array10aCopy.data()) {
                mutated |= TestUtil.mutateChild(items);
            }
            assertEquals(mutated, hasComplex);
            if (mutated) {
                assertNotEquals(array10aCopy, array10a);
            } else {
                assertEquals(array10aCopy, array10a);
                array10aCopy.remove(0);
                assertNotEquals(array10aCopy, array10a);
            }
        } catch (CloneNotSupportedException e) {
            exc = e;
        }
        assert (exc == null);
        // contains
        for (int i = 0; i < input.size(); ++i) {
            ArrayTemplate array = templateClass.newInstance();
            E v = input.get(i);
            array.add(v);
            for (int k = 0; k < input.size(); ++k) {
                if (k == i)
                    assertTrue(array.contains(v));
                else
                    assertFalse(array.contains(input.get(k)));
            }
        }
        // containsAll
        ArrayTemplate arrayContainsAll = templateClass.newInstance();
        arrayContainsAll.addAll(input);
        arrayContainsAll.addAll(adds);
        InternalList<E> referenceContainsAll = new InternalList<E>(input);
        referenceContainsAll.addAll(adds);
        for (int from = 0; from < arrayContainsAll.size(); ++from) {
            for (int to = from + 1; to <= arrayContainsAll.size(); ++to) {
                boolean testResult = arrayContainsAll.containsAll(referenceContainsAll.subList(from, to));
                boolean referenceResult = referenceContainsAll.containsAll(referenceContainsAll.subList(from, to));
                assertEquals(testResult, referenceResult);
                assertTrue(testResult);
                assertTrue(referenceResult);
            }
            boolean testResult2 = arrayContainsAll.subList(from, arrayContainsAll.size()).containsAll(referenceContainsAll);
            boolean referenceResult2 = referenceContainsAll.subList(from, arrayContainsAll.size()).containsAll(referenceContainsAll);
            // out.println("from " + from + " test " + testResult2 + " ref " + referenceResult2);
            assertEquals(testResult2, referenceResult2);
        }
        // removeAll
        InternalList<E> referenceListRemoveAll = new InternalList<E>(input);
        referenceListRemoveAll.addAll(adds);
        for (int from = 0; from < referenceListRemoveAll.size(); ++from) {
            for (int to = from + 1; to <= referenceListRemoveAll.size(); ++to) {
                ArrayTemplate arrayRemoveAll = templateClass.newInstance();
                arrayRemoveAll.addAll(referenceListRemoveAll);
                InternalList<E> referenceRemoveAll = new InternalList<E>(referenceListRemoveAll);
                boolean testResult = arrayRemoveAll.removeAll(referenceListRemoveAll.subList(from, to));
                boolean referenceResult = referenceRemoveAll.removeAll(referenceListRemoveAll.subList(from, to));
                // out.println("from " + from + " to " + to + " test " + testResult + " " + arrayRemoveAll + " ref " + referenceResult + " " + referenceRemoveAll);
                assertEquals(arrayRemoveAll, referenceRemoveAll);
                assertEquals(testResult, referenceResult);
                assertTrue(testResult);
                assertTrue(referenceResult);
            }
        }
        // retainAll
        InternalList<E> referenceListRetainAll = new InternalList<E>(input);
        referenceListRetainAll.addAll(adds);
        for (int from = 0; from < referenceListRetainAll.size(); ++from) {
            for (int to = from + 1; to <= referenceListRetainAll.size(); ++to) {
                ArrayTemplate arrayRetainAll = templateClass.newInstance();
                arrayRetainAll.addAll(referenceListRetainAll);
                InternalList<E> referenceRetainAll = new InternalList<E>(referenceListRetainAll);
                boolean testResult = arrayRetainAll.removeAll(referenceListRetainAll.subList(from, to));
                boolean referenceResult = referenceRetainAll.removeAll(referenceListRetainAll.subList(from, to));
                // out.println("from " + from + " to " + to + " test " + testResult + " " + arrayRetainAll + " ref " + referenceResult + " " + referenceRetainAll);
                assertEquals(arrayRetainAll, referenceRetainAll);
                assertEquals(testResult, referenceResult);
                assertTrue(testResult);
                assertTrue(referenceResult);
            }
        }
        // Iterator
        ArrayTemplate arrayIt = templateClass.newInstance();
        arrayIt.addAll(input);
        arrayIt.addAll(adds);
        for (Iterator<E> it = arrayIt.iterator(); it.hasNext(); ) {
            it.next();
            it.remove();
        }
        assertTrue(arrayIt.isEmpty());
        // ListIterator hasNext, hasPrevious, next, previous
        ArrayTemplate arrayListIt = templateClass.newInstance();
        arrayListIt.addAll(input);
        arrayListIt.addAll(adds);
        for (int i = 0; i <= arrayListIt.size(); ++i) {
            ListIterator<E> it = arrayListIt.listIterator(i);
            if (i > 0) {
                int save = it.nextIndex();
                assertTrue(it.hasPrevious());
                assertEquals(it.previous(), arrayListIt.get(i - 1));
                it.next();
                assertEquals(it.nextIndex(), save);
            } else {
                assertFalse(it.hasPrevious());
            }
            if (i < arrayListIt.size()) {
                int save = it.previousIndex();
                assertTrue(it.hasNext());
                assertEquals(it.next(), arrayListIt.get(i));
                it.previous();
                assertEquals(it.previousIndex(), save);
            } else {
                assertFalse(it.hasNext());
            }
            assertEquals(it.nextIndex(), i);
            assertEquals(it.previousIndex(), i - 1);
        }
        // ListIterator remove
        for (ListIterator<E> it = arrayListIt.listIterator(); it.hasNext(); ) {
            it.next();
            it.remove();
        }
        assertTrue(arrayListIt.isEmpty());
        // ListIterator add
        arrayListIt.clear();
        {
            ListIterator<E> it = arrayListIt.listIterator();
            for (E e : adds) {
                it.add(e);
            }
        }
        assertEquals(arrayListIt, adds);
        // ListIterator set
        for (int i = 0; i < adds.size(); ++i) {
            ListIterator<E> it = arrayListIt.listIterator(i);
            it.next();
            E value = adds.get(adds.size() - i - 1);
            it.set(value);
        }
        for (int i = 0; i < adds.size(); ++i) {
            E value = adds.get(adds.size() - i - 1);
            assertEquals(arrayListIt.get(i), value);
        }
    } catch (InstantiationException exc) {
        fail("Unexpected exception", exc);
    } catch (IllegalAccessException exc) {
        fail("Unexpected exception", exc);
    }
}
Also used : DataComplex(com.linkedin.data.DataComplex) TestUtil.noCommonDataComplex(com.linkedin.data.TestUtil.noCommonDataComplex) ListIterator(java.util.ListIterator) DataList(com.linkedin.data.DataList) ArrayDataSchema(com.linkedin.data.schema.ArrayDataSchema)

Example 10 with ArrayDataSchema

use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.

the class TestArrayTemplate method testIntegerArray.

@Test
public void testIntegerArray() {
    ArrayDataSchema schema = (ArrayDataSchema) DataTemplateUtil.parseSchema("{ \"type\" : \"array\", \"items\" : \"int\" }");
    // must be unique
    List<Integer> input = Arrays.asList(1, 3, 5, 7, 11);
    List<Integer> adds = Arrays.asList(13, 17, 19);
    List<Object> badInput = asList(true, "hello", ByteString.empty(), new StringMap(), new StringArray(), null);
    List<Object> badOutput = asList(true, "hello", ByteString.empty(), new DataMap(), new DataList());
    testArray(IntegerArray.class, schema, input, adds);
    testArrayBadInput(IntegerArray.class, schema, input, badInput, badOutput);
    @SuppressWarnings("unchecked") List<? extends Number> castFrom = Arrays.asList(1L, 3.0f, 5.0, 7, 11);
    testNumberArray(IntegerArray.class, schema, input, castFrom);
}
Also used : ArrayDataSchema(com.linkedin.data.schema.ArrayDataSchema) DataList(com.linkedin.data.DataList) DataMap(com.linkedin.data.DataMap) Test(org.testng.annotations.Test)

Aggregations

ArrayDataSchema (com.linkedin.data.schema.ArrayDataSchema)42 Test (org.testng.annotations.Test)20 DataList (com.linkedin.data.DataList)16 RecordDataSchema (com.linkedin.data.schema.RecordDataSchema)16 DataMap (com.linkedin.data.DataMap)15 DataSchema (com.linkedin.data.schema.DataSchema)15 TyperefDataSchema (com.linkedin.data.schema.TyperefDataSchema)11 MapDataSchema (com.linkedin.data.schema.MapDataSchema)10 UnionDataSchema (com.linkedin.data.schema.UnionDataSchema)8 ArrayList (java.util.ArrayList)7 EnumDataSchema (com.linkedin.data.schema.EnumDataSchema)6 NamedDataSchema (com.linkedin.data.schema.NamedDataSchema)6 FixedDataSchema (com.linkedin.data.schema.FixedDataSchema)5 PrimitiveDataSchema (com.linkedin.data.schema.PrimitiveDataSchema)5 TestDataTemplateUtil (com.linkedin.data.template.TestDataTemplateUtil)5 ByteString (com.linkedin.data.ByteString)3 ParameterSchema (com.linkedin.restli.restspec.ParameterSchema)3 ComplexDataSchema (com.linkedin.data.schema.ComplexDataSchema)2 Name (com.linkedin.data.schema.Name)2 StringArray (com.linkedin.data.template.StringArray)2