import static org.junit.Assert.*;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.PrintStream;

import org.junit.Test;


public class StdDeviationTest {

	@Test
	public void test() throws IOException 
	{
		String actual, expected;
		
		PipedOutputStream pos    = new PipedOutputStream();
	    PipedInputStream  pis    = new PipedInputStream(pos);
	    PrintStream       pout = new PrintStream(pos);
	    
	    System.setIn(pis);
	    
	    pout.println("3\n4\n5\n6\n7\n");
	    pout.flush();
	    expected = String.format("Mean: %.2f\nStandard Deviation: %.2f\n", 5.00, 1.41);
	    
		//System.setIn(new ByteArrayInputStream
	    //		("Ann Marie\nPeter Pan\nN Y C\nwool\n15\nmustang\nbanana slug\number\nswimming\nq\n".getBytes()));    
	    ByteArrayOutputStream output = new ByteArrayOutputStream();
	    System.setOut(new PrintStream(output));
	    
	    StdDev.main(new String[] {"5"});
	    actual = output.toString();
	    
	    assertEquals("Error in output. Expected - Mean: 5.00, StdDev: 1.41 (3,4,5,6,7)", expected, actual);

	    pout.println("22\n-65\n3.15\n-34\n7.5\n94.7\n75.123\n-91\n-22\n42.5\n26\n22\n20\n76\n22\n3\n" +
	    		"26\n47\n7\n34\n35\n32\n9\n28\n76\n");
	    
	    pout.flush();
	    expected = String.format("Mean: %.2f\nStandard Deviation: %.2f\n", 19.84, 41.03);
	    
	    output = new ByteArrayOutputStream();
	    System.setOut(new PrintStream(output));
	    
	    StdDev.main(new String[0]);
	    actual = output.toString();
	    
	    assertEquals("Error in output. Expected - Mean: 19.84, StdDev: 41.03 (25 values)", expected, actual);   
	
	}

}
