@Test void shouldTreatDifferentListImplementationSimilar() { for ( ListValue list1 : equivalentLists ) { for ( ListValue list2 : equivalentLists ) { assertEqual( list1, list2 ); assertArrayEquals( list1.asArray(), list2.asArray(), format( "%s.asArray != %s.toArray", list1.getClass().getSimpleName(), list2.getClass().getSimpleName() ) ); } } }
@Test void shouldNotTreatDifferentListImplementationSimilarOfNonEquivalentListsSimilar() { for ( ListValue list1 : nonEquivalentLists ) { for ( ListValue list2 : nonEquivalentLists ) { if ( list1 == list2 ) { continue; } assertNotEqual( list1, list2 ); assertFalse( Arrays.equals( list1.asArray(), list2.asArray() ), format( "%s.asArray != %s.toArray", list1.getClass().getSimpleName(), list2.getClass().getSimpleName() ) ); } } } }
private void assertMapValueEquals( MapValue a, MapValue b ) { assertThat( a, equalTo( b ) ); assertThat( a.size(), equalTo( b.size() ) ); assertThat( a.hashCode(), equalTo( b.hashCode() ) ); assertThat( a.keySet(), containsInAnyOrder( Iterables.asArray( String.class, b.keySet() ) ) ); assertThat( Arrays.asList( a.keys().asArray() ), containsInAnyOrder( b.keys().asArray() ) ); a.foreach( ( k, v ) -> assertThat( b.get( k ), equalTo( v ) ) ); b.foreach( ( k, v ) -> assertThat( a.get( k ), equalTo( v ) ) ); }
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()) ); } }
@Test void shouldHandleSingleListConcatenation() { // Given ListValue inner = list( stringValue( "foo" ), longValue( 42 ), booleanValue( true ) ); // When ListValue concat = concat( inner ); // Then assertEquals(inner, concat); assertEquals(inner.hashCode(), concat.hashCode()); assertArrayEquals(inner.asArray(), concat.asArray()); }
@Test void shouldReverseList() { // Given ListValue inner = list( longValue( 5L ), longValue( 6L ), longValue( 7L ) ); // When ListValue reverse = inner.reverse(); // Then ListValue expected = list( longValue( 7L ), longValue( 6L ), longValue( 5L ) ); assertEquals( expected, reverse ); assertEquals( expected.hashCode(), reverse.hashCode() ); assertArrayEquals( expected.asArray(), reverse.asArray() ); } }
@Test void shouldFilterList() { // Given ListValue inner = list( NO_VALUE, longValue( 6L ), NO_VALUE, longValue( 8L ), longValue( 9L ), longValue( 11L ), NO_VALUE ); // When ListValue filter = inner.dropNoValues(); // Then ListValue expected = list( longValue( 6L ), longValue( 8L ), longValue( 9L ), longValue( 11L ) ); assertEquals( filter, expected ); assertEquals( filter.hashCode(), expected.hashCode() ); assertArrayEquals( filter.asArray(), expected.asArray() ); } }
@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 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 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()) ); }
@Test void shouldHandleMultipleListConcatenation() { // Given ListValue inner1 = list( stringValue( "foo" ), longValue( 42 ), booleanValue( true ) ); ListValue inner2 = list( list(stringValue("bar"), intValue(42)) ); ListValue inner3 = list( map("foo", 1337L, "bar", 42 ), stringValue("baz") ); // When ListValue concat = concat( inner1, inner2, inner3 ); // Then ListValue expected = list( stringValue( "foo" ), longValue( 42 ), booleanValue( true ), list( stringValue( "bar" ), intValue( 42 ) ), map( "foo", 1337L, "bar", 42 ), stringValue( "baz" ) ); assertEquals(expected, concat); assertEquals(expected.hashCode(), concat.hashCode()); assertArrayEquals(expected.asArray(), concat.asArray()); } }