OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Test of Histogram class | 5 // Test of Histogram class |
6 | 6 |
7 #include <climits> | 7 #include <climits> |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 "DuplicatedHistogram", 1, 101, 102, HistogramBase::kNoFlags); | 83 "DuplicatedHistogram", 1, 101, 102, HistogramBase::kNoFlags); |
84 | 84 |
85 scoped_ptr<HistogramSamples> samples = histogram->SnapshotSamples(); | 85 scoped_ptr<HistogramSamples> samples = histogram->SnapshotSamples(); |
86 EXPECT_EQ(2, samples->TotalCount()); | 86 EXPECT_EQ(2, samples->TotalCount()); |
87 EXPECT_EQ(2, samples->GetCount(10)); | 87 EXPECT_EQ(2, samples->GetCount(10)); |
88 } | 88 } |
89 | 89 |
90 TEST_F(HistogramTest, ExponentialRangesTest) { | 90 TEST_F(HistogramTest, ExponentialRangesTest) { |
91 // Check that we got a nice exponential when there was enough rooom. | 91 // Check that we got a nice exponential when there was enough rooom. |
92 BucketRanges ranges(9); | 92 BucketRanges ranges(9); |
93 Histogram::InitializeBucketRanges(1, 64, 8, &ranges); | 93 Histogram::InitializeBucketRanges(1, 64, &ranges); |
94 EXPECT_EQ(0, ranges.range(0)); | 94 EXPECT_EQ(0, ranges.range(0)); |
95 int power_of_2 = 1; | 95 int power_of_2 = 1; |
96 for (int i = 1; i < 8; i++) { | 96 for (int i = 1; i < 8; i++) { |
97 EXPECT_EQ(power_of_2, ranges.range(i)); | 97 EXPECT_EQ(power_of_2, ranges.range(i)); |
98 power_of_2 *= 2; | 98 power_of_2 *= 2; |
99 } | 99 } |
100 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges.range(8)); | 100 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges.range(8)); |
101 | 101 |
102 // Check the corresponding Histogram will use the correct ranges. | 102 // Check the corresponding Histogram will use the correct ranges. |
103 Histogram* histogram = static_cast<Histogram*>( | 103 Histogram* histogram = static_cast<Histogram*>( |
104 Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags)); | 104 Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags)); |
105 EXPECT_TRUE(ranges.Equals(histogram->bucket_ranges())); | 105 EXPECT_TRUE(ranges.Equals(histogram->bucket_ranges())); |
106 | 106 |
107 // When bucket count is limited, exponential ranges will partially look like | 107 // When bucket count is limited, exponential ranges will partially look like |
108 // linear. | 108 // linear. |
109 BucketRanges ranges2(16); | 109 BucketRanges ranges2(16); |
110 Histogram::InitializeBucketRanges(1, 32, 15, &ranges2); | 110 Histogram::InitializeBucketRanges(1, 32, &ranges2); |
111 | 111 |
112 EXPECT_EQ(0, ranges2.range(0)); | 112 EXPECT_EQ(0, ranges2.range(0)); |
113 EXPECT_EQ(1, ranges2.range(1)); | 113 EXPECT_EQ(1, ranges2.range(1)); |
114 EXPECT_EQ(2, ranges2.range(2)); | 114 EXPECT_EQ(2, ranges2.range(2)); |
115 EXPECT_EQ(3, ranges2.range(3)); | 115 EXPECT_EQ(3, ranges2.range(3)); |
116 EXPECT_EQ(4, ranges2.range(4)); | 116 EXPECT_EQ(4, ranges2.range(4)); |
117 EXPECT_EQ(5, ranges2.range(5)); | 117 EXPECT_EQ(5, ranges2.range(5)); |
118 EXPECT_EQ(6, ranges2.range(6)); | 118 EXPECT_EQ(6, ranges2.range(6)); |
119 EXPECT_EQ(7, ranges2.range(7)); | 119 EXPECT_EQ(7, ranges2.range(7)); |
120 EXPECT_EQ(9, ranges2.range(8)); | 120 EXPECT_EQ(9, ranges2.range(8)); |
121 EXPECT_EQ(11, ranges2.range(9)); | 121 EXPECT_EQ(11, ranges2.range(9)); |
122 EXPECT_EQ(14, ranges2.range(10)); | 122 EXPECT_EQ(14, ranges2.range(10)); |
123 EXPECT_EQ(17, ranges2.range(11)); | 123 EXPECT_EQ(17, ranges2.range(11)); |
124 EXPECT_EQ(21, ranges2.range(12)); | 124 EXPECT_EQ(21, ranges2.range(12)); |
125 EXPECT_EQ(26, ranges2.range(13)); | 125 EXPECT_EQ(26, ranges2.range(13)); |
126 EXPECT_EQ(32, ranges2.range(14)); | 126 EXPECT_EQ(32, ranges2.range(14)); |
127 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges2.range(15)); | 127 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges2.range(15)); |
128 | 128 |
129 // Check the corresponding Histogram will use the correct ranges. | 129 // Check the corresponding Histogram will use the correct ranges. |
130 Histogram* histogram2 = static_cast<Histogram*>( | 130 Histogram* histogram2 = static_cast<Histogram*>( |
131 Histogram::FactoryGet("Histogram2", 1, 32, 15, HistogramBase::kNoFlags)); | 131 Histogram::FactoryGet("Histogram2", 1, 32, 15, HistogramBase::kNoFlags)); |
132 EXPECT_TRUE(ranges2.Equals(histogram2->bucket_ranges())); | 132 EXPECT_TRUE(ranges2.Equals(histogram2->bucket_ranges())); |
133 } | 133 } |
134 | 134 |
135 TEST_F(HistogramTest, LinearRangesTest) { | 135 TEST_F(HistogramTest, LinearRangesTest) { |
136 BucketRanges ranges(9); | 136 BucketRanges ranges(9); |
137 LinearHistogram::InitializeBucketRanges(1, 7, 8, &ranges); | 137 LinearHistogram::InitializeBucketRanges(1, 7, &ranges); |
138 // Gets a nice linear set of bucket ranges. | 138 // Gets a nice linear set of bucket ranges. |
139 for (int i = 0; i < 8; i++) | 139 for (int i = 0; i < 8; i++) |
140 EXPECT_EQ(i, ranges.range(i)); | 140 EXPECT_EQ(i, ranges.range(i)); |
141 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges.range(8)); | 141 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges.range(8)); |
142 | 142 |
143 // The correspoding LinearHistogram should use the correct ranges. | 143 // The correspoding LinearHistogram should use the correct ranges. |
144 Histogram* histogram = static_cast<Histogram*>( | 144 Histogram* histogram = static_cast<Histogram*>( |
145 LinearHistogram::FactoryGet("Linear", 1, 7, 8, HistogramBase::kNoFlags)); | 145 LinearHistogram::FactoryGet("Linear", 1, 7, 8, HistogramBase::kNoFlags)); |
146 EXPECT_TRUE(ranges.Equals(histogram->bucket_ranges())); | 146 EXPECT_TRUE(ranges.Equals(histogram->bucket_ranges())); |
147 | 147 |
148 // Linear ranges are not divisible. | 148 // Linear ranges are not divisible. |
149 BucketRanges ranges2(6); | 149 BucketRanges ranges2(6); |
150 LinearHistogram::InitializeBucketRanges(1, 6, 5, &ranges2); | 150 LinearHistogram::InitializeBucketRanges(1, 6, &ranges2); |
151 EXPECT_EQ(0, ranges2.range(0)); | 151 EXPECT_EQ(0, ranges2.range(0)); |
152 EXPECT_EQ(1, ranges2.range(1)); | 152 EXPECT_EQ(1, ranges2.range(1)); |
153 EXPECT_EQ(3, ranges2.range(2)); | 153 EXPECT_EQ(3, ranges2.range(2)); |
154 EXPECT_EQ(4, ranges2.range(3)); | 154 EXPECT_EQ(4, ranges2.range(3)); |
155 EXPECT_EQ(6, ranges2.range(4)); | 155 EXPECT_EQ(6, ranges2.range(4)); |
156 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges2.range(5)); | 156 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges2.range(5)); |
157 // The correspoding LinearHistogram should use the correct ranges. | 157 // The correspoding LinearHistogram should use the correct ranges. |
158 Histogram* histogram2 = static_cast<Histogram*>( | 158 Histogram* histogram2 = static_cast<Histogram*>( |
159 LinearHistogram::FactoryGet("Linear2", 1, 6, 5, HistogramBase::kNoFlags)); | 159 LinearHistogram::FactoryGet("Linear2", 1, 6, 5, HistogramBase::kNoFlags)); |
160 EXPECT_TRUE(ranges2.Equals(histogram2->bucket_ranges())); | 160 EXPECT_TRUE(ranges2.Equals(histogram2->bucket_ranges())); |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 // CustomHistogram needs at least 1 valid range. | 484 // CustomHistogram needs at least 1 valid range. |
485 custom_ranges.clear(); | 485 custom_ranges.clear(); |
486 custom_ranges.push_back(0); | 486 custom_ranges.push_back(0); |
487 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, | 487 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, |
488 HistogramBase::kNoFlags), | 488 HistogramBase::kNoFlags), |
489 ""); | 489 ""); |
490 } | 490 } |
491 #endif | 491 #endif |
492 | 492 |
493 } // namespace base | 493 } // namespace base |
OLD | NEW |