blob: 19e9ab37d223930734f2b55dd0f8003037f1ddc9 [file] [log] [blame]
andresp@webrtc.org6b68c282013-05-13 08:06:36 +00001/*
2 * Copyright (c) 2013 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 */
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020010#include "modules/audio_processing/include/config.h"
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000011
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020012#include "test/gtest.h"
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000013
14namespace webrtc {
15namespace {
16
17struct MyExperiment {
aluebs688e3082016-01-14 04:32:46 -080018 static const ConfigOptionID identifier = ConfigOptionID::kMyExperimentForTest;
pbos@webrtc.org2de80dd2013-06-27 10:18:09 +000019 static const int kDefaultFactor;
20 static const int kDefaultOffset;
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000021
Yves Gerey665174f2018-06-19 15:03:05 +020022 MyExperiment() : factor(kDefaultFactor), offset(kDefaultOffset) {}
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000023
Yves Gerey665174f2018-06-19 15:03:05 +020024 MyExperiment(int factor, int offset) : factor(factor), offset(offset) {}
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000025
26 int factor;
27 int offset;
28};
29
pbos@webrtc.org2de80dd2013-06-27 10:18:09 +000030const int MyExperiment::kDefaultFactor = 1;
31const int MyExperiment::kDefaultOffset = 2;
32
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000033TEST(Config, ReturnsDefaultInstanceIfNotConfigured) {
34 Config config;
35 const MyExperiment& my_exp = config.Get<MyExperiment>();
36 EXPECT_EQ(MyExperiment::kDefaultFactor, my_exp.factor);
37 EXPECT_EQ(MyExperiment::kDefaultOffset, my_exp.offset);
38}
39
40TEST(Config, ReturnOptionWhenSet) {
41 Config config;
42 config.Set<MyExperiment>(new MyExperiment(5, 1));
43 const MyExperiment& my_exp = config.Get<MyExperiment>();
44 EXPECT_EQ(5, my_exp.factor);
45 EXPECT_EQ(1, my_exp.offset);
46}
47
48TEST(Config, SetNullSetsTheOptionBackToDefault) {
49 Config config;
50 config.Set<MyExperiment>(new MyExperiment(5, 1));
51 config.Set<MyExperiment>(NULL);
52 const MyExperiment& my_exp = config.Get<MyExperiment>();
53 EXPECT_EQ(MyExperiment::kDefaultFactor, my_exp.factor);
54 EXPECT_EQ(MyExperiment::kDefaultOffset, my_exp.offset);
55}
56
57struct Algo1_CostFunction {
aluebs688e3082016-01-14 04:32:46 -080058 static const ConfigOptionID identifier =
59 ConfigOptionID::kAlgo1CostFunctionForTest;
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000060 Algo1_CostFunction() {}
61
Yves Gerey665174f2018-06-19 15:03:05 +020062 virtual int cost(int x) const { return x; }
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000063
64 virtual ~Algo1_CostFunction() {}
65};
66
67struct SqrCost : Algo1_CostFunction {
Yves Gerey665174f2018-06-19 15:03:05 +020068 virtual int cost(int x) const { return x * x; }
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000069};
70
pbos@webrtc.org2de80dd2013-06-27 10:18:09 +000071TEST(Config, SupportsPolymorphism) {
andresp@webrtc.org6b68c282013-05-13 08:06:36 +000072 Config config;
73 config.Set<Algo1_CostFunction>(new SqrCost());
74 EXPECT_EQ(25, config.Get<Algo1_CostFunction>().cost(5));
75}
76} // namespace
77} // namespace webrtc