package uk.ac.ox.zoo.seeg.abraid.mp.common.util.raster;
import org.apache.commons.lang.math.DoubleRange;
import org.junit.Test;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import static com.googlecode.catchexception.CatchException.catchException;
import static com.googlecode.catchexception.CatchException.caughtException;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for BinningRasterSummaryCollator.
* Copyright (c) 2015 University of Oxford
*/
public class BinningRasterSummaryCollatorTest {
@Test
public void collatorGetsCorrectResult() throws IOException {
// Arrange
DoubleRange lowBin = new DoubleRange(0, 3.5);
DoubleRange middleBin = new DoubleRange(3.5, 7);
DoubleRange highBin = new DoubleRange(7, 10);
BinningRasterSummaryCollator target = new BinningRasterSummaryCollator(Arrays.asList(
lowBin, middleBin, highBin
));
// Act
target.addValue(7);
target.addValue(7);
target.addValue(5);
target.addValue(9);
target.addValue(2);
target.addValue(3);
Map<DoubleRange, Integer> result = target.getSummary();
// Assert
assertThat(result.get(lowBin)).isEqualTo(2);
assertThat(result.get(middleBin)).isEqualTo(3);
assertThat(result.get(highBin)).isEqualTo(1);
assertThat(result).hasSize(3);
}
@Test
public void collatorGetsCorrectResultForZeroWidthBins() throws IOException {
// Arrange
DoubleRange bin7 = new DoubleRange(7, 7);
DoubleRange bin5 = new DoubleRange(5, 5);
DoubleRange bin9 = new DoubleRange(9, 9);
DoubleRange bin3 = new DoubleRange(3, 3);
DoubleRange bin2 = new DoubleRange(2, 2);
BinningRasterSummaryCollator target = new BinningRasterSummaryCollator(Arrays.asList(
bin7, bin5, bin9, bin3, bin2
));
// Act
target.addValue(7);
target.addValue(7);
target.addValue(5);
target.addValue(9);
target.addValue(2);
target.addValue(3);
Map<DoubleRange, Integer> result = target.getSummary();
// Assert
assertThat(result.get(bin7)).isEqualTo(2);
assertThat(result.get(bin5)).isEqualTo(1);
assertThat(result.get(bin9)).isEqualTo(1);
assertThat(result.get(bin3)).isEqualTo(1);
assertThat(result.get(bin2)).isEqualTo(1);
assertThat(result).hasSize(5);
}
@Test
public void collatorThrowsIfValueOutsideAllBins() throws IOException {
// Arrange
BinningRasterSummaryCollator target = new BinningRasterSummaryCollator(Arrays.asList(
new DoubleRange(0, 10)
));
// Act
catchException(target).addValue(11);
// Assert
assertThat(caughtException()).isInstanceOf(IOException.class);
}
}