]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10430 add UT to explore file size impact similarity algo
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Wed, 14 Feb 2018 07:54:53 +0000 (08:54 +0100)
committerSonarTech <sonartech@sonarsource.com>
Mon, 28 May 2018 18:20:44 +0000 (20:20 +0200)
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/filemove/SourceSimilarityImplTest.java

index 0c0b08b3479e70357518fd31dc7194303753b643..5b5b84dd8f85a909c6cbf71780885a7f18479b90 100644 (file)
@@ -20,6 +20,8 @@
 package org.sonar.server.computation.task.projectanalysis.filemove;
 
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -55,6 +57,48 @@ public class SourceSimilarityImplTest {
     assertThat(underTest.score(asList("a", "b", "c"), asList("a"))).isEqualTo(33);
   }
 
+  @Test
+  public void finding_threshold_in_line_count_to_go_below_85_score() {
+    assertThat(underTest.score(listOf(100), listOf(115))).isEqualTo(86);
+    assertThat(underTest.score(listOf(100), listOf(116))).isEqualTo(86);
+    assertThat(underTest.score(listOf(100), listOf(117))).isEqualTo(85);
+    assertThat(underTest.score(listOf(100), listOf(118))).isEqualTo(84); // 84.74%
+
+    assertThat(underTest.score(listOf(50), listOf(58))).isEqualTo(86);
+    assertThat(underTest.score(listOf(50), listOf(59))).isEqualTo(84); // 84.74%
+
+    assertThat(underTest.score(listOf(25), listOf(29))).isEqualTo(86);
+    assertThat(underTest.score(listOf(25), listOf(30))).isEqualTo(83); // 83.33%
+
+    assertThat(underTest.score(listOf(12), listOf(14))).isEqualTo(85);
+    assertThat(underTest.score(listOf(12), listOf(15))).isEqualTo(80); // 80.00%
+
+    assertThat(underTest.score(listOf(10), listOf(11))).isEqualTo(90);
+    assertThat(underTest.score(listOf(10), listOf(12))).isEqualTo(83); // 83.33%
+
+    assertThat(underTest.score(listOf(5), listOf(5))).isEqualTo(100);
+    assertThat(underTest.score(listOf(5), listOf(6))).isEqualTo(83); // 83.33%
+
+    assertThat(underTest.score(listOf(200), listOf(234))).isEqualTo(85);
+    assertThat(underTest.score(listOf(200), listOf(236))).isEqualTo(84); // 84.75%
+
+    assertThat(underTest.score(listOf(300), listOf(352))).isEqualTo(85);
+    assertThat(underTest.score(listOf(300), listOf(354))).isEqualTo(84); // 84.74%
+
+    assertThat(underTest.score(listOf(400), listOf(470))).isEqualTo(85);
+    assertThat(underTest.score(listOf(400), listOf(471))).isEqualTo(84); // 84.92%
+
+    assertThat(underTest.score(listOf(500), listOf(588))).isEqualTo(85);
+    assertThat(underTest.score(listOf(500), listOf(589))).isEqualTo(84); // 84.88%
+  }
+
+  /**
+   * Creates a list of {@code numberOfElements} int values as String, starting with zero.
+   */
+  private static List<String> listOf(int numberOfElements) {
+    return IntStream.range(0, numberOfElements).mapToObj(String::valueOf).collect(Collectors.toList());
+  }
+
   @Test
   public void two_empty_lists_are_not_considered_as_equal() {
     assertThat(underTest.score(emptyList(), emptyList())).isEqualTo(0);