assertEquals( 0, caching.position() ); assertTrue( caching.hasNext() ); assertEquals( 0, caching.position() ); assertFalse( caching.hasPrevious() ); assertEquals( (Integer) 0, caching.next() ); assertEquals( (Integer) 2, caching.next() ); assertEquals( (Integer) 2, caching.current() ); assertEquals( (Integer) 3, (Integer) caching.position() ); assertEquals( (Integer) 2, caching.current() ); assertTrue( caching.hasPrevious() ); assertEquals( (Integer) 2, caching.previous() ); assertEquals( (Integer) 2, caching.current() ); assertEquals( (Integer) 2, (Integer) caching.position() ); assertEquals( (Integer) 1, caching.previous() ); assertEquals( (Integer) 1, caching.current() ); assertEquals( (Integer) 1, (Integer) caching.position() ); assertEquals( (Integer) 0, caching.previous() ); assertEquals( (Integer) 0, (Integer) caching.position() ); assertFalse( caching.hasPrevious() ); assertThrows( IllegalArgumentException.class, () -> caching.position( -1 ), "Shouldn't be able to set a lower value than 0" ); assertEquals( 0, caching.position( 3 ) ); assertTrue( caching.hasPrevious() ); assertEquals( (Integer) 4, caching.next() ); assertEquals( 5, caching.position() ); assertEquals( (Integer) 4, caching.previous() );