• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ljacqu / wordeval / 14540892325

18 Apr 2025 07:50PM UTC coverage: 51.4% (-12.1%) from 63.456%
14540892325

push

github

ljacqu
Merge remote-tracking branch 'origin/master' into dependencies

239 of 546 branches covered (43.77%)

93 of 383 new or added lines in 27 files covered. (24.28%)

5 existing lines in 4 files now uncovered.

679 of 1321 relevant lines covered (51.4%)

3.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

59.38
/src/main/java/ch/jalu/wordeval/evaluators/impl/ConsecutiveLetterPairs.java
1
package ch.jalu.wordeval.evaluators.impl;
2

3
import ch.jalu.wordeval.dictionary.Word;
4
import ch.jalu.wordeval.evaluators.WordEvaluator;
5
import ch.jalu.wordeval.evaluators.result.WordWithScore;
6
import com.google.common.collect.ArrayListMultimap;
7
import com.google.common.collect.ListMultimap;
8
import lombok.Getter;
9

10
import java.util.ArrayList;
11
import java.util.Comparator;
12
import java.util.HashSet;
13
import java.util.List;
14
import java.util.Set;
15

16
/**
17
 * Finds words with multiple consecutive letter groups following each other,
18
 * e.g. <code>voorraaddrakoste</code> in Afrikaans (oo + rr + aa + dd = 4).
19
 */
20
public class ConsecutiveLetterPairs implements WordEvaluator {
2✔
21

22
  @Getter
6✔
23
  private final List<WordWithScore> results = new ArrayList<>();
24

25
  @Override
26
  public void evaluate(Word wordObject) {
27
    String word = wordObject.getWithoutAccents();
3✔
28

29
    int letterCounter = 0;
2✔
30
    int pairCounter = 0;
2✔
31
    char lastChar = '\0';
2✔
32
    for (int i = 0; i <= word.length(); ++i) {
8✔
33
      if (i < word.length() && word.charAt(i) == lastChar) {
9✔
34
        ++letterCounter;
1✔
35
        continue;
1✔
36
      }
37
      if (letterCounter > 1) {
3✔
38
        ++pairCounter;
1✔
39
      }
40
      if (letterCounter <= 1 || i == word.length()) {
7✔
41
        if (pairCounter > 1) {
3✔
42
          results.add(new WordWithScore(wordObject, pairCounter));
10✔
43
        }
44
        pairCounter = 0;
2✔
45
      }
46
      lastChar = (i < word.length()) ? word.charAt(i) : '\0';
10✔
47
      letterCounter = 1;
2✔
48
    }
49
  }
1✔
50

51
  @Override
52
  public ListMultimap<Object, Object> getTopResults(int topScores, int maxLimit) {
NEW
53
    List<WordWithScore> sortedResult = results.stream()
×
NEW
54
        .sorted(Comparator.comparing(WordWithScore::getScore).reversed())
×
NEW
55
        .toList();
×
56

NEW
57
    Set<Double> uniqueValues = new HashSet<>();
×
NEW
58
    ListMultimap<Object, Object> filteredResults = ArrayListMultimap.create();
×
NEW
59
    for (WordWithScore wordWithScore : sortedResult) {
×
NEW
60
      if (uniqueValues.add(wordWithScore.getScore()) && uniqueValues.size() > topScores) {
×
NEW
61
        break;
×
62
      }
NEW
63
      filteredResults.put((int) wordWithScore.getScore(), wordWithScore.getWord().getRaw());
×
NEW
64
      if (filteredResults.size() >= maxLimit) {
×
NEW
65
        break;
×
66
      }
NEW
67
    }
×
68

NEW
69
    return filteredResults;
×
70
  }
71
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc