### Question:
ImputeRunner extends SimpleRunner { @Override protected void processLine(String[] values, PrintWriter out) { numberOfMissingValues = 0; for (int i = 0; i < getPointSize(); i++) { if (missingValueMarker.equals(values[i])) { missingIndexes[numberOfMissingValues++] = i; values[i] = "0"; } } if (numberOfMissingValues > 0) { parsePoint(values); double[] imputedPoint = algorithm.getForest().imputeMissingValues(pointBuffer, numberOfMissingValues, missingIndexes); StringJoiner joiner = new StringJoiner(argumentParser.getDelimiter()); Arrays.stream(imputedPoint).mapToObj(Double::toString).forEach(joiner::add); out.println(joiner.toString()); } else { super.processLine(values, out); } } ImputeRunner(); static void main(String... args);  }### Answer:
@Test public void testProcessLine() { String[] line = new String[] { "1.0", "2.0" }; runner.prepareAlgorithm(2); runner.processLine(line, out); verify(out).println("1.0,2.0"); line = new String[] { missingValueMarker, "2.0" }; runner.processLine(line, out); verify(out).println("0.0,0.0"); }