Initial commit for AAI-UI(sparky-backend)
[aai/sparky-be.git] / src / test / java / org / openecomp / sparky / analytics / AveragingRingBufferTest.java
1 /* 
2 * ============LICENSE_START=======================================================
3 * SPARKY (AAI UI service)
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property.
6 * Copyright © 2017 Amdocs
7 * All rights reserved.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12
13 *      http://www.apache.org/licenses/LICENSE-2.0
14
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
21
22 * ECOMP and OpenECOMP are trademarks
23 * and service marks of AT&T Intellectual Property.
24 */
25
26 package org.openecomp.sparky.analytics;
27
28 import static org.junit.Assert.assertEquals;
29
30 import java.security.SecureRandom;
31
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.powermock.modules.junit4.PowerMockRunner;
36
37 /**
38  * The Class AveragingRingBufferTest.
39  */
40 @RunWith(PowerMockRunner.class)
41 public class AveragingRingBufferTest {
42
43   protected SecureRandom random = new SecureRandom();
44
45   /**
46    * Inits the.
47    *
48    * @throws Exception the exception
49    */
50   @Before
51   public void init() throws Exception {
52     // nothing at the moment
53   }
54
55   /**
56    * Validate pre index roll averaging.
57    */
58   @Test
59   public void validatePreIndexRollAveraging() {
60
61     AveragingRingBuffer arb = new AveragingRingBuffer(5);
62     assertEquals(0, arb.getAvg());
63
64     /*
65      * On initial buffer fill, the average will be re-calculated on the fly for the first nth data
66      * points until the data buffer has been filled the first time, and then the buffer
67      * automatically recalculates the average every time the buffer index rolls over, to the keep
68      * the average relative to the last "nth" data points.
69      */
70
71     // [ 1, 0, 0, 0, 0 ], sum = 1, avg = 1/1 =1
72     arb.addSample(1);
73     assertEquals(1, arb.getAvg());
74
75     // [ 1, 2, 0, 0, 0 ], sum = 3, avg = 3/2 = 1
76     arb.addSample(2);
77     assertEquals(1, arb.getAvg());
78
79     // [ 1, 2, 3, 0, 0 ], sum = 6, avg = 6/3 = 2
80     arb.addSample(3);
81     assertEquals(2, arb.getAvg());
82
83     // [ 1, 2, 3, 4, 0 ], sum = 10, avg = 10/4 = 2
84     arb.addSample(4);
85     assertEquals(2, arb.getAvg());
86
87     // [ 1, 2, 3, 4, 5 ], sum = 15, avg = 15/5 = 3
88     arb.addSample(5);
89     assertEquals(3, arb.getAvg());
90
91   }
92
93   /**
94    * Validate post index roll averaging.
95    */
96   @Test
97   public void validatePostIndexRollAveraging() {
98
99     AveragingRingBuffer arb = new AveragingRingBuffer(5);
100     arb.addSample(1);
101     arb.addSample(2);
102     arb.addSample(3);
103     arb.addSample(4);
104     arb.addSample(5);
105
106     /*
107      * The behavior switches, and now doesn't re-calculate the average until each nth data point, to
108      * reduce the computational over-head of re-calculating on each value.
109      */
110
111     // [ 10, 2, 3, 4, 5 ],
112     arb.addSample(10);
113     assertEquals(3, arb.getAvg());
114
115     // [ 10, 20, 3, 4, 5 ],
116     arb.addSample(20);
117     assertEquals(3, arb.getAvg());
118
119     // [ 10, 20, 30, 4, 5 ],
120     arb.addSample(30);
121     assertEquals(3, arb.getAvg());
122
123     // [ 10, 20, 30, 40, 5 ],
124     arb.addSample(40);
125     assertEquals(3, arb.getAvg());
126
127     // [ 10, 20, 30, 40, 50 ], s=150, avg=150/5=30
128     arb.addSample(50);
129     assertEquals(30, arb.getAvg());
130
131   }
132
133 }