From b6d57dd7af79777ed69d4f56fd0499591fcf1c8a Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Fri, 12 Jun 2015 12:34:30 +0200
Subject: [PATCH] Fix sonar issue: floating point equality test

---
 .../domain/PointBasedLearningProgress.java    |  8 +++----
 .../PointBasedLearningProgressTest.java       | 23 +++++++++++++++++++
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java b/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java
index 72be81b2a..a2d574a9d 100644
--- a/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java
+++ b/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java
@@ -40,9 +40,9 @@ public class PointBasedLearningProgress extends VariantLearningProgress {
 	}
 
 	private int coursePercentage() {
-		final double courseMaximumValue = courseScore.getMaximumScore();
-		final double userTotalValue = courseScore.getTotalUserScore();
-		final double numUsers = courseScore.getTotalUserCount();
+		final int courseMaximumValue = courseScore.getMaximumScore();
+		final int userTotalValue = courseScore.getTotalUserScore();
+		final int numUsers = courseScore.getTotalUserCount();
 		if (courseMaximumValue == 0 || numUsers == 0) {
 			return 0;
 		}
@@ -62,7 +62,7 @@ public class PointBasedLearningProgress extends VariantLearningProgress {
 	}
 
 	private int myPercentage(User user) {
-		final double courseMaximumValue = courseScore.getMaximumScore();
+		final int courseMaximumValue = courseScore.getMaximumScore();
 		final double userTotalValue = courseScore.getTotalUserScore(user);
 		if (courseMaximumValue == 0) {
 			return 0;
diff --git a/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java b/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java
index 5b9b0cde3..06348c139 100644
--- a/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java
+++ b/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java
@@ -81,6 +81,29 @@ public class PointBasedLearningProgressTest {
 		assertEquals(0, myPrepProgress.getMyProgress());
 	}
 
+	@Test
+	public void shouldNotContainRoundingErrors() {
+		// Total of 300 Points
+		String q1 = this.addQuestion("lecture", 100);
+		String q2 = this.addQuestion("lecture", 100);
+		String q3 = this.addQuestion("lecture", 100);
+		User u1 = new TestUser("user1");
+		User u2 = new TestUser("user2");
+		// Both users achieve 200 points
+		this.addAnswer(q1, u1, 100);
+		this.addAnswer(q1, u2, 100);
+		this.addAnswer(q2, u1, 0);
+		this.addAnswer(q2, u2, 0);
+		this.addAnswer(q3, u1, 100);
+		this.addAnswer(q3, u2, 100);
+
+		lp.setQuestionVariant("lecture");
+		LearningProgressValues u1LectureProgress = lp.getMyProgress(null, u1);
+		// 200 / 300 = 0,67
+		assertEquals(67, u1LectureProgress.getCourseProgress());
+		assertEquals(67, u1LectureProgress.getMyProgress());
+	}
+
 	@Test
 	public void shouldConsiderAnswersOfSamePiRound() {
 		User u1 = new TestUser("user1");
-- 
GitLab