blob: de9060ab23f7d3c2e98cbd2e1c11b9b27162aeda [file]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/performance_manager/public/priority/priority.h"
#include "components/performance_manager/test_support/voting.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace performance_manager {
namespace priority {
namespace {
static const char kReason1[] = "reason1";
static const char kReason2[] = "reason2";
static const char kReason3[] = "reason1"; // Equal to kReason1 on purpose!
} // namespace
TEST(PriorityTest, ReasonCompare) {
// Comparison with nullptr.
EXPECT_GT(0, ReasonCompare(nullptr, kReason1));
EXPECT_EQ(0, ReasonCompare(nullptr, nullptr));
EXPECT_LT(0, ReasonCompare(kReason1, nullptr));
// Comparisons where the addresses and string content are different.
EXPECT_GT(0, ReasonCompare(kReason1, kReason2));
EXPECT_LT(0, ReasonCompare(kReason2, kReason1));
// Comparison with identical addresses.
EXPECT_EQ(0, ReasonCompare(kReason1, kReason1));
// Comparison where the addresses are different, but string content is the
// same.
EXPECT_EQ(0, ReasonCompare(kReason1, kReason3));
}
TEST(PriorityTest, PriorityAndReason) {
// Default constructor
PriorityAndReason par1;
EXPECT_EQ(base::Process::Priority::kMinValue, par1.priority());
EXPECT_EQ(nullptr, par1.reason());
// Explicit initialization.
PriorityAndReason par2(base::Process::Priority::kMaxValue, kReason1);
EXPECT_EQ(base::Process::Priority::kMaxValue, par2.priority());
EXPECT_EQ(kReason1, par2.reason());
// Identical comparison.
EXPECT_TRUE(par1 == par1);
EXPECT_FALSE(par1 != par1);
EXPECT_TRUE(par1 <= par1);
EXPECT_TRUE(par1 >= par1);
EXPECT_FALSE(par1 < par1);
EXPECT_FALSE(par1 > par1);
// Comparison with distinct priorities.
EXPECT_FALSE(par1 == par2);
EXPECT_TRUE(par1 != par2);
EXPECT_TRUE(par1 <= par2);
EXPECT_FALSE(par1 >= par2);
EXPECT_TRUE(par1 < par2);
EXPECT_FALSE(par1 > par2);
// Comparison with identical priorities and reasons strings, but at different
// locations.
PriorityAndReason par3(base::Process::Priority::kMaxValue, kReason3);
EXPECT_EQ(base::Process::Priority::kMaxValue, par3.priority());
EXPECT_EQ(kReason3, par3.reason());
EXPECT_TRUE(par2 == par3);
EXPECT_FALSE(par2 != par3);
EXPECT_TRUE(par2 <= par3);
EXPECT_TRUE(par2 >= par3);
EXPECT_FALSE(par2 < par3);
EXPECT_FALSE(par2 > par3);
// Comparison with identical priorities, and different reason strings.
PriorityAndReason par4(base::Process::Priority::kMinValue, kReason2);
EXPECT_FALSE(par1 == par4);
EXPECT_TRUE(par1 != par4);
EXPECT_TRUE(par1 <= par4);
EXPECT_FALSE(par1 >= par4);
EXPECT_TRUE(par1 < par4);
EXPECT_FALSE(par1 > par4);
// Copy constructor.
PriorityAndReason par5(par3);
EXPECT_EQ(base::Process::Priority::kMaxValue, par5.priority());
EXPECT_EQ(kReason3, par5.reason());
// Assignment.
par1 = par3;
EXPECT_EQ(base::Process::Priority::kMaxValue, par1.priority());
EXPECT_EQ(kReason3, par1.reason());
}
} // namespace priority
} // namespace performance_manager