package com.annimon.stream.streamtests;

import com.annimon.stream.Stream;
import com.annimon.stream.function.IndexedFunction;
import org.junit.Test;
import static com.annimon.stream.test.hamcrest.StreamMatcher.assertElements;
import static org.hamcrest.Matchers.contains;

public final class MapIndexedTest {

    @Test
    public void testMapIndexed() {
        Stream.rangeClosed(4, 8)
                .mapIndexed(new IndexedFunction<Integer, Integer>() {
                    @Override
                    public Integer apply(int index, Integer t) {
                        return index * t;
                    }
                })
                .custom(assertElements(contains(
                       0,  // (0 * 4)
                       5,  // (1 * 5)
                       12, // (2 * 6)
                       21, // (3 * 7)
                       32  // (4 * 8)
                )));
    }

    @Test
    public void testMapIndexedWithStartAndStep() {
        Stream.rangeClosed(4, 8)
                .mapIndexed(20, -5, new IndexedFunction<Integer, Integer>() {
                    @Override
                    public Integer apply(int index, Integer t) {
                        return index * t;
                    }
                })
                .custom(assertElements(contains(
                       80, // (20 * 4)
                       75, // (15 * 5)
                       60, // (10 * 6)
                       35, // (5  * 7)
                       0   // (0  * 8)
                )));
    }
}