CSVEvolutionListener.java

1
package net.bmahe.genetics4j.extras.evolutionlisteners;
2
3
import java.io.IOException;
4
import java.nio.charset.StandardCharsets;
5
import java.nio.file.Path;
6
import java.util.Comparator;
7
import java.util.List;
8
import java.util.Objects;
9
import java.util.Optional;
10
import java.util.function.Function;
11
import java.util.stream.Collectors;
12
import java.util.stream.IntStream;
13
import java.util.stream.Stream;
14
15
import org.apache.commons.csv.CSVFormat;
16
import org.apache.commons.csv.CSVPrinter;
17
import org.apache.commons.lang3.Validate;
18
import org.apache.logging.log4j.LogManager;
19
import org.apache.logging.log4j.Logger;
20
import org.immutables.value.Value;
21
22
import net.bmahe.genetics4j.core.Genotype;
23
import net.bmahe.genetics4j.core.evolutionlisteners.EvolutionListener;
24
25
/**
26
 * Evolution Listener which writes the output of each generation to a CSV file
27
 *
28
 * @author bruno
29
 *
30
 * @param <T> Fitness type
31
 * @param <U> Data type written to the CSV
32
 */
33
@Value.Immutable
34
public abstract class CSVEvolutionListener<T extends Comparable<T>, U> implements EvolutionListener<T> {
35
	public static final Logger logger = LogManager.getLogger(CSVEvolutionListener.class);
36
37
	public static final boolean DEFAULT_AUTO_FLUSH = true;
38
39
	private CSVPrinter csvPrinter;
40
41
	protected CSVPrinter openPrinter() {
42
43 2 1. openPrinter : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::columnExtractors → NO_COVERAGE
2. openPrinter : removed call to java/util/List::stream → NO_COVERAGE
		final List<String> headers = columnExtractors().stream()
44 2 1. openPrinter : replaced call to java/util/stream/Stream::map with receiver → NO_COVERAGE
2. openPrinter : removed call to java/util/stream/Stream::map → NO_COVERAGE
				.map(ColumnExtractor::header)
45 2 1. openPrinter : removed call to java/util/stream/Stream::collect → NO_COVERAGE
2. openPrinter : removed call to java/util/stream/Collectors::toUnmodifiableList → NO_COVERAGE
				.collect(Collectors.toUnmodifiableList());
46
47
		try {
48 4 1. openPrinter : replaced call to org/apache/commons/csv/CSVFormat::withAutoFlush with receiver → NO_COVERAGE
2. openPrinter : removed call to org/apache/commons/csv/CSVFormat::withAutoFlush → NO_COVERAGE
3. openPrinter : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::autoFlush → NO_COVERAGE
4. openPrinter : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::openPrinter → NO_COVERAGE
			return CSVFormat.DEFAULT.withAutoFlush(autoFlush())
49 5 1. openPrinter : removed call to java/util/List::size → NO_COVERAGE
2. openPrinter : replaced call to org/apache/commons/csv/CSVFormat::withHeader with receiver → NO_COVERAGE
3. openPrinter : removed call to java/util/List::toArray → NO_COVERAGE
4. openPrinter : replaced call to java/util/List::toArray with argument → NO_COVERAGE
5. openPrinter : removed call to org/apache/commons/csv/CSVFormat::withHeader → NO_COVERAGE
					.withHeader(headers.toArray(new String[headers.size()]))
50 4 1. openPrinter : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filename → NO_COVERAGE
2. openPrinter : removed call to java/nio/file/Path::of → NO_COVERAGE
3. openPrinter : removed call to org/apache/commons/csv/CSVFormat::print → NO_COVERAGE
4. openPrinter : Substituted 0 with 1 → NO_COVERAGE
					.print(Path.of(filename()), StandardCharsets.UTF_8);
51
		} catch (IOException e) {
52
			logger.error("Could not open {}", filename(), e);
53 2 1. openPrinter : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filename → NO_COVERAGE
2. openPrinter : removed call to java/lang/RuntimeException::<init> → NO_COVERAGE
			throw new RuntimeException("Could not open file " + filename(), e);
54
		}
55
56
	}
57
58
	/**
59
	 * Whether or not the CSV writer has auto flush enabled. Defaults to {@value #DEFAULT_AUTO_FLUSH}
60
	 *
61
	 * @return
62
	 */
63
	@Value.Default
64
	public boolean autoFlush() {
65 2 1. autoFlush : replaced boolean return with false for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::autoFlush → NO_COVERAGE
2. autoFlush : Substituted 1 with 0 → NO_COVERAGE
		return DEFAULT_AUTO_FLUSH;
66
	}
67
68
	/**
69
	 * User defined function to provide some additional information when computing the value to write. Defaults to null
70
	 *
71
	 * @return
72
	 */
73
	@Value.Default
74
	public GenerationFunction<T, U> evolutionContextSupplier() {
75 1 1. evolutionContextSupplier : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::evolutionContextSupplier → NO_COVERAGE
		return (generation, population, fitness, isDone) -> null;
76
	}
77
78
	/**
79
	 * How many generations to skip between each writes. Defaults to writing every generations
80
	 *
81
	 * @return
82
	 */
83
	@Value.Default
84
	public int skipN() {
85 1 1. skipN : Substituted 0 with 1 → NO_COVERAGE
		return 0;
86
	}
87
88
	/**
89
	 * Users can supply an optional set of filters to control which individuals get written and in which order. Default
90
	 * to have no impact.
91
	 *
92
	 * @return
93
	 */
94
	@Value.Default
95
	public Function<Stream<EvolutionStep<T, U>>, Stream<EvolutionStep<T, U>>> filter() {
96 2 1. lambda$filter$0 : replaced return value with Stream.empty for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$filter$0 → NO_COVERAGE
2. filter : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filter → NO_COVERAGE
		return stream -> stream;
97
	}
98
99
	/**
100
	 * Destination file name for the CSV file
101
	 *
102
	 * @return
103
	 */
104
	@Value.Parameter
105
	public abstract String filename();
106
107
	/**
108
	 * List of Column Extractors. They specify how and what to write from each individual at a given generation
109
	 *
110
	 * @return
111
	 */
112
	@Value.Parameter
113
	public abstract List<ColumnExtractor<T, U>> columnExtractors();
114
115
	@Override
116
	public void onEvolution(final long generation, final List<Genotype> population, final List<T> fitness,
117
			final boolean isDone) {
118
		Validate.isTrue(generation >= 0);
119
		Objects.requireNonNull(population);
120
		Objects.requireNonNull(fitness);
121
		Validate.isTrue(population.isEmpty() == false, "Population cannot be empty");
122
		Validate.isTrue(population.size() == fitness.size());
123
124 14 1. onEvolution : negated conditional → NO_COVERAGE
2. onEvolution : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::skipN → NO_COVERAGE
3. onEvolution : removed conditional - replaced equality check with false → NO_COVERAGE
4. onEvolution : changed conditional boundary → NO_COVERAGE
5. onEvolution : removed conditional - replaced equality check with false → NO_COVERAGE
6. onEvolution : removed conditional - replaced equality check with true → NO_COVERAGE
7. onEvolution : negated conditional → NO_COVERAGE
8. onEvolution : removed conditional - replaced comparison check with true → NO_COVERAGE
9. onEvolution : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::skipN → NO_COVERAGE
10. onEvolution : Replaced long modulus with multiplication → NO_COVERAGE
11. onEvolution : Substituted 0 with 1 → NO_COVERAGE
12. onEvolution : removed conditional - replaced equality check with true → NO_COVERAGE
13. onEvolution : negated conditional → NO_COVERAGE
14. onEvolution : removed conditional - replaced comparison check with false → NO_COVERAGE
		if (isDone == false && skipN() > 0 && generation % skipN() != 0) {
125
			return;
126
		}
127
128 3 1. onEvolution : negated conditional → NO_COVERAGE
2. onEvolution : removed conditional - replaced equality check with false → NO_COVERAGE
3. onEvolution : removed conditional - replaced equality check with true → NO_COVERAGE
		if (csvPrinter == null) {
129 2 1. onEvolution : Removed assignment to member variable csvPrinter → NO_COVERAGE
2. onEvolution : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::openPrinter → NO_COVERAGE
			csvPrinter = openPrinter();
130
		}
131
132
		final Optional<U> context = Optional
133 3 1. onEvolution : removed call to java/util/Optional::ofNullable → NO_COVERAGE
2. onEvolution : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::evolutionContextSupplier → NO_COVERAGE
3. onEvolution : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/GenerationFunction::apply → NO_COVERAGE
				.ofNullable(evolutionContextSupplier().apply(generation, population, fitness, isDone));
134
135 3 1. onEvolution : Substituted 0 with 1 → NO_COVERAGE
2. onEvolution : removed call to java/util/List::size → NO_COVERAGE
3. onEvolution : removed call to java/util/stream/IntStream::range → NO_COVERAGE
		final var rawIndividualStream = IntStream.range(0, population.size())
136 1 1. onEvolution : removed call to java/util/stream/IntStream::boxed → NO_COVERAGE
				.boxed()
137 2 1. onEvolution : removed call to java/util/stream/Stream::map → NO_COVERAGE
2. onEvolution : replaced call to java/util/stream/Stream::map with receiver → NO_COVERAGE
				.map(
138 2 1. lambda$onEvolution$0 : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/EvolutionStep::of → NO_COVERAGE
2. lambda$onEvolution$0 : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$onEvolution$0 → NO_COVERAGE
						individualIndex -> EvolutionStep.of(
139
								context,
140
									generation,
141 1 1. lambda$onEvolution$0 : removed call to java/lang/Integer::intValue → NO_COVERAGE
									individualIndex,
142 2 1. lambda$onEvolution$0 : removed call to java/lang/Integer::intValue → NO_COVERAGE
2. lambda$onEvolution$0 : removed call to java/util/List::get → NO_COVERAGE
									population.get(individualIndex),
143 2 1. lambda$onEvolution$0 : removed call to java/lang/Integer::intValue → NO_COVERAGE
2. lambda$onEvolution$0 : removed call to java/util/List::get → NO_COVERAGE
									fitness.get(individualIndex),
144
									isDone));
145
146 3 1. onEvolution : removed call to java/util/function/Function::apply → NO_COVERAGE
2. onEvolution : replaced call to java/util/function/Function::apply with argument → NO_COVERAGE
3. onEvolution : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filter → NO_COVERAGE
		final var filteredStream = filter().apply(rawIndividualStream);
147
148 1 1. onEvolution : removed call to java/util/stream/Stream::forEach → NO_COVERAGE
		filteredStream.forEach(evolutionStep -> {
149 2 1. lambda$onEvolution$1 : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::columnExtractors → NO_COVERAGE
2. lambda$onEvolution$1 : removed call to java/util/List::stream → NO_COVERAGE
			final List<Object> columnValues = columnExtractors().stream()
150 4 1. lambda$onEvolution$2 : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$onEvolution$2 → NO_COVERAGE
2. lambda$onEvolution$1 : removed call to java/util/stream/Stream::map → NO_COVERAGE
3. lambda$onEvolution$1 : replaced call to java/util/stream/Stream::map with receiver → NO_COVERAGE
4. lambda$onEvolution$2 : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/ColumnExtractor::columnExtractorFunction → NO_COVERAGE
					.map(ce -> ce.columnExtractorFunction())
151 4 1. lambda$onEvolution$3 : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/ColumnExtractorFunction::apply → NO_COVERAGE
2. lambda$onEvolution$1 : replaced call to java/util/stream/Stream::map with receiver → NO_COVERAGE
3. lambda$onEvolution$3 : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$onEvolution$3 → NO_COVERAGE
4. lambda$onEvolution$1 : removed call to java/util/stream/Stream::map → NO_COVERAGE
					.map(cef -> cef.apply(evolutionStep))
152 2 1. lambda$onEvolution$1 : removed call to java/util/stream/Stream::collect → NO_COVERAGE
2. lambda$onEvolution$1 : removed call to java/util/stream/Collectors::toUnmodifiableList → NO_COVERAGE
					.collect(Collectors.toUnmodifiableList());
153
154
			try {
155 1 1. lambda$onEvolution$1 : removed call to org/apache/commons/csv/CSVPrinter::printRecord → NO_COVERAGE
				csvPrinter.printRecord(columnValues);
156
			} catch (IOException e1) {
157
				logger.error("Could not write values: {}", columnValues, e1);
158 2 1. lambda$onEvolution$1 : removed call to java/lang/String::valueOf → NO_COVERAGE
2. lambda$onEvolution$1 : removed call to java/lang/RuntimeException::<init> → NO_COVERAGE
				throw new RuntimeException("Could not write values: " + columnValues, e1);
159
			}
160
		});
161
162 6 1. onEvolution : negated conditional → NO_COVERAGE
2. onEvolution : removed conditional - replaced equality check with false → NO_COVERAGE
3. onEvolution : removed conditional - replaced equality check with false → NO_COVERAGE
4. onEvolution : negated conditional → NO_COVERAGE
5. onEvolution : removed conditional - replaced equality check with true → NO_COVERAGE
6. onEvolution : removed conditional - replaced equality check with true → NO_COVERAGE
		if (isDone && csvPrinter != null) {
163
			try {
164 2 1. onEvolution : Substituted 1 with 0 → NO_COVERAGE
2. onEvolution : removed call to org/apache/commons/csv/CSVPrinter::close → NO_COVERAGE
				csvPrinter.close(true);
165
			} catch (IOException e) {
166
				logger.error("Could not close CSV printer for filename {}", filename(), e);
167 2 1. onEvolution : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filename → NO_COVERAGE
2. onEvolution : removed call to java/lang/RuntimeException::<init> → NO_COVERAGE
				throw new RuntimeException("Could not close CSV printer for filename " + filename(), e);
168
			}
169
		}
170
	}
171
172
	public static class Builder<T extends Comparable<T>, U> extends ImmutableCSVEvolutionListener.Builder<T, U> {
173
	}
174
175
	public static <T extends Comparable<T>, U> CSVEvolutionListener<T, U> of(String filename,
176
			List<ColumnExtractor<T, U>> columnExtractors) {
177 2 1. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/ImmutableCSVEvolutionListener::of → NO_COVERAGE
2. of : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::of → NO_COVERAGE
		return ImmutableCSVEvolutionListener.of(filename, (Iterable<? extends ColumnExtractor<T, U>>) columnExtractors);
178
	}
179
180
	public static <T extends Comparable<T>, U> CSVEvolutionListener<T, U> of(String filename,
181
			Iterable<? extends ColumnExtractor<T, U>> columnExtractors) {
182 2 1. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/ImmutableCSVEvolutionListener::of → NO_COVERAGE
2. of : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::of → NO_COVERAGE
		return ImmutableCSVEvolutionListener.of(filename, columnExtractors);
183
	}
184
185
	public static <T extends Comparable<T>, U> CSVEvolutionListener<T, U> of(final String filename,
186
			final GenerationFunction<T, U> evolutionContextSupplier,
187
			final Iterable<? extends ColumnExtractor<T, U>> columnExtractors) {
188 1 1. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::<init> → NO_COVERAGE
		var csvEvolutionListenerBuilder = new CSVEvolutionListener.Builder<T, U>();
189
190 2 1. of : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename with receiver → NO_COVERAGE
2. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename → NO_COVERAGE
		csvEvolutionListenerBuilder.filename(filename)
191 2 1. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier → NO_COVERAGE
2. of : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier with receiver → NO_COVERAGE
				.evolutionContextSupplier(evolutionContextSupplier)
192 2 1. of : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors with receiver → NO_COVERAGE
2. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors → NO_COVERAGE
				.addAllColumnExtractors(columnExtractors);
193
194 2 1. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::build → NO_COVERAGE
2. of : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::of → NO_COVERAGE
		return csvEvolutionListenerBuilder.build();
195
	}
196
197
	public static <T extends Comparable<T>, U> CSVEvolutionListener<T, U> of(final String filename,
198
			final GenerationFunction<T, U> evolutionContextSupplier,
199
			final Iterable<? extends ColumnExtractor<T, U>> columnExtractors, final int skipN) {
200 1 1. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::<init> → NO_COVERAGE
		var csvEvolutionListenerBuilder = new CSVEvolutionListener.Builder<T, U>();
201
202 2 1. of : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename with receiver → NO_COVERAGE
2. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename → NO_COVERAGE
		csvEvolutionListenerBuilder.filename(filename)
203 2 1. of : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier with receiver → NO_COVERAGE
2. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier → NO_COVERAGE
				.evolutionContextSupplier(evolutionContextSupplier)
204 2 1. of : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors with receiver → NO_COVERAGE
2. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors → NO_COVERAGE
				.addAllColumnExtractors(columnExtractors)
205 2 1. of : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::skipN with receiver → NO_COVERAGE
2. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::skipN → NO_COVERAGE
				.skipN(skipN);
206
207 2 1. of : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::build → NO_COVERAGE
2. of : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::of → NO_COVERAGE
		return csvEvolutionListenerBuilder.build();
208
	}
209
210
	public static <T extends Comparable<T>, U> CSVEvolutionListener<T, U> ofTopN(final String filename,
211
			final GenerationFunction<T, U> evolutionContextSupplier,
212
			final Iterable<? extends ColumnExtractor<T, U>> columnExtractors, final Comparator<T> comparator,
213
			final int topN) {
214 1 1. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::<init> → NO_COVERAGE
		var csvEvolutionListenerBuilder = new CSVEvolutionListener.Builder<T, U>();
215
216 2 1. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename → NO_COVERAGE
2. ofTopN : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename with receiver → NO_COVERAGE
		csvEvolutionListenerBuilder.filename(filename)
217 2 1. ofTopN : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier with receiver → NO_COVERAGE
2. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier → NO_COVERAGE
				.evolutionContextSupplier(evolutionContextSupplier)
218 2 1. ofTopN : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors with receiver → NO_COVERAGE
2. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors → NO_COVERAGE
				.addAllColumnExtractors(columnExtractors)
219 2 1. ofTopN : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filter with receiver → NO_COVERAGE
2. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filter → NO_COVERAGE
				.filter(
220 9 1. lambda$ofTopN$1 : removed call to java/util/Comparator::reversed → NO_COVERAGE
2. lambda$ofTopN$0 : removed call to java/util/stream/Stream::sorted → NO_COVERAGE
3. lambda$ofTopN$1 : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/EvolutionStep::fitness → NO_COVERAGE
4. lambda$ofTopN$1 : removed call to java/util/Comparator::compare → NO_COVERAGE
5. lambda$ofTopN$1 : replaced int return with 0 for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$ofTopN$1 → NO_COVERAGE
6. lambda$ofTopN$1 : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/EvolutionStep::fitness → NO_COVERAGE
7. lambda$ofTopN$1 : replaced call to java/util/Comparator::reversed with receiver → NO_COVERAGE
8. lambda$ofTopN$0 : replaced call to java/util/stream/Stream::sorted with receiver → NO_COVERAGE
9. lambda$ofTopN$0 : replaced return value with Stream.empty for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$ofTopN$0 → NO_COVERAGE
						stream -> stream.sorted((a, b) -> comparator.reversed().compare(a.fitness(), b.fitness()))
221 2 1. lambda$ofTopN$0 : replaced call to java/util/stream/Stream::limit with receiver → NO_COVERAGE
2. lambda$ofTopN$0 : removed call to java/util/stream/Stream::limit → NO_COVERAGE
								.limit(topN));
222
223 2 1. ofTopN : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::ofTopN → NO_COVERAGE
2. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::build → NO_COVERAGE
		return csvEvolutionListenerBuilder.build();
224
	}
225
226
	public static <T extends Comparable<T>, U> CSVEvolutionListener<T, U> ofTopN(final String filename,
227
			final GenerationFunction<T, U> evolutionContextSupplier,
228
			final Iterable<? extends ColumnExtractor<T, U>> columnExtractors, final int topN) {
229 1 1. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::<init> → NO_COVERAGE
		var csvEvolutionListenerBuilder = new CSVEvolutionListener.Builder<T, U>();
230
231 2 1. ofTopN : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename with receiver → NO_COVERAGE
2. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename → NO_COVERAGE
		csvEvolutionListenerBuilder.filename(filename)
232 2 1. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier → NO_COVERAGE
2. ofTopN : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier with receiver → NO_COVERAGE
				.evolutionContextSupplier(evolutionContextSupplier)
233 2 1. ofTopN : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors with receiver → NO_COVERAGE
2. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors → NO_COVERAGE
				.addAllColumnExtractors(columnExtractors)
234 8 1. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filter → NO_COVERAGE
2. lambda$ofTopN$2 : removed call to java/util/stream/Stream::sorted → NO_COVERAGE
3. lambda$ofTopN$2 : replaced call to java/util/stream/Stream::sorted with receiver → NO_COVERAGE
4. lambda$ofTopN$2 : replaced return value with Stream.empty for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$ofTopN$2 → NO_COVERAGE
5. lambda$ofTopN$2 : removed call to java/util/stream/Stream::limit → NO_COVERAGE
6. lambda$ofTopN$2 : replaced call to java/util/stream/Stream::limit with receiver → NO_COVERAGE
7. lambda$ofTopN$2 : removed call to java/util/Comparator::comparing → NO_COVERAGE
8. ofTopN : replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filter with receiver → NO_COVERAGE
				.filter(stream -> stream.sorted(Comparator.comparing(EvolutionStep::fitness)).limit(topN));
235
236 2 1. ofTopN : replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::ofTopN → NO_COVERAGE
2. ofTopN : removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::build → NO_COVERAGE
		return csvEvolutionListenerBuilder.build();
237
	}
238
}

Mutations

43

1.1
Location : openPrinter
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::columnExtractors → NO_COVERAGE

2.2
Location : openPrinter
Killed by : none
removed call to java/util/List::stream → NO_COVERAGE

44

1.1
Location : openPrinter
Killed by : none
replaced call to java/util/stream/Stream::map with receiver → NO_COVERAGE

2.2
Location : openPrinter
Killed by : none
removed call to java/util/stream/Stream::map → NO_COVERAGE

45

1.1
Location : openPrinter
Killed by : none
removed call to java/util/stream/Stream::collect → NO_COVERAGE

2.2
Location : openPrinter
Killed by : none
removed call to java/util/stream/Collectors::toUnmodifiableList → NO_COVERAGE

48

1.1
Location : openPrinter
Killed by : none
replaced call to org/apache/commons/csv/CSVFormat::withAutoFlush with receiver → NO_COVERAGE

2.2
Location : openPrinter
Killed by : none
removed call to org/apache/commons/csv/CSVFormat::withAutoFlush → NO_COVERAGE

3.3
Location : openPrinter
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::autoFlush → NO_COVERAGE

4.4
Location : openPrinter
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::openPrinter → NO_COVERAGE

49

1.1
Location : openPrinter
Killed by : none
removed call to java/util/List::size → NO_COVERAGE

2.2
Location : openPrinter
Killed by : none
replaced call to org/apache/commons/csv/CSVFormat::withHeader with receiver → NO_COVERAGE

3.3
Location : openPrinter
Killed by : none
removed call to java/util/List::toArray → NO_COVERAGE

4.4
Location : openPrinter
Killed by : none
replaced call to java/util/List::toArray with argument → NO_COVERAGE

5.5
Location : openPrinter
Killed by : none
removed call to org/apache/commons/csv/CSVFormat::withHeader → NO_COVERAGE

50

1.1
Location : openPrinter
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filename → NO_COVERAGE

2.2
Location : openPrinter
Killed by : none
removed call to java/nio/file/Path::of → NO_COVERAGE

3.3
Location : openPrinter
Killed by : none
removed call to org/apache/commons/csv/CSVFormat::print → NO_COVERAGE

4.4
Location : openPrinter
Killed by : none
Substituted 0 with 1 → NO_COVERAGE

53

1.1
Location : openPrinter
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filename → NO_COVERAGE

2.2
Location : openPrinter
Killed by : none
removed call to java/lang/RuntimeException::<init> → NO_COVERAGE

65

1.1
Location : autoFlush
Killed by : none
replaced boolean return with false for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::autoFlush → NO_COVERAGE

2.2
Location : autoFlush
Killed by : none
Substituted 1 with 0 → NO_COVERAGE

75

1.1
Location : evolutionContextSupplier
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::evolutionContextSupplier → NO_COVERAGE

85

1.1
Location : skipN
Killed by : none
Substituted 0 with 1 → NO_COVERAGE

96

1.1
Location : lambda$filter$0
Killed by : none
replaced return value with Stream.empty for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$filter$0 → NO_COVERAGE

2.2
Location : filter
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filter → NO_COVERAGE

124

1.1
Location : onEvolution
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::skipN → NO_COVERAGE

3.3
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with false → NO_COVERAGE

4.4
Location : onEvolution
Killed by : none
changed conditional boundary → NO_COVERAGE

5.5
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with false → NO_COVERAGE

6.6
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with true → NO_COVERAGE

7.7
Location : onEvolution
Killed by : none
negated conditional → NO_COVERAGE

8.8
Location : onEvolution
Killed by : none
removed conditional - replaced comparison check with true → NO_COVERAGE

9.9
Location : onEvolution
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::skipN → NO_COVERAGE

10.10
Location : onEvolution
Killed by : none
Replaced long modulus with multiplication → NO_COVERAGE

11.11
Location : onEvolution
Killed by : none
Substituted 0 with 1 → NO_COVERAGE

12.12
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with true → NO_COVERAGE

13.13
Location : onEvolution
Killed by : none
negated conditional → NO_COVERAGE

14.14
Location : onEvolution
Killed by : none
removed conditional - replaced comparison check with false → NO_COVERAGE

128

1.1
Location : onEvolution
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with false → NO_COVERAGE

3.3
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with true → NO_COVERAGE

129

1.1
Location : onEvolution
Killed by : none
Removed assignment to member variable csvPrinter → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::openPrinter → NO_COVERAGE

133

1.1
Location : onEvolution
Killed by : none
removed call to java/util/Optional::ofNullable → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::evolutionContextSupplier → NO_COVERAGE

3.3
Location : onEvolution
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/GenerationFunction::apply → NO_COVERAGE

135

1.1
Location : onEvolution
Killed by : none
Substituted 0 with 1 → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
removed call to java/util/List::size → NO_COVERAGE

3.3
Location : onEvolution
Killed by : none
removed call to java/util/stream/IntStream::range → NO_COVERAGE

136

1.1
Location : onEvolution
Killed by : none
removed call to java/util/stream/IntStream::boxed → NO_COVERAGE

137

1.1
Location : onEvolution
Killed by : none
removed call to java/util/stream/Stream::map → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
replaced call to java/util/stream/Stream::map with receiver → NO_COVERAGE

138

1.1
Location : lambda$onEvolution$0
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/EvolutionStep::of → NO_COVERAGE

2.2
Location : lambda$onEvolution$0
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$onEvolution$0 → NO_COVERAGE

141

1.1
Location : lambda$onEvolution$0
Killed by : none
removed call to java/lang/Integer::intValue → NO_COVERAGE

142

1.1
Location : lambda$onEvolution$0
Killed by : none
removed call to java/lang/Integer::intValue → NO_COVERAGE

2.2
Location : lambda$onEvolution$0
Killed by : none
removed call to java/util/List::get → NO_COVERAGE

143

1.1
Location : lambda$onEvolution$0
Killed by : none
removed call to java/lang/Integer::intValue → NO_COVERAGE

2.2
Location : lambda$onEvolution$0
Killed by : none
removed call to java/util/List::get → NO_COVERAGE

146

1.1
Location : onEvolution
Killed by : none
removed call to java/util/function/Function::apply → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
replaced call to java/util/function/Function::apply with argument → NO_COVERAGE

3.3
Location : onEvolution
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filter → NO_COVERAGE

148

1.1
Location : onEvolution
Killed by : none
removed call to java/util/stream/Stream::forEach → NO_COVERAGE

149

1.1
Location : lambda$onEvolution$1
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::columnExtractors → NO_COVERAGE

2.2
Location : lambda$onEvolution$1
Killed by : none
removed call to java/util/List::stream → NO_COVERAGE

150

1.1
Location : lambda$onEvolution$2
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$onEvolution$2 → NO_COVERAGE

2.2
Location : lambda$onEvolution$1
Killed by : none
removed call to java/util/stream/Stream::map → NO_COVERAGE

3.3
Location : lambda$onEvolution$1
Killed by : none
replaced call to java/util/stream/Stream::map with receiver → NO_COVERAGE

4.4
Location : lambda$onEvolution$2
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/ColumnExtractor::columnExtractorFunction → NO_COVERAGE

151

1.1
Location : lambda$onEvolution$3
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/ColumnExtractorFunction::apply → NO_COVERAGE

2.2
Location : lambda$onEvolution$1
Killed by : none
replaced call to java/util/stream/Stream::map with receiver → NO_COVERAGE

3.3
Location : lambda$onEvolution$3
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$onEvolution$3 → NO_COVERAGE

4.4
Location : lambda$onEvolution$1
Killed by : none
removed call to java/util/stream/Stream::map → NO_COVERAGE

152

1.1
Location : lambda$onEvolution$1
Killed by : none
removed call to java/util/stream/Stream::collect → NO_COVERAGE

2.2
Location : lambda$onEvolution$1
Killed by : none
removed call to java/util/stream/Collectors::toUnmodifiableList → NO_COVERAGE

155

1.1
Location : lambda$onEvolution$1
Killed by : none
removed call to org/apache/commons/csv/CSVPrinter::printRecord → NO_COVERAGE

158

1.1
Location : lambda$onEvolution$1
Killed by : none
removed call to java/lang/String::valueOf → NO_COVERAGE

2.2
Location : lambda$onEvolution$1
Killed by : none
removed call to java/lang/RuntimeException::<init> → NO_COVERAGE

162

1.1
Location : onEvolution
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with false → NO_COVERAGE

3.3
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with false → NO_COVERAGE

4.4
Location : onEvolution
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with true → NO_COVERAGE

6.6
Location : onEvolution
Killed by : none
removed conditional - replaced equality check with true → NO_COVERAGE

164

1.1
Location : onEvolution
Killed by : none
Substituted 1 with 0 → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
removed call to org/apache/commons/csv/CSVPrinter::close → NO_COVERAGE

167

1.1
Location : onEvolution
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::filename → NO_COVERAGE

2.2
Location : onEvolution
Killed by : none
removed call to java/lang/RuntimeException::<init> → NO_COVERAGE

177

1.1
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/ImmutableCSVEvolutionListener::of → NO_COVERAGE

2.2
Location : of
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::of → NO_COVERAGE

182

1.1
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/ImmutableCSVEvolutionListener::of → NO_COVERAGE

2.2
Location : of
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::of → NO_COVERAGE

188

1.1
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::<init> → NO_COVERAGE

190

1.1
Location : of
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename with receiver → NO_COVERAGE

2.2
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename → NO_COVERAGE

191

1.1
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier → NO_COVERAGE

2.2
Location : of
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier with receiver → NO_COVERAGE

192

1.1
Location : of
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors with receiver → NO_COVERAGE

2.2
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors → NO_COVERAGE

194

1.1
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::build → NO_COVERAGE

2.2
Location : of
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::of → NO_COVERAGE

200

1.1
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::<init> → NO_COVERAGE

202

1.1
Location : of
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename with receiver → NO_COVERAGE

2.2
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename → NO_COVERAGE

203

1.1
Location : of
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier with receiver → NO_COVERAGE

2.2
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier → NO_COVERAGE

204

1.1
Location : of
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors with receiver → NO_COVERAGE

2.2
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors → NO_COVERAGE

205

1.1
Location : of
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::skipN with receiver → NO_COVERAGE

2.2
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::skipN → NO_COVERAGE

207

1.1
Location : of
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::build → NO_COVERAGE

2.2
Location : of
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::of → NO_COVERAGE

214

1.1
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::<init> → NO_COVERAGE

216

1.1
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename with receiver → NO_COVERAGE

217

1.1
Location : ofTopN
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier with receiver → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier → NO_COVERAGE

218

1.1
Location : ofTopN
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors with receiver → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors → NO_COVERAGE

219

1.1
Location : ofTopN
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filter with receiver → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filter → NO_COVERAGE

220

1.1
Location : lambda$ofTopN$1
Killed by : none
removed call to java/util/Comparator::reversed → NO_COVERAGE

2.2
Location : lambda$ofTopN$0
Killed by : none
removed call to java/util/stream/Stream::sorted → NO_COVERAGE

3.3
Location : lambda$ofTopN$1
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/EvolutionStep::fitness → NO_COVERAGE

4.4
Location : lambda$ofTopN$1
Killed by : none
removed call to java/util/Comparator::compare → NO_COVERAGE

5.5
Location : lambda$ofTopN$1
Killed by : none
replaced int return with 0 for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$ofTopN$1 → NO_COVERAGE

6.6
Location : lambda$ofTopN$1
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/EvolutionStep::fitness → NO_COVERAGE

7.7
Location : lambda$ofTopN$1
Killed by : none
replaced call to java/util/Comparator::reversed with receiver → NO_COVERAGE

8.8
Location : lambda$ofTopN$0
Killed by : none
replaced call to java/util/stream/Stream::sorted with receiver → NO_COVERAGE

9.9
Location : lambda$ofTopN$0
Killed by : none
replaced return value with Stream.empty for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$ofTopN$0 → NO_COVERAGE

221

1.1
Location : lambda$ofTopN$0
Killed by : none
replaced call to java/util/stream/Stream::limit with receiver → NO_COVERAGE

2.2
Location : lambda$ofTopN$0
Killed by : none
removed call to java/util/stream/Stream::limit → NO_COVERAGE

223

1.1
Location : ofTopN
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::ofTopN → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::build → NO_COVERAGE

229

1.1
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::<init> → NO_COVERAGE

231

1.1
Location : ofTopN
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename with receiver → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filename → NO_COVERAGE

232

1.1
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::evolutionContextSupplier with receiver → NO_COVERAGE

233

1.1
Location : ofTopN
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors with receiver → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::addAllColumnExtractors → NO_COVERAGE

234

1.1
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filter → NO_COVERAGE

2.2
Location : lambda$ofTopN$2
Killed by : none
removed call to java/util/stream/Stream::sorted → NO_COVERAGE

3.3
Location : lambda$ofTopN$2
Killed by : none
replaced call to java/util/stream/Stream::sorted with receiver → NO_COVERAGE

4.4
Location : lambda$ofTopN$2
Killed by : none
replaced return value with Stream.empty for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::lambda$ofTopN$2 → NO_COVERAGE

5.5
Location : lambda$ofTopN$2
Killed by : none
removed call to java/util/stream/Stream::limit → NO_COVERAGE

6.6
Location : lambda$ofTopN$2
Killed by : none
replaced call to java/util/stream/Stream::limit with receiver → NO_COVERAGE

7.7
Location : lambda$ofTopN$2
Killed by : none
removed call to java/util/Comparator::comparing → NO_COVERAGE

8.8
Location : ofTopN
Killed by : none
replaced call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::filter with receiver → NO_COVERAGE

236

1.1
Location : ofTopN
Killed by : none
replaced return value with null for net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener::ofTopN → NO_COVERAGE

2.2
Location : ofTopN
Killed by : none
removed call to net/bmahe/genetics4j/extras/evolutionlisteners/CSVEvolutionListener$Builder::build → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.25.7 support