blob: 4ef2ee89bcd103fcded30459c5f92d88474528bf [file] [edit]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cast/streaming/public/statistics.h"
#include "gtest/gtest.h"
#include "util/std_util.h"
namespace openscreen::cast {
class StatisticsTest : public testing::Test {
public:
StatisticsTest() : test_histogram_(-80, 100, 20) {
constexpr std::array<int64_t, 12> kDefaultSamples{
{-200, -144, -80, -61, -60, 59, 0, 79, 80, 81, 99, 100}};
for (int64_t sample : kDefaultSamples) {
test_histogram_.Add(sample);
}
}
const SimpleHistogram& test_histogram() { return test_histogram_; }
protected:
SimpleHistogram test_histogram_;
};
TEST_F(StatisticsTest, SimpleHistogramSamples) {
EXPECT_EQ(-80, test_histogram().min);
EXPECT_EQ(100, test_histogram().max);
EXPECT_EQ(20, test_histogram().width);
EXPECT_EQ(11u, test_histogram().buckets.size());
constexpr std::array<std::pair<size_t, int64_t>, 7> kExpectedBuckets{
{{0u, 2}, {1u, 2}, {2u, 1}, {7u, 1}, {8u, 1}, {9u, 3}, {10u, 1}}};
for (const std::pair<size_t, int64_t>& bucket : kExpectedBuckets) {
EXPECT_EQ(bucket.second, test_histogram().buckets[bucket.first]);
}
}
TEST_F(StatisticsTest, SimpleHistogramCopy) {
SimpleHistogram copy = test_histogram();
EXPECT_EQ(test_histogram(), copy);
}
TEST_F(StatisticsTest, SimpleHistogramSerialization) {
EXPECT_EQ("[]", SimpleHistogram().ToString());
constexpr const char* kExpected =
"[{\"<-80\":2},{\"-80--61\":2},{\"-60--41\":1},{\"0-19\":1},"
"{\"40-59\":1},{\"60-79\":1},{\"80-99\":3},{\">=100\":1}]";
std::string serialized = test_histogram().ToString();
RemoveWhitespace(serialized);
EXPECT_EQ(kExpected, serialized);
}
} // namespace openscreen::cast