Home | History | Annotate | Download | only in condition
      1 // Copyright (C) 2017 The Android Open Source Project
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //      http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 #include "condition/condition_util.h"
     16 #include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
     17 
     18 #include <gtest/gtest.h>
     19 
     20 #include <stdio.h>
     21 #include <vector>
     22 
     23 using namespace android::os::statsd;
     24 using std::vector;
     25 
     26 #ifdef __ANDROID__
     27 TEST(ConditionTrackerTest, TestUnknownCondition) {
     28     LogicalOperation operation = LogicalOperation::AND;
     29 
     30     vector<int> children;
     31     children.push_back(0);
     32     children.push_back(1);
     33     children.push_back(2);
     34 
     35     vector<ConditionState> conditionResults;
     36     conditionResults.push_back(ConditionState::kUnknown);
     37     conditionResults.push_back(ConditionState::kFalse);
     38     conditionResults.push_back(ConditionState::kTrue);
     39 
     40     EXPECT_EQ(evaluateCombinationCondition(children, operation, conditionResults),
     41               ConditionState::kUnknown);
     42 }
     43 
     44 TEST(ConditionTrackerTest, TestAndCondition) {
     45     // Set up the matcher
     46     LogicalOperation operation = LogicalOperation::AND;
     47 
     48     vector<int> children;
     49     children.push_back(0);
     50     children.push_back(1);
     51     children.push_back(2);
     52 
     53     vector<ConditionState> conditionResults;
     54     conditionResults.push_back(ConditionState::kTrue);
     55     conditionResults.push_back(ConditionState::kFalse);
     56     conditionResults.push_back(ConditionState::kTrue);
     57 
     58     EXPECT_FALSE(evaluateCombinationCondition(children, operation, conditionResults));
     59 
     60     conditionResults.clear();
     61     conditionResults.push_back(ConditionState::kTrue);
     62     conditionResults.push_back(ConditionState::kTrue);
     63     conditionResults.push_back(ConditionState::kTrue);
     64 
     65     EXPECT_TRUE(evaluateCombinationCondition(children, operation, conditionResults));
     66 }
     67 
     68 TEST(ConditionTrackerTest, TestOrCondition) {
     69     // Set up the matcher
     70     LogicalOperation operation = LogicalOperation::OR;
     71 
     72     vector<int> children;
     73     children.push_back(0);
     74     children.push_back(1);
     75     children.push_back(2);
     76 
     77     vector<ConditionState> conditionResults;
     78     conditionResults.push_back(ConditionState::kTrue);
     79     conditionResults.push_back(ConditionState::kFalse);
     80     conditionResults.push_back(ConditionState::kTrue);
     81 
     82     EXPECT_TRUE(evaluateCombinationCondition(children, operation, conditionResults));
     83 
     84     conditionResults.clear();
     85     conditionResults.push_back(ConditionState::kFalse);
     86     conditionResults.push_back(ConditionState::kFalse);
     87     conditionResults.push_back(ConditionState::kFalse);
     88 
     89     EXPECT_FALSE(evaluateCombinationCondition(children, operation, conditionResults));
     90 }
     91 
     92 TEST(ConditionTrackerTest, TestNotCondition) {
     93     // Set up the matcher
     94     LogicalOperation operation = LogicalOperation::NOT;
     95 
     96     vector<int> children;
     97     children.push_back(0);
     98 
     99     vector<ConditionState> conditionResults;
    100     conditionResults.push_back(ConditionState::kTrue);
    101 
    102     EXPECT_FALSE(evaluateCombinationCondition(children, operation, conditionResults));
    103 
    104     conditionResults.clear();
    105     conditionResults.push_back(ConditionState::kFalse);
    106     EXPECT_TRUE(evaluateCombinationCondition(children, operation, conditionResults));
    107 
    108     children.clear();
    109     conditionResults.clear();
    110     EXPECT_EQ(evaluateCombinationCondition(children, operation, conditionResults),
    111               ConditionState::kUnknown);
    112 }
    113 
    114 TEST(ConditionTrackerTest, TestNandCondition) {
    115     // Set up the matcher
    116     LogicalOperation operation = LogicalOperation::NAND;
    117 
    118     vector<int> children;
    119     children.push_back(0);
    120     children.push_back(1);
    121 
    122     vector<ConditionState> conditionResults;
    123     conditionResults.push_back(ConditionState::kTrue);
    124     conditionResults.push_back(ConditionState::kFalse);
    125 
    126     EXPECT_TRUE(evaluateCombinationCondition(children, operation, conditionResults));
    127 
    128     conditionResults.clear();
    129     conditionResults.push_back(ConditionState::kFalse);
    130     conditionResults.push_back(ConditionState::kFalse);
    131     EXPECT_TRUE(evaluateCombinationCondition(children, operation, conditionResults));
    132 
    133     conditionResults.clear();
    134     conditionResults.push_back(ConditionState::kTrue);
    135     conditionResults.push_back(ConditionState::kTrue);
    136     EXPECT_FALSE(evaluateCombinationCondition(children, operation, conditionResults));
    137 }
    138 
    139 TEST(ConditionTrackerTest, TestNorCondition) {
    140     // Set up the matcher
    141     LogicalOperation operation = LogicalOperation::NOR;
    142 
    143     vector<int> children;
    144     children.push_back(0);
    145     children.push_back(1);
    146 
    147     vector<ConditionState> conditionResults;
    148     conditionResults.push_back(ConditionState::kTrue);
    149     conditionResults.push_back(ConditionState::kFalse);
    150 
    151     EXPECT_FALSE(evaluateCombinationCondition(children, operation, conditionResults));
    152 
    153     conditionResults.clear();
    154     conditionResults.push_back(ConditionState::kFalse);
    155     conditionResults.push_back(ConditionState::kFalse);
    156     EXPECT_TRUE(evaluateCombinationCondition(children, operation, conditionResults));
    157 
    158     conditionResults.clear();
    159     conditionResults.push_back(ConditionState::kTrue);
    160     conditionResults.push_back(ConditionState::kTrue);
    161     EXPECT_FALSE(evaluateCombinationCondition(children, operation, conditionResults));
    162 }
    163 
    164 #else
    165 GTEST_LOG_(INFO) << "This test does nothing.\n";
    166 #endif
    167