From 8fb7260770b12294becb3a4d33e7f7bca11b33d3 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Mon, 20 Jan 2020 15:38:48 +0100 Subject: [PATCH] OO-4483: remove debugging code, add unit test for special case --- .../highscore/manager/HighScoreManager.java | 18 +++----- .../highscore/HighScoreManagerTest.java | 44 +++++++++++++++++++ 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java b/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java index 36a5bcbfadb..a72273eb874 100644 --- a/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java +++ b/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java @@ -75,13 +75,11 @@ public class HighScoreManager { float buffer = -1; int index = 0; -// int rank = 1; double[] allScores = new double[allMembers.size()]; for (int j = 0; j < allMembers.size(); j++) { HighScoreTableEntry member = allMembers.get(j); if (member.getScore() < buffer){ index++; -// rank = j + 1; } //first three position are put in separate lists, exclude zero scorers if (index < 3 && member.getScore() > 0) { @@ -103,7 +101,7 @@ public class HighScoreManager { .filter(a -> a.getIdentity().equals(ownIdentity)) .collect(Collectors.toList())); - if (ownIdMembers.size() > 0) { + if (!ownIdMembers.isEmpty()) { log.info(Tracing.M_AUDIT, "2nd Highscore Table established"); } @@ -122,7 +120,7 @@ public class HighScoreManager { double min = Math.floor(Arrays.stream(scores).min().getAsDouble()); double range = max - min; // use original scores if range is too small else convert results to fit histogram - if (range <= 20 && range <0) { + if (range <= 20) { classwidth = 1; return new HighScoreRankingResults(scores, classwidth, min); } else { @@ -168,7 +166,7 @@ public class HighScoreManager { // allow one extension if no borders are defined primeRange = upperBorder - lowerBorder > 0; } - // steps can only be natural numbers + // steps can only be natural numbers classwidth = Math.round(range / numberofclasses); // modified scores are calculated and saved double[] allScores = new double[scores.length]; @@ -189,7 +187,7 @@ public class HighScoreManager { /** - * Calculate histogram cutvalue using results from the method (processHistogramData(double[])) + * Calculate histogram cut value using results from the method (processHistogramData(double[])) * * @param score the score * @return the double @@ -199,11 +197,9 @@ public class HighScoreManager { // determine n-th class to fit the current score result double n = Math.ceil((score - min) / classwidth); // calculate higher score to fit the class width - double cutvalue = min + (n * classwidth); - return cutvalue; - } else { - return score; - } + return min + (n * classwidth); + } + return score; } diff --git a/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java b/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java index 7c82bb9d517..90dd9be2243 100644 --- a/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java +++ b/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java @@ -24,6 +24,7 @@ * <p> */ package org.olat.course.highscore; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -39,6 +40,7 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import org.junit.Assert; import org.junit.Test; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; @@ -101,4 +103,46 @@ public class HighScoreManagerTest extends OlatTestCase { long classwidth = highScoreManager.processHistogramData(allScores, 0F, 30F).getClasswidth(); assertEquals(2L, classwidth); } + + @Test + public void highscoreTest_sameResults() { + List<AssessmentEntry> assessEntries = new ArrayList<>(); + + //Create entries, add to List + for (int i = 0; i < 10; i++) { + Identity assessedIdentity = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-2"); + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + String subIdent = UUID.randomUUID().toString(); + AssessmentEntry nodeAssessment = courseNodeAssessmentDao + .createAssessmentEntry(assessedIdentity, subIdent, entry, subIdent, entry); + nodeAssessment.setScore(new BigDecimal(8.0)); + dbInstance.commitAndCloseSession(); + AssessmentEntry reloadedAssessment = courseNodeAssessmentDao.loadAssessmentEntryById(nodeAssessment.getKey()); + assessEntries.add(reloadedAssessment); + } + + List<Integer> ownIdIndices = new ArrayList<>(); + List<HighScoreTableEntry> allMembers = new ArrayList<>(); + List<HighScoreTableEntry> ownIdMembers = new ArrayList<>(); + List<List<HighScoreTableEntry>> allPodium = new ArrayList<>(); + allPodium.add(new ArrayList<>()); + allPodium.add(new ArrayList<>()); + allPodium.add(new ArrayList<>()); + + double[] allScores = highScoreManager.sortRankByScore(assessEntries, allMembers, ownIdMembers, allPodium, + ownIdIndices, 5, JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-2")) + .getScores(); + for(int i=allScores.length; i-->0; ) { + Assert.assertEquals(8.0d, allScores[i], 0.00001d); + } + + double[] histogramData = highScoreManager.processHistogramData(allScores, 0F, 30F).getModifiedScores(); + assertNotNull(histogramData); + for(int i=allScores.length; i-->0; ) { + Assert.assertEquals(8.0d, allScores[i], 0.00001d); + } + + long classwidth = highScoreManager.processHistogramData(allScores, 0F, 30F).getClasswidth(); + assertEquals(1l, classwidth); + } } \ No newline at end of file -- GitLab