/* * File: IterationMeasurablePerformanceReporterTest.java * Authors: Justin Basilico * Project: Cognitive Foundry Common Core * * Copyright 2012 Cognitive Foundry. All rights reserved. */ package gov.sandia.cognition.algorithm.event; import gov.sandia.cognition.util.DefaultNamedValue; import gov.sandia.cognition.algorithm.AbstractIterativeAlgorithm; import gov.sandia.cognition.algorithm.MeasurablePerformanceAlgorithm; import gov.sandia.cognition.util.NamedValue; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import org.junit.Test; import static org.junit.Assert.*; /** * Unit tests for class IterationMeasurablePerformanceReporter. * * @author Justin Basilico * @since 3.3.3 */ public class IterationMeasurablePerformanceReporterTest { /** * Creates a new test. */ public IterationMeasurablePerformanceReporterTest() { super(); } /** * Test of constructors of class IterationMeasurablePerformanceReporter. */ @Test public void testConstructors() { PrintStream out = System.out; String format = IterationMeasurablePerformanceReporter.DEFAULT_FORMAT; IterationMeasurablePerformanceReporter instance = new IterationMeasurablePerformanceReporter(); assertSame(out, instance.out); assertEquals(format, instance.format); out = new PrintStream(new ByteArrayOutputStream()); instance = new IterationMeasurablePerformanceReporter(out); assertSame(out, instance.out); assertEquals(format, instance.format); out = System.out; format = "This is my custom message: %d is the iteration and the measurable performance of %s is %s."; instance = new IterationMeasurablePerformanceReporter(format); assertSame(out, instance.out); assertEquals(format, instance.format); out = new PrintStream(new ByteArrayOutputStream()); instance = new IterationMeasurablePerformanceReporter(out, format); assertSame(out, instance.out); assertEquals(format, instance.format); } /** * Test of stepEnded method, of class IterationMeasurablePerformanceReporter. */ @Test public void testStepEnded() { ByteArrayOutputStream out = new ByteArrayOutputStream(); PrintStream outPrintStream = new PrintStream(out); IterationMeasurablePerformanceReporter instance = new IterationMeasurablePerformanceReporter(outPrintStream); assertEquals("", out.toString()); DummyAlgorithm algorithm = new DummyAlgorithm(); instance.algorithmStarted(algorithm); assertEquals("", out.toString()); algorithm.setIteration(1); algorithm.setPerformance(DefaultNamedValue.create("n", 1.2)); instance.stepStarted(algorithm); assertEquals("", out.toString()); instance.stepEnded(algorithm); assertEquals("Iteration 1. n: 1.2\n", out.toString()); algorithm.setIteration(2); algorithm.setPerformance(DefaultNamedValue.create("q", -3.4)); instance.stepStarted(algorithm); assertEquals("Iteration 1. n: 1.2\n", out.toString()); instance.stepEnded(algorithm); assertEquals("Iteration 1. n: 1.2\nIteration 2. q: -3.4\n", out.toString()); algorithm.setIteration(104); instance.stepStarted(algorithm); assertEquals("Iteration 1. n: 1.2\nIteration 2. q: -3.4\n", out.toString()); algorithm.setPerformance(DefaultNamedValue.create("r", 7)); instance.stepEnded(algorithm); assertEquals("Iteration 1. n: 1.2\nIteration 2. q: -3.4\nIteration 104. r: 7\n", out.toString()); instance.algorithmEnded(algorithm); assertEquals("Iteration 1. n: 1.2\nIteration 2. q: -3.4\nIteration 104. r: 7\n", out.toString()); out.reset(); algorithm = new DummyAlgorithm(); instance.algorithmStarted(algorithm); instance.stepStarted(algorithm); assertEquals("", out.toString()); instance.stepEnded(algorithm); assertEquals("Iteration 0. : null\n", out.toString()); algorithm.setIteration(-1); algorithm.setPerformance(DefaultNamedValue.create("abc", (Integer) null)); instance.stepStarted(algorithm); instance.stepEnded(algorithm); assertEquals("Iteration 0. : null\nIteration -1. abc: null\n", out.toString()); algorithm.setIteration(2); algorithm.setPerformance(DefaultNamedValue.create(null, 3)); instance.stepStarted(algorithm); instance.stepEnded(algorithm); assertEquals("Iteration 0. : null\nIteration -1. abc: null\nIteration 2. : 3\n", out.toString()); instance.algorithmEnded(algorithm); assertEquals("Iteration 0. : null\nIteration -1. abc: null\nIteration 2. : 3\n", out.toString()); out.reset(); instance = new IterationMeasurablePerformanceReporter(outPrintStream, "i=%d,%s=%d"); algorithm.setIteration(321); algorithm.setPerformance(DefaultNamedValue.create("q", 3)); instance.algorithmStarted(algorithm); instance.stepStarted(algorithm); instance.stepEnded(algorithm); assertEquals("i=321,q=3\n", out.toString()); algorithm.setIteration(322); algorithm.setPerformance(DefaultNamedValue.create("zzz", 777)); instance.stepStarted(algorithm); instance.stepEnded(algorithm); assertEquals("i=321,q=3\ni=322,zzz=777\n", out.toString()); instance.algorithmEnded(algorithm); assertEquals("i=321,q=3\ni=322,zzz=777\n", out.toString()); out.reset(); instance.algorithmStarted(algorithm); instance.algorithmEnded(algorithm); assertEquals("", out.toString()); } /** * A support class for testing the status reporter. */ protected static class DummyAlgorithm extends AbstractIterativeAlgorithm implements MeasurablePerformanceAlgorithm { protected NamedValue<? extends Number> performance; /** * Creates a new {@code DummyIterativeAlgorithm}. */ protected DummyAlgorithm() { super(); } @Override public void setIteration( final int iteration) { super.setIteration(iteration); } @Override public NamedValue<? extends Number> getPerformance() { return this.performance; } /** * Sets the performance. * * @param performance * The performance. */ public void setPerformance( final NamedValue<? extends Number> performance) { this.performance = performance; } } }