EvalAccuracyCommand.java

1
// SPDX-License-Identifier: Apache-2.0
2
// Copyright 2026 Egothor
3
// Copyright 2026 Accenture
4
package org.egothor.methodatlas.command;
5
6
import java.io.IOException;
7
import java.io.PrintWriter;
8
import java.nio.file.Path;
9
import java.util.Locale;
10
import java.util.OptionalDouble;
11
12
import org.egothor.methodatlas.eval.AccuracyEvaluator;
13
import org.egothor.methodatlas.eval.AccuracyMetrics;
14
import org.egothor.methodatlas.eval.AccuracyReportRenderer;
15
16
/**
17
 * Utility CLI mode ({@code -eval-accuracy}) that measures how accurate the AI
18
 * classification is against a human-reviewed labelled set.
19
 *
20
 * <p>
21
 * Synopsis:
22
 * {@code methodatlas -eval-accuracy <labels.yaml> <predictions.csv> [-eval-format markdown|json] [-eval-min-f1 <0..1>]}
23
 * </p>
24
 *
25
 * <ul>
26
 * <li>{@code labels.yaml} — the ground truth, in the {@code -override-file}
27
 *     format (the recommended source: those entries are already human-reviewed);</li>
28
 * <li>{@code predictions.csv} — a scan CSV produced with {@code -ai} and
29
 *     <em>without</em> {@code -override-file}, so the AI columns hold genuine AI
30
 *     output;</li>
31
 * <li>{@code -eval-format} — {@code markdown} (default) or {@code json};</li>
32
 * <li>{@code -eval-min-f1} — optional gate: exit {@code 1} when the F1 of the
33
 *     {@code securityRelevant} decision or the micro-averaged tag F1 is below the
34
 *     threshold, or when neither could be computed (no labelled data — a gate must
35
 *     not pass on no evidence).</li>
36
 * </ul>
37
 *
38
 * <p>
39
 * No scan runs and no AI provider is called: the command only reads the two
40
 * files, so it is deterministic and offline. The report is written with
41
 * {@code \n} line endings regardless of platform.
42
 * </p>
43
 *
44
 * @see AccuracyEvaluator
45
 * @see AccuracyMetrics
46
 * @since 6.1.0
47
 */
48
public final class EvalAccuracyCommand implements Command {
49
50
    /** Flag that selects this utility mode; takes two path arguments. */
51
    public static final String FLAG_EVAL_ACCURACY = "-eval-accuracy";
52
53
    /** Flag selecting the report format. */
54
    public static final String FLAG_EVAL_FORMAT = "-eval-format";
55
56
    /** Flag setting the minimum acceptable F1. */
57
    public static final String FLAG_EVAL_MIN_F1 = "-eval-min-f1";
58
59
    private static final int EXIT_GATE_FAILED = 1;
60
    private static final String FORMAT_MARKDOWN = "markdown";
61
    private static final String FORMAT_JSON = "json";
62
    private static final int ARGS_AFTER_FLAG = 2;
63
64
    private final Path labels;
65
    private final Path predictions;
66
    private final boolean json;
67
    private final OptionalDouble minF1;
68
69
    /**
70
     * Creates a command.
71
     *
72
     * @param labels      override-format YAML with the human-reviewed labels
73
     * @param predictions scan CSV produced with {@code -ai}
74
     * @param json        {@code true} for JSON output, {@code false} for Markdown
75
     * @param minF1       minimum acceptable F1 in {@code [0,1]}, or empty for no
76
     *                    gate
77
     */
78
    public EvalAccuracyCommand(Path labels, Path predictions, boolean json, OptionalDouble minF1) {
79
        this.labels = labels;
80
        this.predictions = predictions;
81
        this.json = json;
82
        this.minF1 = minF1;
83
    }
84
85
    /**
86
     * Builds the command from raw command-line arguments.
87
     *
88
     * @param args raw arguments; must contain {@code -eval-accuracy} followed by
89
     *             the labels path and the predictions path
90
     * @return a configured command; never {@code null}
91
     * @throws IllegalArgumentException if the paths are missing, the format is
92
     *                                  neither {@code markdown} nor {@code json},
93
     *                                  or the threshold is not a number in
94
     *                                  {@code [0,1]}
95
     */
96
    public static EvalAccuracyCommand fromArgs(String... args) {
97
        int at = indexOf(args, FLAG_EVAL_ACCURACY);
98 7 1. fromArgs : removed conditional - replaced comparison check with true → SURVIVED
2. fromArgs : changed conditional boundary → KILLED
3. fromArgs : removed conditional - replaced comparison check with false → KILLED
4. fromArgs : removed conditional - replaced comparison check with false → KILLED
5. fromArgs : Replaced integer addition with subtraction → KILLED
6. fromArgs : changed conditional boundary → KILLED
7. fromArgs : removed conditional - replaced comparison check with true → KILLED
        if (at < 0 || at + ARGS_AFTER_FLAG >= args.length) {
99
            throw new IllegalArgumentException(
100
                    FLAG_EVAL_ACCURACY + " requires two arguments: " + FLAG_EVAL_ACCURACY
101
                            + " <labels.yaml> <predictions.csv>");
102
        }
103
        boolean asJson = false;
104
        int fmt = indexOf(args, FLAG_EVAL_FORMAT);
105 3 1. fromArgs : changed conditional boundary → SURVIVED
2. fromArgs : removed conditional - replaced comparison check with false → KILLED
3. fromArgs : removed conditional - replaced comparison check with true → KILLED
        if (fmt >= 0) {
106
            String value = valueAfter(args, fmt, FLAG_EVAL_FORMAT).toLowerCase(Locale.ROOT);
107 2 1. fromArgs : removed conditional - replaced equality check with false → KILLED
2. fromArgs : removed conditional - replaced equality check with true → KILLED
            if (FORMAT_JSON.equals(value)) {
108
                asJson = true;
109 2 1. fromArgs : removed conditional - replaced equality check with true → SURVIVED
2. fromArgs : removed conditional - replaced equality check with false → KILLED
            } else if (!FORMAT_MARKDOWN.equals(value)) {
110
                throw new IllegalArgumentException(
111
                        FLAG_EVAL_FORMAT + " must be 'markdown' or 'json', got: " + value);
112
            }
113
        }
114
        OptionalDouble threshold = OptionalDouble.empty();
115
        int min = indexOf(args, FLAG_EVAL_MIN_F1);
116 3 1. fromArgs : changed conditional boundary → SURVIVED
2. fromArgs : removed conditional - replaced comparison check with true → KILLED
3. fromArgs : removed conditional - replaced comparison check with false → KILLED
        if (min >= 0) {
117
            threshold = OptionalDouble.of(parseThreshold(valueAfter(args, min, FLAG_EVAL_MIN_F1)));
118
        }
119 3 1. fromArgs : Replaced integer addition with subtraction → KILLED
2. fromArgs : Replaced integer addition with subtraction → KILLED
3. fromArgs : replaced return value with null for org/egothor/methodatlas/command/EvalAccuracyCommand::fromArgs → KILLED
        return new EvalAccuracyCommand(Path.of(args[at + 1]), Path.of(args[at + 2]), asJson, threshold);
120
    }
121
122
    /**
123
     * Evaluates the predictions against the labels and writes the report.
124
     *
125
     * @param out writer that receives the report; never {@code null}
126
     * @return {@code 0} on success or when no gate is set; {@code 1} when the
127
     *         {@code -eval-min-f1} gate fails
128
     * @throws IOException if either input file cannot be read or parsed
129
     */
130
    @Override
131
    public int execute(PrintWriter out) throws IOException {
132
        AccuracyEvaluator.Evaluation ev = AccuracyEvaluator.evaluate(labels, predictions);
133 2 1. execute : removed conditional - replaced equality check with true → KILLED
2. execute : removed conditional - replaced equality check with false → KILLED
        out.print(json ? AccuracyReportRenderer.json(ev) : AccuracyReportRenderer.markdown(ev));
134
        out.flush();
135 2 1. execute : removed conditional - replaced equality check with false → KILLED
2. execute : removed conditional - replaced equality check with true → KILLED
        if (minF1.isEmpty()) {
136
            return 0;
137
        }
138 3 1. execute : replaced int return with 0 for org/egothor/methodatlas/command/EvalAccuracyCommand::execute → KILLED
2. execute : removed conditional - replaced equality check with true → KILLED
3. execute : removed conditional - replaced equality check with false → KILLED
        return gate(ev.metrics(), minF1.getAsDouble()) ? 0 : EXIT_GATE_FAILED;
139
    }
140
141
    /**
142
     * Applies the F1 gate: every defined F1 among relevance and micro tags must
143
     * reach the threshold, and at least one must be defined.
144
     */
145
    private static boolean gate(AccuracyMetrics.Result m, double threshold) {
146
        OptionalDouble relevanceF1 = m.relevance().f1();
147
        OptionalDouble tagF1 = m.tagsMicro().f1();
148 4 1. gate : removed conditional - replaced equality check with true → SURVIVED
2. gate : removed conditional - replaced equality check with true → SURVIVED
3. gate : removed conditional - replaced equality check with false → KILLED
4. gate : removed conditional - replaced equality check with false → KILLED
        if (relevanceF1.isEmpty() && tagF1.isEmpty()) {
149 1 1. gate : replaced boolean return with true for org/egothor/methodatlas/command/EvalAccuracyCommand::gate → KILLED
            return false;
150
        }
151 5 1. gate : changed conditional boundary → SURVIVED
2. gate : removed conditional - replaced equality check with true → SURVIVED
3. gate : removed conditional - replaced comparison check with true → SURVIVED
4. gate : removed conditional - replaced equality check with false → SURVIVED
5. gate : removed conditional - replaced comparison check with false → KILLED
        boolean relevanceOk = relevanceF1.isEmpty() || relevanceF1.getAsDouble() >= threshold;
152 5 1. gate : removed conditional - replaced comparison check with true → SURVIVED
2. gate : removed conditional - replaced equality check with true → SURVIVED
3. gate : removed conditional - replaced equality check with false → SURVIVED
4. gate : removed conditional - replaced comparison check with false → KILLED
5. gate : changed conditional boundary → KILLED
        boolean tagOk = tagF1.isEmpty() || tagF1.getAsDouble() >= threshold;
153 5 1. gate : removed conditional - replaced equality check with true → SURVIVED
2. gate : removed conditional - replaced equality check with true → SURVIVED
3. gate : removed conditional - replaced equality check with false → KILLED
4. gate : removed conditional - replaced equality check with false → KILLED
5. gate : replaced boolean return with true for org/egothor/methodatlas/command/EvalAccuracyCommand::gate → KILLED
        return relevanceOk && tagOk;
154
    }
155
156
    private static double parseThreshold(String text) {
157
        double value;
158
        try {
159
            value = Double.parseDouble(text);
160
        } catch (NumberFormatException e) {
161
            throw new IllegalArgumentException(FLAG_EVAL_MIN_F1 + " must be a number in [0,1], got: " + text, e);
162
        }
163 8 1. parseThreshold : removed conditional - replaced comparison check with true → SURVIVED
2. parseThreshold : changed conditional boundary → SURVIVED
3. parseThreshold : changed conditional boundary → SURVIVED
4. parseThreshold : removed conditional - replaced equality check with false → KILLED
5. parseThreshold : removed conditional - replaced comparison check with true → KILLED
6. parseThreshold : removed conditional - replaced comparison check with false → KILLED
7. parseThreshold : removed conditional - replaced comparison check with false → KILLED
8. parseThreshold : removed conditional - replaced equality check with true → KILLED
        if (Double.isNaN(value) || value < 0.0 || value > 1.0) {
164
            throw new IllegalArgumentException(FLAG_EVAL_MIN_F1 + " must be in [0,1], got: " + text);
165
        }
166 1 1. parseThreshold : replaced double return with 0.0d for org/egothor/methodatlas/command/EvalAccuracyCommand::parseThreshold → KILLED
        return value;
167
    }
168
169
    private static String valueAfter(String[] args, int flagIndex, String flag) {
170 4 1. valueAfter : removed conditional - replaced comparison check with false → KILLED
2. valueAfter : Replaced integer addition with subtraction → KILLED
3. valueAfter : removed conditional - replaced comparison check with true → KILLED
4. valueAfter : changed conditional boundary → KILLED
        if (flagIndex + 1 >= args.length) {
171
            throw new IllegalArgumentException(flag + " requires a value");
172
        }
173 2 1. valueAfter : Replaced integer addition with subtraction → KILLED
2. valueAfter : replaced return value with "" for org/egothor/methodatlas/command/EvalAccuracyCommand::valueAfter → KILLED
        return args[flagIndex + 1];
174
    }
175
176
    private static int indexOf(String[] args, String flag) {
177 3 1. indexOf : removed conditional - replaced comparison check with false → KILLED
2. indexOf : changed conditional boundary → KILLED
3. indexOf : removed conditional - replaced comparison check with true → KILLED
        for (int i = 0; i < args.length; i++) {
178 2 1. indexOf : removed conditional - replaced equality check with true → KILLED
2. indexOf : removed conditional - replaced equality check with false → KILLED
            if (flag.equals(args[i])) {
179 1 1. indexOf : replaced int return with 0 for org/egothor/methodatlas/command/EvalAccuracyCommand::indexOf → KILLED
                return i;
180
            }
181
        }
182 1 1. indexOf : replaced int return with 0 for org/egothor/methodatlas/command/EvalAccuracyCommand::indexOf → KILLED
        return -1;
183
    }
184
}

Mutations

98

1.1
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
changed conditional boundary → KILLED

2.2
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced comparison check with false → KILLED

3.3
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
removed conditional - replaced comparison check with false → KILLED

4.4
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
Replaced integer addition with subtraction → KILLED

5.5
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
changed conditional boundary → KILLED

6.6
Location : fromArgs
Killed by : none
removed conditional - replaced comparison check with true → SURVIVED
Covering tests

7.7
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
removed conditional - replaced comparison check with true → KILLED

105

1.1
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced comparison check with false → KILLED

2.2
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
removed conditional - replaced comparison check with true → KILLED

3.3
Location : fromArgs
Killed by : none
changed conditional boundary → SURVIVED
Covering tests

107

1.1
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
removed conditional - replaced equality check with false → KILLED

2.2
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced equality check with true → KILLED

109

1.1
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced equality check with false → KILLED

2.2
Location : fromArgs
Killed by : none
removed conditional - replaced equality check with true → SURVIVED
Covering tests

116

1.1
Location : fromArgs
Killed by : none
changed conditional boundary → SURVIVED
Covering tests

2.2
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
removed conditional - replaced comparison check with true → KILLED

3.3
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced comparison check with false → KILLED

119

1.1
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
Replaced integer addition with subtraction → KILLED

2.2
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
Replaced integer addition with subtraction → KILLED

3.3
Location : fromArgs
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
replaced return value with null for org/egothor/methodatlas/command/EvalAccuracyCommand::fromArgs → KILLED

133

1.1
Location : execute
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : execute
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
removed conditional - replaced equality check with false → KILLED

135

1.1
Location : execute
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : execute
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

138

1.1
Location : execute
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
replaced int return with 0 for org/egothor/methodatlas/command/EvalAccuracyCommand::execute → KILLED

2.2
Location : execute
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

3.3
Location : execute
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
removed conditional - replaced equality check with false → KILLED

148

1.1
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : gate
Killed by : none
removed conditional - replaced equality check with true → SURVIVED
Covering tests

3.3
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

4.4
Location : gate
Killed by : none
removed conditional - replaced equality check with true → SURVIVED Covering tests

149

1.1
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
replaced boolean return with true for org/egothor/methodatlas/command/EvalAccuracyCommand::gate → KILLED

151

1.1
Location : gate
Killed by : none
changed conditional boundary → SURVIVED
Covering tests

2.2
Location : gate
Killed by : none
removed conditional - replaced equality check with true → SURVIVED Covering tests

3.3
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
removed conditional - replaced comparison check with false → KILLED

4.4
Location : gate
Killed by : none
removed conditional - replaced comparison check with true → SURVIVED Covering tests

5.5
Location : gate
Killed by : none
removed conditional - replaced equality check with false → SURVIVED Covering tests

152

1.1
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
removed conditional - replaced comparison check with false → KILLED

2.2
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
changed conditional boundary → KILLED

3.3
Location : gate
Killed by : none
removed conditional - replaced comparison check with true → SURVIVED
Covering tests

4.4
Location : gate
Killed by : none
removed conditional - replaced equality check with true → SURVIVED Covering tests

5.5
Location : gate
Killed by : none
removed conditional - replaced equality check with false → SURVIVED Covering tests

153

1.1
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
removed conditional - replaced equality check with false → KILLED

2.2
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
removed conditional - replaced equality check with false → KILLED

3.3
Location : gate
Killed by : none
removed conditional - replaced equality check with true → SURVIVED
Covering tests

4.4
Location : gate
Killed by : none
removed conditional - replaced equality check with true → SURVIVED Covering tests

5.5
Location : gate
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
replaced boolean return with true for org/egothor/methodatlas/command/EvalAccuracyCommand::gate → KILLED

163

1.1
Location : parseThreshold
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parseThreshold
Killed by : none
removed conditional - replaced comparison check with true → SURVIVED
Covering tests

3.3
Location : parseThreshold
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
removed conditional - replaced comparison check with true → KILLED

4.4
Location : parseThreshold
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
removed conditional - replaced comparison check with false → KILLED

5.5
Location : parseThreshold
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced comparison check with false → KILLED

6.6
Location : parseThreshold
Killed by : none
changed conditional boundary → SURVIVED Covering tests

7.7
Location : parseThreshold
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced equality check with true → KILLED

8.8
Location : parseThreshold
Killed by : none
changed conditional boundary → SURVIVED Covering tests

166

1.1
Location : parseThreshold
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
replaced double return with 0.0d for org/egothor/methodatlas/command/EvalAccuracyCommand::parseThreshold → KILLED

170

1.1
Location : valueAfter
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced comparison check with false → KILLED

2.2
Location : valueAfter
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
Replaced integer addition with subtraction → KILLED

3.3
Location : valueAfter
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
removed conditional - replaced comparison check with true → KILLED

4.4
Location : valueAfter
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
changed conditional boundary → KILLED

173

1.1
Location : valueAfter
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
Replaced integer addition with subtraction → KILLED

2.2
Location : valueAfter
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
replaced return value with "" for org/egothor/methodatlas/command/EvalAccuracyCommand::valueAfter → KILLED

177

1.1
Location : indexOf
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
removed conditional - replaced comparison check with false → KILLED

2.2
Location : indexOf
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
changed conditional boundary → KILLED

3.3
Location : indexOf
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
removed conditional - replaced comparison check with true → KILLED

178

1.1
Location : indexOf
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : indexOf
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
removed conditional - replaced equality check with false → KILLED

179

1.1
Location : indexOf
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
replaced int return with 0 for org/egothor/methodatlas/command/EvalAccuracyCommand::indexOf → KILLED

182

1.1
Location : indexOf
Killed by : org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
replaced int return with 0 for org/egothor/methodatlas/command/EvalAccuracyCommand::indexOf → KILLED

Active mutators

Tests examined


Report generated by PIT 1.30.1 support