private int randomAccessCompareTo( Comparator<AnyValue> comparator, ListValue otherList ) { int x = Integer.compare( this.length(), otherList.length() ); if ( x == 0 ) { for ( int i = 0; i < length(); i++ ) { x = comparator.compare( this.value( i ), otherList.value( i ) ); if ( x != 0 ) { return x; } } } return x; }
@Override public boolean hasNext() { return count < size(); }
@Test void shouldHandleNegativeStart() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue slice = inner.slice( -2, 400000 ); // Then assertEquals( inner, slice ); assertEquals( inner.hashCode(), slice.hashCode() ); assertArrayEquals( inner.asArray(), slice.asArray() ); assertTrue( iteratorsEqual(inner.iterator(), slice.iterator()) ); }
@Override public String toString() { StringBuilder sb = new StringBuilder( getTypeName() + "{" ); int i = 0; for ( ; i < size() - 1; i++ ) { sb.append( value( i ) ); sb.append( ", " ); } if ( size() > 0 ) { sb.append( value( i ) ); } sb.append( '}' ); return sb.toString(); }
@Override public Iterator<AnyValue> iterator() { switch ( base.iterationPreference() ) { case RANDOM_ACCESS: return super.iterator(); case ITERATION: return Iterators.prependTo( base.iterator(), prepended ); default: throw new IllegalStateException( "unknown iteration preference" ); } } }
@Test void shouldBeAbleToDropFromList() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue drop = inner.drop( 4 ); // Then ListValue expected = list( longValue( 9L ), longValue( 10L ), longValue( 11L ) ); assertEquals( expected, drop ); assertEquals( expected.hashCode(), drop.hashCode() ); assertArrayEquals( expected.asArray(), drop.asArray() ); assertTrue( iteratorsEqual(expected.iterator(), drop.iterator()) ); }
@Test void shouldBeAbleToTakeFromList() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue take = inner.take( 3 ); // Then ListValue expected = list( longValue( 5L ), longValue( 6L ), longValue( 7L ) ); assertEquals( expected, take ); assertEquals( expected.hashCode(), take.hashCode() ); assertArrayEquals( expected.asArray(), take.asArray() ); assertTrue( iteratorsEqual(expected.iterator(), take.iterator()) ); } }
@Test void shouldReturnEmptyListIfEmptyRange() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue slice = inner.slice( 4, 2 ); // Then assertEquals( slice, EMPTY_LIST ); assertTrue( iteratorsEqual(slice.iterator(), EMPTY_LIST.iterator()) ); }
private void assertListValuesEquals( ListValue appended, ListValue expected ) { assertEquals( expected, appended ); assertEquals( expected.hashCode(), appended.hashCode() ); assertArrayEquals( expected.asArray(), appended.asArray() ); assertTrue( iteratorsEqual(expected.iterator(), appended.iterator()) ); } }
@Override public AnyValue value( int offset ) { return inner.value( offset + from ); }
@Test void shouldHandleEmptyAppend() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue appended = inner.append( ); // Then assertListValuesEquals( appended, inner ); }
@Test void shouldHandleEmptyPrepend() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue prepend = inner.prepend( ); // Then assertListValuesEquals( prepend, inner ); }
@Test void shouldAppendToListWithDroppedNull() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), NO_VALUE, longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue appended = inner.dropNoValues().append( longValue( 12L ), longValue( 13L ), longValue( 14L ) ); // Then ListValue expected = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ), longValue( 12L ), longValue( 13L ), longValue( 14L )); assertListValuesEquals( appended, expected ); }
@Test void shouldPrependToListWithDroppedNull() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), NO_VALUE, longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue appended = inner.dropNoValues().prepend( longValue( 2L ), longValue( 3L ), longValue( 4L ) ); // Then ListValue expected = list( longValue( 2L ), longValue( 3L ), longValue( 4L ), longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); assertListValuesEquals( appended, expected ); }