| /* | |
| * Copyright (C) 2021 The Android Open Source Project | |
| * Android BPF library - public API | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| #include <gtest/gtest.h> | |
| #include "LongArrayMultiStateCounter.h" | |
| namespace android { | |
| namespace battery { | |
| class LongArrayMultiStateCounterTest : public testing::Test {}; | |
| TEST_F(LongArrayMultiStateCounterTest, stateChange) { | |
| LongArrayMultiStateCounter testCounter(2, std::vector<uint64_t>(4)); | |
| testCounter.updateValue(std::vector<uint64_t>({0, 0, 0, 0}), 1000); | |
| testCounter.setState(0, 1000); | |
| testCounter.setState(1, 2000); | |
| testCounter.updateValue(std::vector<uint64_t>({100, 200, 300, 400}), 3000); | |
| // Time was split in half between the two states, so the counts will be split 50:50 too | |
| EXPECT_EQ(std::vector<uint64_t>({50, 100, 150, 200}), testCounter.getCount(0)); | |
| EXPECT_EQ(std::vector<uint64_t>({50, 100, 150, 200}), testCounter.getCount(1)); | |
| } | |
| TEST_F(LongArrayMultiStateCounterTest, accumulation) { | |
| LongArrayMultiStateCounter testCounter(2, std::vector<uint64_t>(4)); | |
| testCounter.updateValue(std::vector<uint64_t>({0, 0, 0, 0}), 1000); | |
| testCounter.setState(0, 1000); | |
| testCounter.setState(1, 2000); | |
| testCounter.updateValue(std::vector<uint64_t>({100, 200, 300, 400}), 3000); | |
| testCounter.setState(0, 4000); | |
| testCounter.updateValue(std::vector<uint64_t>({200, 300, 400, 500}), 8000); | |
| // The first delta is split 50:50: | |
| // 0: {50, 100, 150, 200} | |
| // 1: {50, 100, 150, 200} | |
| // The second delta is split 4:1 | |
| // 0: {80, 80, 80, 80} | |
| // 1: {20, 20, 20, 20} | |
| EXPECT_EQ(std::vector<uint64_t>({130, 180, 230, 280}), testCounter.getCount(0)); | |
| EXPECT_EQ(std::vector<uint64_t>({70, 120, 170, 220}), testCounter.getCount(1)); | |
| } | |
| TEST_F(LongArrayMultiStateCounterTest, toString) { | |
| LongArrayMultiStateCounter testCounter(2, std::vector<uint64_t>(4)); | |
| testCounter.updateValue(std::vector<uint64_t>({0, 0, 0, 0}), 1000); | |
| testCounter.setState(0, 1000); | |
| testCounter.setState(1, 2000); | |
| testCounter.updateValue(std::vector<uint64_t>({100, 200, 300, 400}), 3000); | |
| EXPECT_STREQ("[0: {50, 100, 150, 200}, 1: {50, 100, 150, 200}] updated: 3000 currentState: 1", | |
| testCounter.toString().c_str()); | |
| } | |
| } // namespace battery | |
| } // namespace android |