131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org/* 231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * Copyright 2014 The WebRTC Project Authors. All rights reserved. 331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * 431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * Use of this source code is governed by a BSD-style license 531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * that can be found in the LICENSE file in the root of the source 631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * tree. An additional intellectual property rights grant can be found 731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * in the file PATENTS. All contributing project authors may 831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * be found in the AUTHORS file in the root of the source tree. 931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org */ 1031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org#include <math.h> 1231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org#include "webrtc/base/gunit.h" 1431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org#include "webrtc/base/exp_filter.h" 1531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgnamespace rtc { 1731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgTEST(ExpFilterTest, FirstTimeOutputEqualInput) { 1931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // No max value defined. 2031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org ExpFilter filter = ExpFilter(0.9f); 2131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org filter.Apply(100.0f, 10.0f); 2231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 2331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // First time, first argument no effect. 2431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org double value = 10.0f; 2531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org EXPECT_FLOAT_EQ(value, filter.filtered()); 2631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} 2731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 2831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgTEST(ExpFilterTest, SecondTime) { 2931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org double value; 3031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 3131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org ExpFilter filter = ExpFilter(0.9f); 3231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org filter.Apply(100.0f, 10.0f); 3331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 3431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // First time, first argument no effect. 3531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org value = 10.0f; 3631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 3731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org filter.Apply(10.0f, 20.0f); 3831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org double alpha = pow(0.9f, 10.0f); 3931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org value = alpha * value + (1.0f - alpha) * 20.0f; 4031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org EXPECT_FLOAT_EQ(value, filter.filtered()); 4131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} 4231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 4331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgTEST(ExpFilterTest, Reset) { 4431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org ExpFilter filter = ExpFilter(0.9f); 4531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org filter.Apply(100.0f, 10.0f); 4631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 4731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org filter.Reset(0.8f); 4831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org filter.Apply(100.0f, 1.0f); 4931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 5031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // Become first time after a reset. 5131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org double value = 1.0f; 5231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org EXPECT_FLOAT_EQ(value, filter.filtered()); 5331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} 5431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 5531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgTEST(ExpfilterTest, OutputLimitedByMax) { 5631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org double value; 5731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 5831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // Max value defined. 5931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org ExpFilter filter = ExpFilter(0.9f, 1.0f); 6031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org filter.Apply(100.0f, 10.0f); 6131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 6231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // Limited to max value. 6331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org value = 1.0f; 6431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org EXPECT_EQ(value, filter.filtered()); 6531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 6631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org filter.Apply(1.0f, 0.0f); 6731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org value = 0.9f * value; 6831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org EXPECT_FLOAT_EQ(value, filter.filtered()); 6931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} 7031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 7131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} // namespace rtc 72