|
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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
|
| 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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
|
| 116 |
|
1.1 Location : fromArgs Killed by : none changed conditional boundary → SURVIVED
Covering tests
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:defaultsToMarkdownAndExitsZeroWithoutGate()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:jsonFormatIsSelectable()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsWhenNothingCouldBeEvaluated(java.nio.file.Path)]
|
| 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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
2.2 Location : gate Killed by : none removed conditional - replaced equality check with true → SURVIVED
Covering tests
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
5.5 Location : gate Killed by : none removed conditional - replaced equality check with false → SURVIVED
Covering tests
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
|
| 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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
4.4 Location : gate Killed by : none removed conditional - replaced equality check with true → SURVIVED
Covering tests
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
5.5 Location : gate Killed by : none removed conditional - replaced equality check with false → SURVIVED
Covering tests
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
|
| 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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
4.4 Location : gate Killed by : none removed conditional - replaced equality check with true → SURVIVED
Covering tests
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
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
Covered by tests:
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:invalidArgumentsAreRejected()]
- org.egothor.methodatlas.command.EvalAccuracyCommandTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.command.EvalAccuracyCommandTest]/[method:gateFailsBelowThresholdAndPassesAtOrAbove()]
|
| 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
|