import org.junit.Test;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.*;
public class PartitionSortRepeatsTest {
private Map<Integer, AtomicInteger> expected;
private List<PartitionSortRepeats.Person> people;
@Test
public void groupByAge() throws Exception {
expected = new HashMap<>();
expected.put(23, new AtomicInteger(2));
expected.put(25, new AtomicInteger(3));
expected.put(26, new AtomicInteger(2));
people = Arrays.asList(
new PartitionSortRepeats.Person(25, "Rita"),
new PartitionSortRepeats.Person(23, "Felipe"),
new PartitionSortRepeats.Person(25, "Vera"),
new PartitionSortRepeats.Person(25, "Nathan"),
new PartitionSortRepeats.Person(26, "Daniel"),
new PartitionSortRepeats.Person(23, "Zach"),
new PartitionSortRepeats.Person(26, "Tom")
);
test(expected, people);
}
private void test(Map<Integer, AtomicInteger> map, List<PartitionSortRepeats.Person> people) {
PartitionSortRepeats.groupByAge(people);
int current = -1;
try {
for (PartitionSortRepeats.Person person : people ) {
if (current != person.age && map.get(person.age) != null) {
if (0 == map.get(person.age).decrementAndGet())
map.remove(person.age);
current = person.age;
} else if (map.get(person.age) != null) {
map.get(person.age).getAndDecrement();
} else {
throw new AssertionError(person.age);
}
}
} catch (AssertionError e) {
fail("Age "+e.getMessage()+" was not present");
}
}
}