content: package com.annimon.stream.streamtests;
  
  import com.annimon.stream.Functions;
  import com.annimon.stream.IntPair;
  import com.annimon.stream.Stream;
  import com.annimon.stream.function.Function;
  import org.junit.Test;
  import static com.annimon.stream.test.hamcrest.StreamMatcher.assertElements;
  import static org.hamcrest.MatcherAssert.assertThat;
  import static org.hamcrest.Matchers.contains;
  import static org.hamcrest.Matchers.is;
  
  public final class IndexedTest {
  
      @Test
      public void testIndexed() {
          int[] expectedIndices = new int[] {0, 1, 2, 3};
          int[] actualIndices = Stream.of("a", "b", "c", "d")
                  .indexed()
                  .mapToInt(Functions.<String>intPairIndex())
                  .toArray();
          assertThat(actualIndices, is(expectedIndices));
      }
  
      @Test
      public void testIndexedCustomStep() {
          int[] expectedIndices = new int[] {-10, -15, -20, -25};
          int[] actualIndices = Stream.of("a", "b", "c", "d")
                  .indexed(-10, -5)
                  .mapToInt(Functions.<String>intPairIndex())
                  .toArray();
          assertThat(actualIndices, is(expectedIndices));
      }
  
      @Test
      public void testIndexedReverse() {
          Stream.of("first", "second", "third", "fourth", "fifth")
                  .indexed(0, -1)
                  .sortBy(new Function<IntPair<String>, Integer>() {
                      @Override
                      public Integer apply(IntPair<String> t) {
                          return t.getFirst();
                      }
                  })
                  .map(new Function<IntPair<String>, String>() {
  
                      @Override
                      public String apply(IntPair<String> t) {
                          return t.getSecond();
                      }
                  })
                  .custom(assertElements(contains(
                          "fifth", "fourth", "third", "second", "first"
                  )));
      }
  }
  