package org.openlca.core.results;
import org.junit.Assert;
import org.junit.Test;
import org.openlca.core.model.Location;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ContributionsTest {
@Test
public void testSetNullAsRest() {
Location loc = new Location();
Set<Location> items = new HashSet<>();
items.add(loc);
items.add(null);
ContributionSet<Location> set = Contributions.calculate(items, 2,
new Contributions.Function<Location>() {
@Override
public double value(Location t) {
return 1;
}
});
ContributionItem<?> item = set.getContribution(null);
Assert.assertNull(item.item);
Assert.assertEquals(1, item.amount, 1e-27);
Assert.assertEquals(0.5, item.share, 1e-27);
Assert.assertTrue(item.rest);
}
@Test
public void testSort() {
List<ContributionItem<String>> items = createSampleItems();
Contributions.sortAscending(items);
checkAmounts(items, 0, 1, 1, 2, 2);
Contributions.sortDescending(items);
checkAmounts(items, 2, 2, 1, 1, 0);
}
@Test
public void testTopWithRest() {
List<ContributionItem<String>> rawItems = createSampleItems();
List<ContributionItem<String>> items = Contributions.topWithRest(rawItems, 6);
checkAmounts(items, 2, 2, 1, 1, 0);
items = Contributions.topWithRest(rawItems, 3);
checkAmounts(items, 2, 2, 2);
Assert.assertEquals(true, items.get(2).rest);
items = Contributions.topWithRest(rawItems, 1);
checkAmounts(items, 6);
Assert.assertEquals(true, items.get(0).rest);
}
private <T> void checkAmounts(List<ContributionItem<T>> items,
double... values) {
Assert.assertEquals(values.length, items.size());
for (int i = 0; i < items.size(); i++)
Assert.assertEquals(values[i], items.get(i).amount, 1e-16);
}
private List<ContributionItem<String>> createSampleItems() {
List<ContributionItem<String>> items = new ArrayList<>();
for (int i = 1; i < 6; i++) {
ContributionItem<String> item = new ContributionItem<>();
item.amount = (double) (i % 3);
item.item = "item_" + i;
items.add(item);
}
return items;
}
}