Home | History | Annotate | Download | only in test
      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 
     22   MyExperiment()
     23     : factor(kDefaultFactor), offset(kDefaultOffset) {}
     24 
     25   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 
     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 
     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 
     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;
     62   Algo1_CostFunction() {}
     63 
     64   virtual int cost(int x) const {
     65     return x;
     66   }
     67 
     68   virtual ~Algo1_CostFunction() {}
     69 };
     70 
     71 struct SqrCost : Algo1_CostFunction {
     72   virtual int cost(int x) const {
     73     return x*x;
     74   }
     75 };
     76 
     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