1 /*
2  * Copyright 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.benchmark
18 
19 import androidx.test.ext.junit.runners.AndroidJUnit4
20 import androidx.test.filters.SmallTest
21 import kotlin.test.assertFailsWith
22 import org.junit.Assert.assertEquals
23 import org.junit.Test
24 import org.junit.runner.RunWith
25 
26 @SmallTest
27 @RunWith(AndroidJUnit4::class)
28 class MetricResultTest {
29     @Test
constructorThrowsIfEmptynull30     fun constructorThrowsIfEmpty() {
31         val exception =
32             assertFailsWith<IllegalArgumentException> { MetricResult("test", emptyList()) }
33 
34         assertEquals("At least one result is necessary, 0 found for test.", exception.message!!)
35     }
36 
37     @Test
zerosnull38     fun zeros() {
39         val metricResult = MetricResult("test", listOf(0.0, 0.0))
40         assertEquals(0.0, metricResult.min, 0.0)
41         assertEquals(0.0, metricResult.max, 0.0)
42         assertEquals(0.0, metricResult.median, 0.0)
43         assertEquals(0.0, metricResult.standardDeviation, 0.0)
44         assertEquals(0.0, metricResult.coefficientOfVariation, 0.0)
45 
46         assertEquals(0, metricResult.minIndex)
47         assertEquals(0, metricResult.maxIndex)
48         assertEquals(1, metricResult.medianIndex)
49     }
50 
51     @Test
repeatnull52     fun repeat() {
53         val metricResult = MetricResult("test", listOf(10.0, 10.0, 10.0, 10.0))
54         assertEquals(10.0, metricResult.min, 0.0)
55         assertEquals(10.0, metricResult.max, 0.0)
56         assertEquals(10.0, metricResult.median, 0.0)
57         assertEquals(0.0, metricResult.standardDeviation, 0.0)
58         assertEquals(0.0, metricResult.coefficientOfVariation, 0.0)
59 
60         assertEquals(0, metricResult.minIndex)
61         assertEquals(0, metricResult.maxIndex)
62         assertEquals(2, metricResult.medianIndex)
63     }
64 
65     @Test
onenull66     fun one() {
67         val metricResult = MetricResult("test", listOf(10.0))
68         assertEquals(10.0, metricResult.min, 0.0)
69         assertEquals(10.0, metricResult.max, 0.0)
70         assertEquals(10.0, metricResult.median, 0.0)
71         assertEquals(0.0, metricResult.standardDeviation, 0.0)
72         assertEquals(0.0, metricResult.coefficientOfVariation, 0.0)
73 
74         assertEquals(0, metricResult.minIndex)
75         assertEquals(0, metricResult.maxIndex)
76         assertEquals(0, metricResult.medianIndex)
77     }
78 
79     @Test
simplenull80     fun simple() {
81         val metricResult = MetricResult("test", (0..100).map { it.toDouble() })
82         assertEquals(50.0, metricResult.median, 0.0)
83         assertEquals(100.0, metricResult.max, 0.0)
84         assertEquals(0.0, metricResult.min, 0.0)
85         assertEquals(29.3, metricResult.standardDeviation, 0.05)
86         assertEquals(0.586, metricResult.coefficientOfVariation, 0.0005)
87 
88         assertEquals(0, metricResult.minIndex)
89         assertEquals(100, metricResult.maxIndex)
90         assertEquals(50, metricResult.medianIndex)
91     }
92 
93     @Test
lerpnull94     fun lerp() {
95         assertEquals(MetricResult.lerp(0.0, 1000.0, 0.5), 500.0, 0.0)
96         assertEquals(MetricResult.lerp(0.0, 1000.0, 0.75), 750.0, 0.0)
97         assertEquals(MetricResult.lerp(0.0, 1000.0, 0.25), 250.0, 0.0)
98         assertEquals(MetricResult.lerp(500.0, 1000.0, 0.25), 625.0, 0.0)
99     }
100 
101     @Test
getPercentilenull102     fun getPercentile() {
103         (0..100).forEach {
104             assertEquals(
105                 it.toDouble(),
106                 MetricResult.getPercentile(listOf(0.0, 25.0, 50.0, 75.0, 100.0), it),
107                 0.01
108             )
109         }
110     }
111 }
112