From a3223248e37e2f3efb09c009a5fcaf79ab6baf67 Mon Sep 17 00:00:00 2001 From: domi41 Date: Fri, 24 Apr 2026 22:51:49 +0200 Subject: [PATCH 1/3] config: update the gradle wrapper --- build.gradle | 4 +++- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 3519cae..aa681a3 100644 --- a/build.gradle +++ b/build.gradle @@ -10,9 +10,11 @@ apply plugin: 'java-library' // In this section we declare where to find the dependencies of our project repositories { - // Use jcenter for resolving our dependencies. // We can declare any Maven/Ivy/file repository here. + + // Use jcenter for resolving our dependencies. //jcenter() + mavenCentral() } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5be06f5..de5ecef 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists From aee96b12b63cea5e17ff6abbd991235eee552d32 Mon Sep 17 00:00:00 2001 From: domi41 Date: Fri, 24 Apr 2026 22:53:06 +0200 Subject: [PATCH 2/3] docs: document how to show the full stacktrace in case of test errors --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ec7be3..beb1c07 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ ResultInterface result = mj.deliberate(tally); Install [maven](https://maven.apache.org), and run: - mvn test + mvn test -DtrimStackTrace=false > Maven is available as a debian package: `apt install maven` From 49ceb78239bbed2b090abbc98283d66dc94ab846 Mon Sep 17 00:00:00 2001 From: domi41 Date: Fri, 24 Apr 2026 22:53:28 +0200 Subject: [PATCH 3/3] feat: support tallies with no ballots --- .../mj/MajorityJudgmentDeliberator.java | 4 ++++ .../mj/MajorityJudgmentDeliberatorTest.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/fr/mieuxvoter/mj/MajorityJudgmentDeliberator.java b/src/main/java/fr/mieuxvoter/mj/MajorityJudgmentDeliberator.java index 2d96201..584d20e 100644 --- a/src/main/java/fr/mieuxvoter/mj/MajorityJudgmentDeliberator.java +++ b/src/main/java/fr/mieuxvoter/mj/MajorityJudgmentDeliberator.java @@ -335,6 +335,10 @@ private Double adjustMeritToAffine( BigInteger amountOfJudges, int amountOfGrades ) { + if (maxMerit.compareTo(BigInteger.ZERO) == 0) { + return 0.0; + } + double meritNormalized = (new BigDecimal(merit).divide( new BigDecimal(maxMerit), 15, RoundingMode.HALF_EVEN )).doubleValue(); diff --git a/src/test/java/fr/mieuxvoter/mj/MajorityJudgmentDeliberatorTest.java b/src/test/java/fr/mieuxvoter/mj/MajorityJudgmentDeliberatorTest.java index a6681ec..8fe2ff6 100644 --- a/src/test/java/fr/mieuxvoter/mj/MajorityJudgmentDeliberatorTest.java +++ b/src/test/java/fr/mieuxvoter/mj/MajorityJudgmentDeliberatorTest.java @@ -628,6 +628,22 @@ public void execute() throws Throwable { assertTrue(caught, "An exception is raised"); } + @Test + @DisplayName("Allow no ballots") + void testNoBallots() { + Integer amountOfJudges = 0; + DeliberatorInterface mj = new MajorityJudgmentDeliberator(); + TallyInterface tally = + new Tally( + new ProposalTallyInterface[]{ + new ProposalTally(new Integer[]{0, 0, 0}), + new ProposalTally(new Integer[]{0, 0, 0}), + }, + amountOfJudges + ); + mj.deliberate(tally); + } + // … /**