1   /*
2    * @(#) PersistentTest.java Sep 2, 2003
3    * 
4    * Copyright (c) 2003 Delft University of Technology Jaffalaan 5, 2628 BX Delft,
5    * the Netherlands All rights reserved.
6    * 
7    * This software is proprietary information of Delft University of Technology
8    * The code is published under the General Public License
9    */
10  package nl.tudelft.simulation.jstats.statistics;
11  
12  import junit.framework.Assert;
13  import junit.framework.TestCase;
14  import nl.tudelft.simulation.event.Event;
15  import nl.tudelft.simulation.event.TimedEvent;
16  
17  /***
18   * The PersistentTest test the persistent
19   * <p>
20   * (c) copyright 2003-2004 <a href="http://www.simulation.tudelft.nl">Delft
21   * University of Technology </a>, the Netherlands. <br>
22   * See for project information <a
23   * href="http://www.simulation.tudelft.nl">www.simulation.tudelft.nl </a> <br>
24   * License of use: <a href="http://www.gnu.org/copyleft/gpl.html">General Public
25   * License (GPL) </a>, no warranty <br>
26   * 
27   * @author <a href="http://www.simulation.tudelft.nl/people/jacobs.html">Peter
28   *         Jacobs </a>
29   * @version 1.0, 2004-03-18
30   * @since 1.2
31   */
32  public class PersistentTest extends TestCase
33  {
34  	/*** TEST_METHOD reflects the method which is invoked */
35  	public static final String TEST_METHOD = "test";
36  
37  	/***
38  	 * constructs a new PersistentTest
39  	 */
40  	public PersistentTest()
41  	{
42  		this(TEST_METHOD);
43  	}
44  
45  	/***
46  	 * constructs a new PersistentTest
47  	 * 
48  	 * @param arg0 the name of the method to be tested
49  	 */
50  	public PersistentTest(final String arg0)
51  	{
52  		super(arg0);
53  	}
54  
55  	/***
56  	 * tests the persistent
57  	 */
58  	public void test()
59  	{
60  		String description = "THIS PERSISTENT IS TESTED";
61  		Persistent persistent = new Persistent(description);
62  
63  		//check the description
64  		Assert.assertTrue(persistent.toString().equals(description));
65  
66  		//now we check the initial values
67  		Assert.assertTrue(new Double(persistent.getMin()).isNaN());
68  		Assert.assertTrue(new Double(persistent.getMax()).isNaN());
69  		Assert.assertTrue(new Double(persistent.getSampleMean()).isNaN());
70  		Assert.assertTrue(new Double(persistent.getSampleVariance()).isNaN());
71  		Assert.assertTrue(new Double(persistent.getStdDev()).isNaN());
72  		Assert.assertTrue(new Double(persistent.getSum()).isNaN());
73  		Assert.assertTrue(persistent.getN() == Long.MIN_VALUE);
74  		Assert.assertTrue(persistent.getConfidenceInterval(0.95) == null);
75  		Assert.assertTrue(persistent.getConfidenceInterval(0.95,
76  				Tally.LEFT_SIDE_CONFIDENCE) == null);
77  
78  		//now we initialize the persistent
79  
80  		persistent.initialize();
81  
82  		//now we check wether all the properties are correct
83  		Assert.assertTrue(persistent.getMin() == Double.MAX_VALUE);
84  		Assert.assertTrue(persistent.getMax() == -Double.MAX_VALUE);
85  		Assert.assertTrue(new Double(persistent.getSampleMean()).isNaN());
86  		Assert.assertTrue(new Double(persistent.getSampleVariance()).isNaN());
87  		Assert.assertTrue(new Double(persistent.getStdDev()).isNaN());
88  		Assert.assertTrue(persistent.getSum() == 0);
89  		Assert.assertTrue(persistent.getN() == 0);
90  		Assert.assertTrue(persistent.getConfidenceInterval(0.95) == null);
91  		Assert.assertTrue(persistent.getConfidenceInterval(0.95,
92  				Tally.LEFT_SIDE_CONFIDENCE) == null);
93  
94  		//We first fire a wrong event
95  		try
96  		{
97  			persistent.notify(new Event(null, "ERROR", "ERROR"));
98  			Assert
99  					.fail("persistent should react on events.value !instanceOf Double");
100 		} catch (Exception exception)
101 		{
102 			Assert.assertNotNull(exception);
103 		}
104 
105 		//Now we fire some events
106 		try
107 		{
108 			persistent.notify(new TimedEvent(null, this, new Double(1.0), 0.0));
109 			persistent.notify(new TimedEvent(null, this, new Double(1.1), 0.1));
110 			persistent.notify(new TimedEvent(null, this, new Double(1.2), 0.2));
111 			persistent.notify(new TimedEvent(null, this, new Double(1.3), 0.3));
112 			persistent.notify(new TimedEvent(null, this, new Double(1.4), 0.4));
113 			persistent.notify(new TimedEvent(null, this, new Double(1.5), 0.5));
114 			persistent.notify(new TimedEvent(null, this, new Double(1.6), 0.6));
115 			persistent.notify(new TimedEvent(null, this, new Double(1.7), 0.7));
116 			persistent.notify(new TimedEvent(null, this, new Double(1.8), 0.8));
117 			persistent.notify(new TimedEvent(null, this, new Double(1.9), 0.9));
118 			persistent.notify(new TimedEvent(null, this, new Double(2.0), 1.0));
119 			persistent.notify(new TimedEvent(null, this, new Double(2.1), 1.1));
120 		} catch (Exception exception)
121 		{
122 			Assert.fail(exception.getMessage());
123 		}
124 
125 		//Now we check the persistent
126 		Assert.assertTrue(persistent.getMax() == 2.1);
127 		Assert.assertTrue(persistent.getMin() == 1.0);
128 		Assert.assertTrue(persistent.getN() == 12);
129 		Assert.assertTrue(persistent.getSum() == 18.6);
130 		Assert.assertTrue(Math.abs(persistent.getSampleMean() - 1.5) < 10E-6);
131 
132 		//Let's compute the standard deviation
133 		double variance = 0;
134 		for (int i = 0; i < 11; i++)
135 		{
136 			variance = Math.pow(1.5 - (1.0 + i / 10.0), 2) + variance;
137 		}
138 		variance = variance / 10.0;
139 		double stDev = Math.sqrt(variance);
140 
141 		Assert
142 				.assertTrue(Math.abs(persistent.getSampleVariance() - variance) < 10E-6);
143 		Assert.assertTrue(Math.abs(persistent.getStdDev() - stDev) < 10E-6);
144 	}
145 }