174aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org/* 274aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org * Copyright 2014 The WebRTC Project Authors. All rights reserved. 374aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org * 474aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org * Use of this source code is governed by a BSD-style license 574aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org * that can be found in the LICENSE file in the root of the source 674aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org * tree. An additional intellectual property rights grant can be found 774aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org * in the file PATENTS. All contributing project authors may 874aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org * be found in the AUTHORS file in the root of the source tree. 974aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org */ 1074aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 1174aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org#include <math.h> 1274aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 1374aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org#include "webrtc/base/gunit.h" 1474aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org#include "webrtc/base/exp_filter.h" 1574aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 1674aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.orgnamespace rtc { 1774aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 1874aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.orgTEST(ExpFilterTest, FirstTimeOutputEqualInput) { 1974aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org // No max value defined. 2074aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org ExpFilter filter = ExpFilter(0.9f); 2174aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org filter.Apply(100.0f, 10.0f); 2274aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 2374aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org // First time, first argument no effect. 2474aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org double value = 10.0f; 2574aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org EXPECT_FLOAT_EQ(value, filter.filtered()); 2674aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org} 2774aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 2874aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.orgTEST(ExpFilterTest, SecondTime) { 2974aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org double value; 3074aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 3174aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org ExpFilter filter = ExpFilter(0.9f); 3274aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org filter.Apply(100.0f, 10.0f); 3374aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 3474aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org // First time, first argument no effect. 3574aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org value = 10.0f; 3674aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 3774aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org filter.Apply(10.0f, 20.0f); 3874aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org double alpha = pow(0.9f, 10.0f); 3974aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org value = alpha * value + (1.0f - alpha) * 20.0f; 4074aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org EXPECT_FLOAT_EQ(value, filter.filtered()); 4174aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org} 4274aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 4374aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.orgTEST(ExpFilterTest, Reset) { 4474aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org ExpFilter filter = ExpFilter(0.9f); 4574aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org filter.Apply(100.0f, 10.0f); 4674aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 4774aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org filter.Reset(0.8f); 4874aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org filter.Apply(100.0f, 1.0f); 4974aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 5074aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org // Become first time after a reset. 5174aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org double value = 1.0f; 5274aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org EXPECT_FLOAT_EQ(value, filter.filtered()); 5374aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org} 5474aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 5574aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.orgTEST(ExpfilterTest, OutputLimitedByMax) { 5674aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org double value; 5774aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 5874aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org // Max value defined. 5974aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org ExpFilter filter = ExpFilter(0.9f, 1.0f); 6074aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org filter.Apply(100.0f, 10.0f); 6174aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 6274aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org // Limited to max value. 6374aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org value = 1.0f; 6474aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org EXPECT_EQ(value, filter.filtered()); 6574aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 6674aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org filter.Apply(1.0f, 0.0f); 6774aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org value = 0.9f * value; 6874aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org EXPECT_FLOAT_EQ(value, filter.filtered()); 6974aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org} 7074aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org 7174aaf29a0ff1b211dbfdbb6309791111a7871779minyue@webrtc.org} // namespace rtc 72