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