From 9bcc65b0ef47082a5dafcbfed889fb6d4b349e3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 25 May 2010 23:05:47 +0200 Subject: [PATCH] ItEr58S04ValidacionEProbasFuncionaisItEr57S04: [Bug #470] Fix bug. If shares are zero, the remainder can be bigger than the number of shares --- .../business/common/ProportionalDistributor.java | 3 ++- .../business/common/ProportionalDistributorTest.java | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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(