/*
* File: IterationStartReporterTest.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.algorithm.AbstractIterativeAlgorithm;
import java.io.PrintStream;
import java.io.ByteArrayOutputStream;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for class IterationStartReporter.
*
* @author Justin Basilico
* @since 3.3.3
*/
public class IterationStartReporterTest
{
/**
* Creates a new test.
*/
public IterationStartReporterTest()
{
super();
}
/**
* Test of constructors of class IterationStartReporter.
*/
@Test
public void testConstructors()
{
PrintStream out = System.out;
String format = IterationStartReporter.DEFAULT_FORMAT;
IterationStartReporter instance = new IterationStartReporter();
assertSame(out, instance.out);
assertEquals(format, instance.format);
out = new PrintStream(new ByteArrayOutputStream());
instance = new IterationStartReporter(out);
assertSame(out, instance.out);
assertEquals(format, instance.format);
out = System.out;
format = "This is my custom message: %d is the iteration.";
instance = new IterationStartReporter(format);
assertSame(out, instance.out);
assertEquals(format, instance.format);
out = new PrintStream(new ByteArrayOutputStream());
instance = new IterationStartReporter(out, format);
assertSame(out, instance.out);
assertEquals(format, instance.format);
}
/**
* Test of stepStarted method, of class IterationStartReporter.
*/
@Test
public void testStepStarted()
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
PrintStream outPrintStream = new PrintStream(out);
IterationStartReporter instance = new IterationStartReporter(outPrintStream);
assertEquals("", out.toString());
DummyAlgorithm algorithm = new DummyAlgorithm();
instance.algorithmStarted(algorithm);
assertEquals("", out.toString());
algorithm.setIteration(1);
instance.stepStarted(algorithm);
assertEquals("Iteration 1\n", out.toString());
instance.stepEnded(algorithm);
algorithm.setIteration(2);
instance.stepStarted(algorithm);
assertEquals("Iteration 1\nIteration 2\n", out.toString());
instance.stepEnded(algorithm);
algorithm.setIteration(104);
instance.stepStarted(algorithm);
assertEquals("Iteration 1\nIteration 2\nIteration 104\n", out.toString());
instance.stepEnded(algorithm);
instance.algorithmEnded(algorithm);
assertEquals("Iteration 1\nIteration 2\nIteration 104\n", out.toString());
out.reset();
algorithm = new DummyAlgorithm();
instance.algorithmStarted(algorithm);
instance.stepStarted(algorithm);
assertEquals("Iteration 0\n", out.toString());
instance.stepEnded(algorithm);
algorithm.setIteration(-1);
instance.stepStarted(algorithm);
assertEquals("Iteration 0\nIteration -1\n", out.toString());
instance.stepEnded(algorithm);
instance.algorithmEnded(algorithm);
assertEquals("Iteration 0\nIteration -1\n", out.toString());
out.reset();
instance = new IterationStartReporter(outPrintStream, "i=%d");
algorithm.setIteration(321);
instance.algorithmStarted(algorithm);
instance.stepStarted(algorithm);
assertEquals("i=321\n", out.toString());
algorithm.setIteration(322);
instance.stepStarted(algorithm);
assertEquals("i=321\ni=322\n", out.toString());
instance.algorithmEnded(algorithm);
assertEquals("i=321\ni=322\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
{
/**
* Creates a new {@code DummyIterativeAlgorithm}.
*/
protected DummyAlgorithm()
{
super();
}
@Override
public void setIteration(
final int iteration)
{
super.setIteration(iteration);
}
}
}