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

ljacqu / wordeval / 14540577447

18 Apr 2025 07:23PM UTC coverage: 51.439% (-6.2%) from 57.611%
14540577447

push

github

ljacqu
Remove EvaluationResult type param from all Evaluator interfaces

239 of 546 branches covered (43.77%)

16 of 17 new or added lines in 16 files covered. (94.12%)

193 existing lines in 17 files now uncovered.

679 of 1320 relevant lines covered (51.44%)

3.0 hits per line

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

55.56
/src/main/java/ch/jalu/wordeval/evaluators/impl/AllVowelsAlphabetically.java
1
package ch.jalu.wordeval.evaluators.impl;
2

3
import ch.jalu.wordeval.dictionary.Word;
4
import ch.jalu.wordeval.evaluators.PostEvaluator;
5
import ch.jalu.wordeval.evaluators.processing.AllWordsEvaluatorProvider;
6
import ch.jalu.wordeval.evaluators.result.WordGroupWithKey;
7
import ch.jalu.wordeval.evaluators.result.WordWithKey;
8
import ch.jalu.wordeval.language.Language;
9
import ch.jalu.wordeval.language.LetterType;
10
import com.google.common.collect.ArrayListMultimap;
11
import com.google.common.collect.ListMultimap;
12
import lombok.Getter;
13

14
import java.util.ArrayList;
15
import java.util.Comparator;
16
import java.util.HashSet;
17
import java.util.List;
18
import java.util.Set;
19
import java.util.stream.Collectors;
20

21
/**
22
 * Finds words with all vowels that appear alphabetically, such as "arbeidsonrust".
23
 */
24
public class AllVowelsAlphabetically implements PostEvaluator {
25

26
  private final List<String> vowels;
27
  @Getter
5✔
28
  private final List<WordGroupWithKey> results = new ArrayList<>();
29

30
  public AllVowelsAlphabetically(Language language) {
2✔
31
    vowels = language.getVowels();
4✔
32
  }
1✔
33

34
  @Override
35
  public void evaluate(AllWordsEvaluatorProvider allWordsEvaluatorProvider) {
36
    VowelCount vowelCount =
3✔
37
        allWordsEvaluatorProvider.getEvaluator(VowelCount.class, vc -> vc.getLetterType() == LetterType.VOWELS);
10!
38

39
    List<WordGroupWithKey> wordGroupsByKey = vowelCount.getResults().stream()
5✔
40
        .filter(entry -> hasVowelsAlphabetically(entry.getWord().getWithoutAccents()))
9✔
41
        .collect(Collectors.groupingBy(WordWithKey::getKey,
3✔
42
            Collectors.mapping(WordWithKey::getWord, Collectors.toSet())))
2✔
43
        .entrySet().stream()
3✔
44
        .map(e -> new WordGroupWithKey(e.getValue(), e.getKey()))
11✔
45
        .toList();
2✔
46

47
    results.addAll(wordGroupsByKey);
5✔
48
  }
1✔
49

50
  private boolean hasVowelsAlphabetically(String word) {
51
    int idx = 0;
2✔
52
    String curVowel = vowels.get(idx);
6✔
53
    for (int i = 0; i < word.length(); ++i) {
8✔
54
      String str = word.substring(i, i + 1);
7✔
55
      if (vowels.contains(str)) {
5✔
56
        if (str.equals(curVowel)) {
4✔
57
          idx++;
1✔
58
          curVowel = idx >= vowels.size() ? null : vowels.get(idx);
12!
59
        } else {
60
          return false;
2✔
61
        }
62
      }
63
    }
64
    return true;
2✔
65
  }
66

67
  @Override
68
  public ListMultimap<Object, Object> getTopResults(int topScores, int maxLimit) {
UNCOV
69
    Comparator<WordGroupWithKey> comparator = Comparator.comparingInt((WordGroupWithKey group) -> group.getWords().size())
×
UNCOV
70
        .thenComparing(group -> group.getKey().length())
×
UNCOV
71
        .reversed(); // todo: unit test
×
72

UNCOV
73
    List<WordGroupWithKey> sortedResult = results.stream()
×
UNCOV
74
        .sorted(comparator)
×
UNCOV
75
        .toList();
×
76

UNCOV
77
    Set<Integer> uniqueValues = new HashSet<>();
×
UNCOV
78
    ListMultimap<Object, Object> filteredResults = ArrayListMultimap.create();
×
UNCOV
79
    for (WordGroupWithKey wordGroup : sortedResult) {
×
UNCOV
80
      int score = wordGroup.getWords().size();
×
UNCOV
81
      if (uniqueValues.add(score) && uniqueValues.size() > topScores) {
×
UNCOV
82
        break;
×
83
      }
UNCOV
84
      List<String> wordList = wordGroup.getWords().stream()
×
UNCOV
85
          .map(Word::getRaw)
×
UNCOV
86
          .toList();
×
UNCOV
87
      filteredResults.put(score, wordList);
×
UNCOV
88
      if (filteredResults.size() >= maxLimit) {
×
UNCOV
89
        break;
×
90
      }
UNCOV
91
    }
×
92

UNCOV
93
    return filteredResults;
×
94
  }
95
}
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