View Javadoc
1   /*
2    * Copyright (C) 2019, Matthias Sohn <matthias.sohn@sap.com> and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  package org.eclipse.jgit.util;
11  
12  import static org.junit.Assert.assertEquals;
13  import static org.junit.Assert.assertTrue;
14  
15  import org.junit.Test;
16  
17  public class StatsTest {
18  	@Test
19  	public void testStatsTrivial() {
20  		Stats s = new Stats();
21  		s.add(1);
22  		s.add(1);
23  		s.add(1);
24  		assertEquals(3, s.count());
25  		assertEquals(1.0, s.min(), 1E-6);
26  		assertEquals(1.0, s.max(), 1E-6);
27  		assertEquals(1.0, s.avg(), 1E-6);
28  		assertEquals(0.0, s.var(), 1E-6);
29  		assertEquals(0.0, s.stddev(), 1E-6);
30  	}
31  
32  	@Test
33  	public void testStats() {
34  		Stats s = new Stats();
35  		s.add(1);
36  		s.add(2);
37  		s.add(3);
38  		s.add(4);
39  		assertEquals(4, s.count());
40  		assertEquals(1.0, s.min(), 1E-6);
41  		assertEquals(4.0, s.max(), 1E-6);
42  		assertEquals(2.5, s.avg(), 1E-6);
43  		assertEquals(1.666667, s.var(), 1E-6);
44  		assertEquals(1.290994, s.stddev(), 1E-6);
45  	}
46  
47  	@Test
48  	/**
49  	 * see
50  	 * https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Example
51  	 */
52  	public void testStatsCancellationExample1() {
53  		Stats s = new Stats();
54  		s.add(1E8 + 4);
55  		s.add(1E8 + 7);
56  		s.add(1E8 + 13);
57  		s.add(1E8 + 16);
58  		assertEquals(4, s.count());
59  		assertEquals(1E8 + 4, s.min(), 1E-6);
60  		assertEquals(1E8 + 16, s.max(), 1E-6);
61  		assertEquals(1E8 + 10, s.avg(), 1E-6);
62  		assertEquals(30, s.var(), 1E-6);
63  		assertEquals(5.477226, s.stddev(), 1E-6);
64  	}
65  
66  	@Test
67  	/**
68  	 * see
69  	 * https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Example
70  	 */
71  	public void testStatsCancellationExample2() {
72  		Stats s = new Stats();
73  		s.add(1E9 + 4);
74  		s.add(1E9 + 7);
75  		s.add(1E9 + 13);
76  		s.add(1E9 + 16);
77  		assertEquals(4, s.count());
78  		assertEquals(1E9 + 4, s.min(), 1E-6);
79  		assertEquals(1E9 + 16, s.max(), 1E-6);
80  		assertEquals(1E9 + 10, s.avg(), 1E-6);
81  		assertEquals(30, s.var(), 1E-6);
82  		assertEquals(5.477226, s.stddev(), 1E-6);
83  	}
84  
85  	@Test
86  	public void testNoValues() {
87  		Stats s = new Stats();
88  		assertTrue(Double.isNaN(s.var()));
89  		assertTrue(Double.isNaN(s.stddev()));
90  		assertTrue(Double.isNaN(s.avg()));
91  		assertTrue(Double.isNaN(s.min()));
92  		assertTrue(Double.isNaN(s.max()));
93  		s.add(42.3);
94  		assertTrue(Double.isNaN(s.var()));
95  		assertTrue(Double.isNaN(s.stddev()));
96  		assertEquals(42.3, s.avg(), 1E-6);
97  		assertEquals(42.3, s.max(), 1E-6);
98  		assertEquals(42.3, s.min(), 1E-6);
99  		s.add(42.3);
100 		assertEquals(0, s.var(), 1E-6);
101 		assertEquals(0, s.stddev(), 1E-6);
102 	}
103 }