diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/ProportionalDistributor.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/ProportionalDistributor.java index 1fed4ddbe..e7460325e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/ProportionalDistributor.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/ProportionalDistributor.java @@ -117,7 +117,8 @@ public class ProportionalDistributor { .transform(difference(currentProportions)); Collections.sort(transform, Collections.reverseOrder()); for (int i = 0; i < remaining; i++) { - ProportionWithPosition proportionWithPosition = transform.get(i); + ProportionWithPosition proportionWithPosition = transform.get(i + % currentProportions.length); result[proportionWithPosition.position] = result[proportionWithPosition.position] + 1; } } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/common/ProportionalDistributorTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/common/ProportionalDistributorTest.java index 8230ee1ac..32750ba48 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/common/ProportionalDistributorTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/common/ProportionalDistributorTest.java @@ -63,6 +63,15 @@ public class ProportionalDistributorTest { assertThat(distributor.distribute(100), equalToDistribution(50, 50, 0)); } + @Test + public void ifNoSharesProvidedItDistributesEqually() { + ProportionalDistributor distributor = ProportionalDistributor.create(0, + 0, 0, 0); + assertThat(distributor.distribute(4), equalToDistribution(1, 1, 1, 1)); + assertThat(distributor.distribute(5), equalToDistribution(2, 1, 1, 1)); + assertThat(distributor.distribute(6), equalToDistribution(2, 2, 1, 1)); + } + @Test public void disputedPartGoesToFirstIfEqualWeight() { ProportionalDistributor distributor = ProportionalDistributor.create(