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
14namespace webrtc {
15namespace {
16
17struct 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
31const int MyExperiment::kDefaultFactor = 1;
32const int MyExperiment::kDefaultOffset = 2;
33
34TEST(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
41TEST(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
49TEST(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
58struct Algo1_CostFunction {
59  Algo1_CostFunction() {}
60
61  virtual int cost(int x) const {
62    return x;
63  }
64
65  virtual ~Algo1_CostFunction() {}
66};
67
68struct SqrCost : Algo1_CostFunction {
69  virtual int cost(int x) const {
70    return x*x;
71  }
72};
73
74TEST(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