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 int kDefaultFactor; 19 static const int kDefaultOffset; 20 21 MyExperiment() 22 : factor(kDefaultFactor), offset(kDefaultOffset) {} 23 24 MyExperiment(int factor, int offset) 25 : factor(factor), offset(offset) {} 26 27 int factor; 28 int offset; 29 }; 30 31 const int MyExperiment::kDefaultFactor = 1; 32 const int MyExperiment::kDefaultOffset = 2; 33 34 TEST(Config, ReturnsDefaultInstanceIfNotConfigured) { 35 Config config; 36 const MyExperiment& my_exp = config.Get<MyExperiment>(); 37 EXPECT_EQ(MyExperiment::kDefaultFactor, my_exp.factor); 38 EXPECT_EQ(MyExperiment::kDefaultOffset, my_exp.offset); 39 } 40 41 TEST(Config, ReturnOptionWhenSet) { 42 Config config; 43 config.Set<MyExperiment>(new MyExperiment(5, 1)); 44 const MyExperiment& my_exp = config.Get<MyExperiment>(); 45 EXPECT_EQ(5, my_exp.factor); 46 EXPECT_EQ(1, my_exp.offset); 47 } 48 49 TEST(Config, SetNullSetsTheOptionBackToDefault) { 50 Config config; 51 config.Set<MyExperiment>(new MyExperiment(5, 1)); 52 config.Set<MyExperiment>(NULL); 53 const MyExperiment& my_exp = config.Get<MyExperiment>(); 54 EXPECT_EQ(MyExperiment::kDefaultFactor, my_exp.factor); 55 EXPECT_EQ(MyExperiment::kDefaultOffset, my_exp.offset); 56 } 57 58 struct Algo1_CostFunction { 59 Algo1_CostFunction() {} 60 61 virtual int cost(int x) const { 62 return x; 63 } 64 65 virtual ~Algo1_CostFunction() {} 66 }; 67 68 struct SqrCost : Algo1_CostFunction { 69 virtual int cost(int x) const { 70 return x*x; 71 } 72 }; 73 74 TEST(Config, SupportsPolymorphism) { 75 Config config; 76 config.Set<Algo1_CostFunction>(new SqrCost()); 77 EXPECT_EQ(25, config.Get<Algo1_CostFunction>().cost(5)); 78 } 79 } // namespace 80 } // namespace webrtc 81