blob: f6f7cbb745a0db5eb904aede43f227e6a3e84098 [file] [log] [blame]
Paul Duffin7fc0b452015-11-10 17:45:15 +00001/*
2 * Copyright (C) 2010 Google Inc.
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
17package com.google.caliper;
18
19import com.google.common.collect.ImmutableMap;
20import com.google.common.collect.Ordering;
21import java.util.Arrays;
22import java.util.Collections;
23import java.util.List;
24import junit.framework.TestCase;
25
26public class MeasurementSetTest extends TestCase {
27
28 Ordering<Measurement> MEASUREMENT_BY_NANOS = new Ordering<Measurement>() {
29 @Override public int compare(Measurement a, Measurement b) {
30 return Double.compare(a.getRaw(), b.getRaw());
31 }
32 };
33
34 public void testIncompatibleMeasurements() {
35 Measurement[] measurements = new Measurement[2];
36 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
37 measurements[1] = new Measurement(ImmutableMap.of("triplens", 1), 3.8, 7.6);
38 try {
39 new MeasurementSet(measurements);
40 fail("illegal argument exception not thrown");
41 } catch (IllegalArgumentException e) {
42 // success
43 }
44 }
45
46 public void testIncompatibleAddedMeasurements() {
47 Measurement[] measurements = new Measurement[1];
48 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
49 MeasurementSet measurementSet = new MeasurementSet(measurements);
50 try {
51 measurementSet.plusMeasurement(new Measurement(ImmutableMap.of("triplens", 1), 3.8, 7.6));
52 fail("illegal argument exception not thrown");
53 } catch (IllegalArgumentException e) {
54 // success
55 }
56 }
57
58 public void testSize() {
59 Measurement[] measurements = new Measurement[3];
60 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
61 measurements[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
62 measurements[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
63 MeasurementSet measurementSet = new MeasurementSet(measurements);
64 assertEquals(3, measurementSet.size());
65
66 Measurement[] measurements2 = new Measurement[4];
67 measurements2[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
68 measurements2[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
69 measurements2[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
70 measurements2[3] = new Measurement(ImmutableMap.of("doublens", 1), 7.2, 14.4);
71 MeasurementSet measurementSet2 =
72 new MeasurementSet(measurements2);
73 assertEquals(4, measurementSet2.size());
74 }
75
76 public void testPlusMeasurement() {
77 Measurement[] measurements = new Measurement[3];
78 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
79 measurements[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
80 measurements[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
81 MeasurementSet measurementSet = new MeasurementSet(measurements);
82
83 Measurement[] measurements2 = new Measurement[4];
84 measurements2[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
85 measurements2[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
86 measurements2[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
87 measurements2[3] = new Measurement(ImmutableMap.of("doublens", 1), 7.2, 14.4);
88 MeasurementSet measurementSet2 =
89 new MeasurementSet(measurements2);
90
91 MeasurementSet measurementSet3 = measurementSet.plusMeasurement(measurements2[3]);
92
93 assertDoubleListsEquals(measurementSet2.getMeasurementsRaw(),
94 measurementSet3.getMeasurementsRaw(), 0.0000001);
95 assertDoubleListsEquals(measurementSet2.getMeasurementUnits(),
96 measurementSet3.getMeasurementUnits(), 0.0000001);
97 assertEquals(measurementSet2.getUnitNames(), measurementSet3.getUnitNames());
98
99 List<Measurement> measurementList1 =
100 MEASUREMENT_BY_NANOS.sortedCopy(measurementSet2.getMeasurements());
101 List<Measurement> measurementList2 =
102 MEASUREMENT_BY_NANOS.sortedCopy(measurementSet3.getMeasurements());
103 assertEquals(measurementList1.size(), measurementList2.size());
104 for (int i = 0; i < measurementList1.size(); i++) {
105 assertEquals(measurementList1.get(i).getRaw(),
106 measurementList2.get(i).getRaw());
107 assertEquals(measurementList1.get(i).getProcessed(),
108 measurementList2.get(i).getProcessed());
109 }
110 }
111
112 public void testMedian() {
113 Measurement[] measurements = new Measurement[3];
114 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
115 measurements[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
116 measurements[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
117 MeasurementSet measurementSet = new MeasurementSet(measurements);
118 assertEquals(2.3, measurementSet.medianRaw(), 0.00000001);
119 assertEquals(4.6, measurementSet.medianUnits(), 0.00000001);
120
121 Measurement[] measurements2 = new Measurement[4];
122 measurements2[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
123 measurements2[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
124 measurements2[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
125 measurements2[3] = new Measurement(ImmutableMap.of("doublens", 1), 7.2, 14.4);
126 MeasurementSet measurementSet2 =
127 new MeasurementSet(measurements2);
128 assertEquals((2.3 + 3.8) / 2, measurementSet2.medianRaw(), 0.00000001);
129 assertEquals((4.6 + 7.6) / 2, measurementSet2.medianUnits(), 0.00000001);
130 }
131
132 public void testMean() {
133 Measurement[] measurements = new Measurement[3];
134 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
135 measurements[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
136 measurements[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
137 MeasurementSet measurementSet = new MeasurementSet(measurements);
138 assertEquals((1.1 + 3.8 + 2.3) / 3, measurementSet.meanRaw(), 0.00000001);
139 assertEquals((2.2 + 7.6 + 4.6) / 3, measurementSet.meanUnits(), 0.00000001);
140
141 Measurement[] measurements2 = new Measurement[4];
142 measurements2[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
143 measurements2[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
144 measurements2[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
145 measurements2[3] = new Measurement(ImmutableMap.of("doublens", 1), 7.2, 14.4);
146 MeasurementSet measurementSet2 =
147 new MeasurementSet(measurements2);
148 assertEquals((1.1 + 2.3 + 3.8 + 7.2) / 4, measurementSet2.meanRaw(), 0.00000001);
149 assertEquals((2.2 + 4.6 + 7.6 + 14.4) / 4, measurementSet2.meanUnits(), 0.00000001);
150 }
151
152 public void testStandardDeviation() {
153 Measurement[] measurements = new Measurement[3];
154 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
155 measurements[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
156 measurements[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
157 MeasurementSet measurementSet = new MeasurementSet(measurements);
158 assertEquals(1.35277, measurementSet.standardDeviationRaw(), 0.00001);
159 assertEquals(2.70555, measurementSet.standardDeviationUnits(), 0.00001);
160 }
161
162 public void testMax() {
163 Measurement[] measurements = new Measurement[3];
164 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
165 measurements[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
166 measurements[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
167 MeasurementSet measurementSet = new MeasurementSet(measurements);
168 assertEquals(3.8, measurementSet.maxRaw(), 0.00000001);
169 assertEquals(7.6, measurementSet.maxUnits(), 0.00000001);
170 }
171
172 public void testMin() {
173 Measurement[] measurements = new Measurement[3];
174 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
175 measurements[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
176 measurements[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
177 MeasurementSet measurementSet = new MeasurementSet(measurements);
178 assertEquals(1.1, measurementSet.minRaw(), 0.00000001);
179 assertEquals(2.2, measurementSet.minUnits(), 0.00000001);
180 }
181
182 public void testJsonRoundtrip() {
183 Measurement[] measurements = new Measurement[3];
184 measurements[0] = new Measurement(ImmutableMap.of("doublens", 1), 1.1, 2.2);
185 measurements[1] = new Measurement(ImmutableMap.of("doublens", 1), 3.8, 7.6);
186 measurements[2] = new Measurement(ImmutableMap.of("doublens", 1), 2.3, 4.6);
187 MeasurementSet measurementSet = new MeasurementSet(measurements);
188 MeasurementSet roundTripped =
189 Json.measurementSetFromJson(Json.measurementSetToJson(measurementSet));
190 assertDoubleListsEquals(measurementSet.getMeasurementsRaw(),
191 roundTripped.getMeasurementsRaw(), 0.00000001);
192 assertDoubleListsEquals(measurementSet.getMeasurementUnits(),
193 roundTripped.getMeasurementUnits(), 0.00000001);
194 assertEquals(measurementSet.getUnitNames(), roundTripped.getUnitNames());
195 }
196
197 @SuppressWarnings({"AssertEqualsBetweenInconvertibleTypes"})
198 public void testFromLegacyString() {
199 MeasurementSet measurementSet = Json.measurementSetFromJson("122.0 133.0 144.0");
200 assertDoubleListsEquals(Arrays.asList(122.0, 133.0, 144.0),
201 measurementSet.getMeasurementsRaw(), 0.00000001);
202 assertDoubleListsEquals(Arrays.asList(122.0, 133.0, 144.0),
203 measurementSet.getMeasurementUnits(), 0.00000001);
204 assertEquals(ImmutableMap.of("ns", 1, "us", 1000, "ms", 1000000, "s", 1000000000),
205 measurementSet.getUnitNames());
206 }
207
208 private void assertDoubleListsEquals(List<Double> expected, List<Double> actual, double epsilon) {
209 assertEquals(expected.size(), actual.size());
210 Collections.sort(expected);
211 Collections.sort(actual);
212 for (int i = 0; i < expected.size(); i++) {
213 assertEquals(expected.get(i), actual.get(i), epsilon);
214 }
215 }
216}