package com.tek271.funj;
import com.google.common.collect.Lists;
import static com.tek271.funj.Reducer.ReduceFunction;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import java.util.List;
public class ReducerTest {
@Test
public void reduceAppliesFunctionOnList() {
List<Integer> list = Lists.newArrayList(1, 2, 3);
Integer sum = Reducer.reduce(list, new Adder(), 0);
assertEquals(6, sum.intValue());
}
@Test
public void reduceReturnsInitialValueIfListIsEmpty() {
List<Integer> list = Lists.newArrayList();
Integer sum = Reducer.reduce(list, new Adder(), 0);
assertEquals(0, sum.intValue());
}
@Test
public void reduceReturnsInitialValueIfListIsNull() {
List<Integer> list = null;
Integer sum = Reducer.reduce(list, new Adder(), 0);
assertEquals(0, sum.intValue());
}
@Test
public void reduceRightAppliesFunctionAtEndOfList() {
List<Integer> list = Lists.newArrayList(10, 3, 1);
Integer sub = Reducer.reduceRight(list, new Substractor(), 16);
assertEquals(2, sub.intValue());
}
@Test
public void reduceRightReturnsInitialValueIfListIsEmpty() {
List<Integer> list = Lists.newArrayList();
Integer sub = Reducer.reduceRight(list, new Substractor(), 16);
assertEquals(16, sub.intValue());
}
@Test
public void reduceRightReturnsInitialValueIfListIsNull() {
List<Integer> list = Lists.newArrayList();
Integer sub = Reducer.reduceRight(list, new Substractor(), 16);
assertEquals(16, sub.intValue());
}
public class Adder implements ReduceFunction<Integer> {
@Override
public Integer reduceValue(Integer buffer, Integer value) {
return buffer + value;
}
}
public class Substractor implements ReduceFunction<Integer> {
@Override
public Integer reduceValue(Integer buffer, Integer value) {
return buffer - value;
}
}
}