Search in sources :

Example 11 with DataList

use of com.linkedin.data.DataList in project rest.li by linkedin.

the class TestArrayTemplate method testBytesArray.

@Test
public void testBytesArray() {
    ArrayDataSchema schema = (ArrayDataSchema) DataTemplateUtil.parseSchema("{ \"type\" : \"array\", \"items\" : \"bytes\" }");
    List<ByteString> input = Arrays.asList(ByteString.copyAvroString("1", false), ByteString.copyAvroString("3", false), ByteString.copyAvroString("5", false), ByteString.copyAvroString("7", false), ByteString.copyAvroString("11", false));
    List<ByteString> adds = Arrays.asList(ByteString.copyAvroString("13", false), ByteString.copyAvroString("17", false), ByteString.copyAvroString("19", false));
    List<Object> badInput = asList(true, 99, 999L, 88.0f, 888.0, "\u0100", new StringMap(), new StringArray(), null);
    List<Object> badOutput = asList(true, 99, 999L, 88.0f, 888.0, "\u0100", new DataMap(), new DataList());
    testArray(BytesArray.class, schema, input, adds);
    testArrayBadInput(BytesArray.class, schema, input, badInput, badOutput);
}
Also used : ArrayDataSchema(com.linkedin.data.schema.ArrayDataSchema) DataList(com.linkedin.data.DataList) ByteString(com.linkedin.data.ByteString) DataMap(com.linkedin.data.DataMap) Test(org.testng.annotations.Test)

Example 12 with DataList

use of com.linkedin.data.DataList 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 13 with DataList

use of com.linkedin.data.DataList in project rest.li by linkedin.

the class TestArrayTemplate method testFooRecordArray.

@Test
public void testFooRecordArray() {
    List<FooRecord> input = new ArrayList<>();
    for (int i = 0; i < 5; ++i) {
        input.add(new FooRecord());
        input.get(i).setBar("input " + i);
    }
    List<FooRecord> adds = new ArrayList<>();
    for (int i = 0; i < 5; ++i) {
        adds.add(new FooRecord());
        adds.get(i).setBar("add " + i);
    }
    List<Object> badInput = asList(true, 1, 2L, 3.0f, 4.0, ByteString.empty(), new StringMap(), new StringArray(), null);
    List<Object> badOutput = asList(true, 1, 2L, 3.0f, 4.0, ByteString.empty(), new DataList());
    testArray(FooRecordArray.class, FooRecordArray.SCHEMA, input, adds);
    testArrayBadInput(FooRecordArray.class, FooRecordArray.SCHEMA, input, badInput, badOutput);
}
Also used : DataList(com.linkedin.data.DataList) ArrayList(java.util.ArrayList) Test(org.testng.annotations.Test)

Example 14 with DataList

use of com.linkedin.data.DataList 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));
            Object getValue = array3.get(i);
            assertEquals(array3.get(i), value);
            assertSame(array3.get(i), getValue);
            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);
            Object getValue = array4.get(0);
            assertEquals(array4.get(0), value);
            assertSame(array4.get(0), getValue);
        }
        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<>(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<>(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<>(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<>(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<>(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<>(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<>(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 15 with DataList

use of com.linkedin.data.DataList in project rest.li by linkedin.

the class TestDataObjectToObjectCache method testValueOverwrite.

@Test
public void testValueOverwrite() {
    DataObjectToObjectCache<DataTemplate<?>> testCache = new DataObjectToObjectCache<>();
    DataMap mapKey = new DataMap();
    DataList listKey = new DataList();
    Object objKey = new Object();
    testCache.put(mapKey, new Bar());
    testCache.put(listKey, new Bar());
    testCache.put(objKey, new Bar());
    Bar mapBar = new Bar();
    Bar listBar = new Bar();
    Bar objBar = new Bar();
    testCache.put(mapKey, mapBar);
    testCache.put(listKey, listBar);
    testCache.put(objKey, objBar);
    Assert.assertSame(testCache.get(mapKey), mapBar);
    Assert.assertSame(testCache.get(listKey), listBar);
    Assert.assertSame(testCache.get(objKey), objBar);
}
Also used : DataList(com.linkedin.data.DataList) DataMap(com.linkedin.data.DataMap) Test(org.testng.annotations.Test)

Aggregations

DataList (com.linkedin.data.DataList)202 DataMap (com.linkedin.data.DataMap)151 Test (org.testng.annotations.Test)109 ByteString (com.linkedin.data.ByteString)72 TestUtil.dataMapFromString (com.linkedin.data.TestUtil.dataMapFromString)34 TestUtil.dataSchemaFromString (com.linkedin.data.TestUtil.dataSchemaFromString)33 ArrayList (java.util.ArrayList)27 ArrayDataSchema (com.linkedin.data.schema.ArrayDataSchema)22 RecordDataSchema (com.linkedin.data.schema.RecordDataSchema)15 DataSchema (com.linkedin.data.schema.DataSchema)14 RecordTemplate (com.linkedin.data.template.RecordTemplate)14 HashMap (java.util.HashMap)13 MapDataSchema (com.linkedin.data.schema.MapDataSchema)12 TestUtil.asReadOnlyDataMap (com.linkedin.data.TestUtil.asReadOnlyDataMap)11 Map (java.util.Map)11 List (java.util.List)10 DataProvider (org.testng.annotations.DataProvider)10 DataComplex (com.linkedin.data.DataComplex)9 EnumDataSchema (com.linkedin.data.schema.EnumDataSchema)5 UnionDataSchema (com.linkedin.data.schema.UnionDataSchema)5