1 /*******************************************************************************
2 * Copyright (c) 2016 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *******************************************************************************/
10 package org
.eclipse
.tracecompass
.analysis
.timing
.core
.tests
.segmentstore
.statistics
;
12 import static org
.junit
.Assert
.assertEquals
;
14 import java
.util
.ArrayList
;
15 import java
.util
.List
;
16 import java
.util
.Random
;
18 import org
.eclipse
.jdt
.annotation
.NonNull
;
19 import org
.eclipse
.tracecompass
.analysis
.timing
.core
.segmentstore
.statistics
.SegmentStoreStatistics
;
20 import org
.eclipse
.tracecompass
.segmentstore
.core
.BasicSegment
;
21 import org
.eclipse
.tracecompass
.segmentstore
.core
.ISegment
;
22 import org
.junit
.Test
;
25 * Test the staticsmodule. This is done with two tests.
27 * <li>test the values vs some sample points calculated by hand (sanity test)
29 * <li>2- test exhaustively vs a reference implementation.</li>
32 * @author Matthew Khouzam
35 public class SegmentStoreStatisticsTest
{
37 private static final int MEDIUM_AMOUNT_OF_SEGMENTS
= 100;
38 private static final int LARGE_AMOUNT_OF_SEGMENTS
= 1000000;
40 private static final double NO_ERROR
= 0.0;
41 private static final double ERROR
= 0.000001;
43 private static void testOnlineVsOffline(List
<@NonNull BasicSegment
> fixture
) {
44 SegmentStoreStatistics sss
= getSegStoreStat(fixture
);
45 OfflineStatisticsCalculator osc
= new OfflineStatisticsCalculator(fixture
);
46 assertEquals("Average", osc
.getAvg(), sss
.getAverage(), ERROR
);
47 assertEquals("Standard Deviation", osc
.getStdDev(), sss
.getStdDev(), ERROR
);
48 assertEquals("Min", osc
.getMin(), sss
.getMin());
49 assertEquals("Max", osc
.getMax(), sss
.getMax());
50 assertEquals("Min Segment", osc
.getMin(), sss
.getMinSegment().getLength());
51 assertEquals("Max Segment", osc
.getMax(), sss
.getMaxSegment().getLength());
58 public void climbTest() {
59 List
<@NonNull BasicSegment
> fixture
= new ArrayList
<>();
60 for (int i
= 0; i
< MEDIUM_AMOUNT_OF_SEGMENTS
; i
++) {
61 fixture
.add(createDummySegment(i
, i
* 2));
63 SegmentStoreStatistics sss
= getSegStoreStat(fixture
);
64 assertEquals("Average", 49.5, sss
.getAverage(), ERROR
);
65 assertEquals("Min", 0, sss
.getMin());
66 assertEquals("Max", 99, sss
.getMax());
67 assertEquals("Standard Deviation", 29.0, sss
.getStdDev(), 0.02);
68 assertEquals("Min Segment", 0, sss
.getMinSegment().getLength());
69 assertEquals("Max Segment", 99, sss
.getMaxSegment().getLength());
70 testOnlineVsOffline(fixture
);
73 private static SegmentStoreStatistics
getSegStoreStat(List
<@NonNull BasicSegment
> fixture
) {
74 SegmentStoreStatistics sss
= new SegmentStoreStatistics();
75 for (ISegment seg
: fixture
) {
85 public void decrementingTest() {
86 List
<@NonNull BasicSegment
> fixture
= new ArrayList
<>();
87 for (int i
= MEDIUM_AMOUNT_OF_SEGMENTS
; i
>= 0; i
--) {
88 fixture
.add(createDummySegment(i
, i
* 2));
90 SegmentStoreStatistics sss
= getSegStoreStat(fixture
);
91 assertEquals("Average", 50, sss
.getAverage(), NO_ERROR
);
92 assertEquals("Min", 0, sss
.getMin());
93 assertEquals("Max", 100, sss
.getMax());
94 assertEquals("Standard Deviation", 29.3, sss
.getStdDev(), 0.01);
95 assertEquals("Min Segment", 0, sss
.getMinSegment().getLength());
96 assertEquals("Max Segment", 100, sss
.getMaxSegment().getLength());
97 testOnlineVsOffline(fixture
);
104 public void smallTest() {
105 List
<@NonNull BasicSegment
> fixture
= new ArrayList
<>();
106 for (int i
= 1; i
>= 0; i
--) {
107 fixture
.add(createDummySegment(i
, i
* 2));
109 testOnlineVsOffline(fixture
);
116 public void largeTest() {
117 List
<@NonNull BasicSegment
> fixture
= new ArrayList
<>();
118 for (int i
= 1; i
<= LARGE_AMOUNT_OF_SEGMENTS
; i
++) {
119 fixture
.add(createDummySegment(i
, i
* 2));
121 testOnlineVsOffline(fixture
);
128 public void noiseTest() {
129 Random rnd
= new Random();
131 List
<@NonNull BasicSegment
> fixture
= new ArrayList
<>();
132 for (int i
= 1; i
<= LARGE_AMOUNT_OF_SEGMENTS
; i
++) {
133 int start
= Math
.abs(rnd
.nextInt(100000000));
134 int end
= start
+ Math
.abs(rnd
.nextInt(1000000));
135 fixture
.add(createDummySegment(start
, end
));
137 testOnlineVsOffline(fixture
);
141 * Test gaussian noise
144 public void gaussianNoiseTest() {
145 Random rnd
= new Random();
147 List
<@NonNull BasicSegment
> fixture
= new ArrayList
<>();
148 for (int i
= 1; i
<= LARGE_AMOUNT_OF_SEGMENTS
; i
++) {
149 int start
= Math
.abs(rnd
.nextInt(100000000));
150 final int delta
= Math
.abs(rnd
.nextInt(1000));
151 int end
= start
+ delta
* delta
;
152 fixture
.add(createDummySegment(start
, end
));
154 testOnlineVsOffline(fixture
);
157 private static @NonNull BasicSegment
createDummySegment(int start
, int end
) {
158 return new BasicSegment(start
, end
);