From 590d647d81f17c187e1de9952faf5c0f884e581c Mon Sep 17 00:00:00 2001 From: Alex Chronopoulos Date: Tue, 13 Aug 2019 05:14:22 +0000 Subject: [PATCH] Bug 1573184 - Add gtests to BenchmarkStorage classes. r=jya Differential Revision: https://phabricator.services.mozilla.com/D41580 --HG-- extra : moz-landing-system : lando --- dom/media/gtest/TestBenchmarkStorage.cpp | 92 +++++++++++++++++++ dom/media/gtest/moz.build | 1 + .../BenchmarkStorageParent.cpp | 9 +- .../BenchmarkStorageParent.h | 6 ++ 4 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 dom/media/gtest/TestBenchmarkStorage.cpp diff --git a/dom/media/gtest/TestBenchmarkStorage.cpp b/dom/media/gtest/TestBenchmarkStorage.cpp new file mode 100644 index 000000000000..0f1eb7e4c42d --- /dev/null +++ b/dom/media/gtest/TestBenchmarkStorage.cpp @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/BenchmarkStorageParent.h" + +#include "gmock/gmock.h" +#include "gtest/gtest-printers.h" +#include "gtest/gtest.h" + +using ::testing::Return; +using namespace mozilla; + +TEST(BenchmarkStorage, MovingAverage) +{ + int32_t av = 0; + int32_t win = 0; + int32_t val = 100; + BenchmarkStorageParent::MovingAverage(av, win, val); + EXPECT_EQ(av, val) << "1st average"; + EXPECT_EQ(win, 1) << "1st window"; + + av = 50; + win = 1; + val = 100; + BenchmarkStorageParent::MovingAverage(av, win, val); + EXPECT_EQ(av, 75) << "2nd average"; + EXPECT_EQ(win, 2) << "2nd window"; + + av = 100; + win = 9; + val = 90; + BenchmarkStorageParent::MovingAverage(av, win, val); + EXPECT_EQ(av, 99) << "9th average"; + EXPECT_EQ(win, 10) << "9th window"; + + av = 90; + win = 19; + val = 90; + BenchmarkStorageParent::MovingAverage(av, win, val); + EXPECT_EQ(av, 90) << "19th average"; + EXPECT_EQ(win, 20) << "19th window"; + + av = 90; + win = 20; + val = 100; + BenchmarkStorageParent::MovingAverage(av, win, val); + EXPECT_EQ(av, 91) << "20th average"; + EXPECT_EQ(win, 20) << "20th window"; +} + +TEST(BenchmarkStorage, ParseStoredValue) +{ + int32_t win = 0; + int32_t score = BenchmarkStorageParent::ParseStoredValue(1100, win); + EXPECT_EQ(win, 1) << "Window"; + EXPECT_EQ(score, 100) << "Score/Percentage"; + + win = 0; + score = BenchmarkStorageParent::ParseStoredValue(10099, win); + EXPECT_EQ(win, 10) << "Window"; + EXPECT_EQ(score, 99) << "Score/Percentage"; + + win = 0; + score = BenchmarkStorageParent::ParseStoredValue(15038, win); + EXPECT_EQ(win, 15) << "Window"; + EXPECT_EQ(score, 38) << "Score/Percentage"; + + win = 0; + score = BenchmarkStorageParent::ParseStoredValue(20099, win); + EXPECT_EQ(win, 20) << "Window"; + EXPECT_EQ(score, 99) << "Score/Percentage"; +} + +TEST(BenchmarkStorage, PrepareStoredValue) +{ + int32_t stored_value = BenchmarkStorageParent::PrepareStoredValue(80, 1); + EXPECT_EQ(stored_value, 1080) << "Window"; + + stored_value = BenchmarkStorageParent::PrepareStoredValue(100, 6); + EXPECT_EQ(stored_value, 6100) << "Window"; + + stored_value = BenchmarkStorageParent::PrepareStoredValue(1, 10); + EXPECT_EQ(stored_value, 10001) << "Window"; + + stored_value = BenchmarkStorageParent::PrepareStoredValue(88, 13); + EXPECT_EQ(stored_value, 13088) << "Window"; + + stored_value = BenchmarkStorageParent::PrepareStoredValue(100, 20); + EXPECT_EQ(stored_value, 20100) << "Window"; +} diff --git a/dom/media/gtest/moz.build b/dom/media/gtest/moz.build index f9f7d0d42f88..589c1caa441d 100644 --- a/dom/media/gtest/moz.build +++ b/dom/media/gtest/moz.build @@ -23,6 +23,7 @@ UNIFIED_SOURCES += [ 'TestAudioPacketizer.cpp', 'TestAudioSegment.cpp', 'TestAudioTrackEncoder.cpp', + 'TestBenchmarkStorage.cpp', 'TestBitWriter.cpp', 'TestBlankVideoDataCreator.cpp', 'TestBufferReader.cpp', diff --git a/dom/media/mediacapabilities/BenchmarkStorageParent.cpp b/dom/media/mediacapabilities/BenchmarkStorageParent.cpp index 54e5ad41fa76..fc7e07a5a3e7 100644 --- a/dom/media/mediacapabilities/BenchmarkStorageParent.cpp +++ b/dom/media/mediacapabilities/BenchmarkStorageParent.cpp @@ -15,7 +15,8 @@ const int32_t AVG_WINDOW = 20; * aWindow and the already existing average aAverage. When the method returns * aAverage will contain the new average and aWindow will contain the new * window.*/ -void MovingAverage(int32_t& aAverage, int32_t& aWindow, const int32_t aValue) { +void BenchmarkStorageParent::MovingAverage(int32_t& aAverage, int32_t& aWindow, + const int32_t aValue) { if (aWindow < AVG_WINDOW) { aAverage = (aAverage * aWindow + aValue) / (aWindow + 1); aWindow++; @@ -39,7 +40,8 @@ void MovingAverage(int32_t& aAverage, int32_t& aWindow, const int32_t aValue) { * (19) and the average score (98). The aValue will * be parsed, the aWindow will contain the window (of the moving average) and * the return value will contain the average itself. */ -int32_t ParseStoredValue(int32_t aValue, int32_t& aWindow) { +int32_t BenchmarkStorageParent::ParseStoredValue(int32_t aValue, + int32_t& aWindow) { MOZ_ASSERT(aValue > 999); MOZ_ASSERT(aValue < 100000); @@ -48,7 +50,8 @@ int32_t ParseStoredValue(int32_t aValue, int32_t& aWindow) { return score; } -int32_t PrepareStoredValue(int32_t aScore, int32_t aWindow) { +int32_t BenchmarkStorageParent::PrepareStoredValue(int32_t aScore, + int32_t aWindow) { MOZ_ASSERT(aScore >= 0); MOZ_ASSERT(aScore <= 100); MOZ_ASSERT(aWindow > 0); diff --git a/dom/media/mediacapabilities/BenchmarkStorageParent.h b/dom/media/mediacapabilities/BenchmarkStorageParent.h index f94bff9aa68e..e9c8f9dd9bac 100644 --- a/dom/media/mediacapabilities/BenchmarkStorageParent.h +++ b/dom/media/mediacapabilities/BenchmarkStorageParent.h @@ -28,6 +28,12 @@ class BenchmarkStorageParent : public PBenchmarkStorageParent { IPCResult RecvCheckVersion(const nsCString& aDbName, int32_t aVersion); + /* Helper methods exposed here to be tested via gtest. */ + static void MovingAverage(int32_t& aAverage, int32_t& aWindow, + const int32_t aValue); + static int32_t ParseStoredValue(int32_t aValue, int32_t& aWindow); + static int32_t PrepareStoredValue(int32_t aScore, int32_t aWindow); + private: RefPtr mStorage; };