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 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