public ListValue tail() { return slice( 1, size() ); }
public static ListValue fullSlice( AnyValue collection, AnyValue fromValue, AnyValue toValue ) { int from = asInt( fromValue ); int to = asInt( toValue ); ListValue list = makeTraversable( collection ); int size = list.size(); if ( from >= 0 && to >= 0 ) { return list.slice( from, to ); } else if ( from >= 0 ) { return list.slice( from, size + to ); } else if ( to >= 0 ) { return list.slice( size + from, to ); } else { return list.slice( size + from, size + to ); } }
@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()) ); }
@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()) ); }
@Test void shouldSliceList() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When ListValue slice = inner.slice(2, 4 ); // Then ListValue expected = list( longValue( 7L ), longValue( 8L ) ); assertEquals( expected, slice ); assertEquals( expected.hashCode(), slice.hashCode() ); assertArrayEquals( expected.asArray(), slice.asArray() ); assertTrue( iteratorsEqual(expected.iterator(), slice.iterator()) ); }
@Test void shouldHandleExceedingRange() { // 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 ListValue expected = list( longValue( 7L ), longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); assertEquals( expected, slice ); assertEquals( expected.hashCode(), slice.hashCode() ); assertArrayEquals( expected.asArray(), slice.asArray() ); assertTrue( iteratorsEqual(expected.iterator(), slice.iterator()) ); }
public ListValue tail() { return slice( 1, size() ); }
public static ListValue fullSlice( AnyValue collection, AnyValue fromValue, AnyValue toValue ) { int from = asInt( fromValue ); int to = asInt( toValue ); ListValue list = makeTraversable( collection ); int size = list.size(); if ( from >= 0 && to >= 0 ) { return list.slice( from, to ); } else if ( from >= 0 ) { return list.slice( from, size + to ); } else if ( to >= 0 ) { return list.slice( size + from, to ); } else { return list.slice( size + from, size + to ); } }