tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestRollingMean.cpp (2531B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "mozilla/Assertions.h"
      8 #include "mozilla/RollingMean.h"
      9 
     10 using mozilla::RollingMean;
     11 
     12 class MyClass {
     13 public:
     14  uint32_t mValue;
     15 
     16  explicit MyClass(uint32_t aValue = 0) : mValue(aValue) {}
     17 
     18  bool operator==(const MyClass& aOther) const {
     19    return mValue == aOther.mValue;
     20  }
     21 
     22  MyClass operator+(const MyClass& aOther) const {
     23    return MyClass(mValue + aOther.mValue);
     24  }
     25 
     26  MyClass operator-(const MyClass& aOther) const {
     27    return MyClass(mValue - aOther.mValue);
     28  }
     29 
     30  MyClass operator/(uint32_t aDiv) const { return MyClass(mValue / aDiv); }
     31 };
     32 
     33 class RollingMeanSuite {
     34 public:
     35  RollingMeanSuite() = default;
     36 
     37  void runTests() {
     38    testZero();
     39    testClear();
     40    testRolling();
     41    testClass();
     42    testMove();
     43  }
     44 
     45 private:
     46  void testZero() {
     47    RollingMean<uint32_t, uint64_t> mean(3);
     48    MOZ_RELEASE_ASSERT(mean.empty());
     49  }
     50 
     51  void testClear() {
     52    RollingMean<uint32_t, uint64_t> mean(3);
     53 
     54    mean.insert(4);
     55    MOZ_RELEASE_ASSERT(mean.mean() == 4);
     56 
     57    mean.clear();
     58    MOZ_RELEASE_ASSERT(mean.empty());
     59 
     60    mean.insert(3);
     61    MOZ_RELEASE_ASSERT(mean.mean() == 3);
     62  }
     63 
     64  void testRolling() {
     65    RollingMean<uint32_t, uint64_t> mean(3);
     66 
     67    mean.insert(10);
     68    MOZ_RELEASE_ASSERT(mean.mean() == 10);
     69 
     70    mean.insert(20);
     71    MOZ_RELEASE_ASSERT(mean.mean() == 15);
     72 
     73    mean.insert(35);
     74    MOZ_RELEASE_ASSERT(mean.mean() == 21);
     75 
     76    mean.insert(5);
     77    MOZ_RELEASE_ASSERT(mean.mean() == 20);
     78 
     79    mean.insert(10);
     80    MOZ_RELEASE_ASSERT(mean.mean() == 16);
     81  }
     82 
     83  void testClass() {
     84    RollingMean<MyClass, MyClass> mean(3);
     85 
     86    mean.insert(MyClass(4));
     87    MOZ_RELEASE_ASSERT(mean.mean() == MyClass(4));
     88 
     89    mean.clear();
     90    MOZ_RELEASE_ASSERT(mean.empty());
     91  }
     92 
     93  void testMove() {
     94    RollingMean<uint32_t, uint64_t> mean(3);
     95    mean = RollingMean<uint32_t, uint64_t>(4);
     96    MOZ_RELEASE_ASSERT(mean.maxValues() == 4);
     97 
     98    mean.insert(10);
     99    MOZ_RELEASE_ASSERT(mean.mean() == 10);
    100 
    101    mean = RollingMean<uint32_t, uint64_t>(3);
    102    mean.insert(30);
    103    mean.insert(40);
    104    mean.insert(50);
    105    mean.insert(60);
    106    MOZ_RELEASE_ASSERT(mean.mean() == 50);
    107  }
    108 };
    109 
    110 int main() {
    111  RollingMeanSuite suite;
    112  suite.runTests();
    113  return 0;
    114 }