1/* 2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#include <math.h> 12 13#include "webrtc/base/gunit.h" 14#include "webrtc/base/exp_filter.h" 15 16namespace rtc { 17 18TEST(ExpFilterTest, FirstTimeOutputEqualInput) { 19 // No max value defined. 20 ExpFilter filter = ExpFilter(0.9f); 21 filter.Apply(100.0f, 10.0f); 22 23 // First time, first argument no effect. 24 double value = 10.0f; 25 EXPECT_FLOAT_EQ(value, filter.filtered()); 26} 27 28TEST(ExpFilterTest, SecondTime) { 29 double value; 30 31 ExpFilter filter = ExpFilter(0.9f); 32 filter.Apply(100.0f, 10.0f); 33 34 // First time, first argument no effect. 35 value = 10.0f; 36 37 filter.Apply(10.0f, 20.0f); 38 double alpha = pow(0.9f, 10.0f); 39 value = alpha * value + (1.0f - alpha) * 20.0f; 40 EXPECT_FLOAT_EQ(value, filter.filtered()); 41} 42 43TEST(ExpFilterTest, Reset) { 44 ExpFilter filter = ExpFilter(0.9f); 45 filter.Apply(100.0f, 10.0f); 46 47 filter.Reset(0.8f); 48 filter.Apply(100.0f, 1.0f); 49 50 // Become first time after a reset. 51 double value = 1.0f; 52 EXPECT_FLOAT_EQ(value, filter.filtered()); 53} 54 55TEST(ExpfilterTest, OutputLimitedByMax) { 56 double value; 57 58 // Max value defined. 59 ExpFilter filter = ExpFilter(0.9f, 1.0f); 60 filter.Apply(100.0f, 10.0f); 61 62 // Limited to max value. 63 value = 1.0f; 64 EXPECT_EQ(value, filter.filtered()); 65 66 filter.Apply(1.0f, 0.0f); 67 value = 0.9f * value; 68 EXPECT_FLOAT_EQ(value, filter.filtered()); 69} 70 71} // namespace rtc 72