1 /*
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 */
10 #include "webrtc/common.h"
11
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace webrtc {
15 namespace {
16
17 struct MyExperiment {
18 static const ConfigOptionID identifier = ConfigOptionID::kMyExperimentForTest;
19 static const int kDefaultFactor;
20 static const int kDefaultOffset;
21
MyExperimentwebrtc::__anon198b9ec80111::MyExperiment22 MyExperiment()
23 : factor(kDefaultFactor), offset(kDefaultOffset) {}
24
MyExperimentwebrtc::__anon198b9ec80111::MyExperiment25 MyExperiment(int factor, int offset)
26 : factor(factor), offset(offset) {}
27
28 int factor;
29 int offset;
30 };
31
32 const int MyExperiment::kDefaultFactor = 1;
33 const int MyExperiment::kDefaultOffset = 2;
34
TEST(Config,ReturnsDefaultInstanceIfNotConfigured)35 TEST(Config, ReturnsDefaultInstanceIfNotConfigured) {
36 Config config;
37 const MyExperiment& my_exp = config.Get<MyExperiment>();
38 EXPECT_EQ(MyExperiment::kDefaultFactor, my_exp.factor);
39 EXPECT_EQ(MyExperiment::kDefaultOffset, my_exp.offset);
40 }
41
TEST(Config,ReturnOptionWhenSet)42 TEST(Config, ReturnOptionWhenSet) {
43 Config config;
44 config.Set<MyExperiment>(new MyExperiment(5, 1));
45 const MyExperiment& my_exp = config.Get<MyExperiment>();
46 EXPECT_EQ(5, my_exp.factor);
47 EXPECT_EQ(1, my_exp.offset);
48 }
49
TEST(Config,SetNullSetsTheOptionBackToDefault)50 TEST(Config, SetNullSetsTheOptionBackToDefault) {
51 Config config;
52 config.Set<MyExperiment>(new MyExperiment(5, 1));
53 config.Set<MyExperiment>(NULL);
54 const MyExperiment& my_exp = config.Get<MyExperiment>();
55 EXPECT_EQ(MyExperiment::kDefaultFactor, my_exp.factor);
56 EXPECT_EQ(MyExperiment::kDefaultOffset, my_exp.offset);
57 }
58
59 struct Algo1_CostFunction {
60 static const ConfigOptionID identifier =
61 ConfigOptionID::kAlgo1CostFunctionForTest;
Algo1_CostFunctionwebrtc::__anon198b9ec80111::Algo1_CostFunction62 Algo1_CostFunction() {}
63
costwebrtc::__anon198b9ec80111::Algo1_CostFunction64 virtual int cost(int x) const {
65 return x;
66 }
67
~Algo1_CostFunctionwebrtc::__anon198b9ec80111::Algo1_CostFunction68 virtual ~Algo1_CostFunction() {}
69 };
70
71 struct SqrCost : Algo1_CostFunction {
costwebrtc::__anon198b9ec80111::SqrCost72 virtual int cost(int x) const {
73 return x*x;
74 }
75 };
76
TEST(Config,SupportsPolymorphism)77 TEST(Config, SupportsPolymorphism) {
78 Config config;
79 config.Set<Algo1_CostFunction>(new SqrCost());
80 EXPECT_EQ(25, config.Get<Algo1_CostFunction>().cost(5));
81 }
82 } // namespace
83 } // namespace webrtc
84