blob: 841465fd8f2a7d4bb98abcbbdbd7a602161e742b [file] [log] [blame]
// Copyright 2023 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/graphics/display/drivers/amlogic-display/common.h"
#include <gtest/gtest.h>
namespace amlogic_display {
namespace {
TEST(SetFieldValue32, SetFieldToAllOne) {
EXPECT_EQ(0xa1'b2'c3'dfu, SetFieldValue32(0xa1'b2'c3'd4u, 0, 4, 0xf));
EXPECT_EQ(0xa1'b2'c3'f4u, SetFieldValue32(0xa1'b2'c3'd4u, 4, 4, 0xf));
EXPECT_EQ(0xa1'b2'cf'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 8, 4, 0xf));
EXPECT_EQ(0xa1'b2'f3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 12, 4, 0xf));
EXPECT_EQ(0xa1'bf'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 16, 4, 0xf));
EXPECT_EQ(0xa1'f2'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 20, 4, 0xf));
EXPECT_EQ(0xaf'b2'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 24, 4, 0xf));
EXPECT_EQ(0xf1'b2'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 28, 4, 0xf));
EXPECT_EQ(0xa1'b2'c3'ffu, SetFieldValue32(0xa1'b2'c3'd4u, 0, 8, 0xff));
EXPECT_EQ(0xa1'b2'ff'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 8, 8, 0xff));
EXPECT_EQ(0xa1'ff'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 16, 8, 0xff));
EXPECT_EQ(0xff'b2'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 24, 8, 0xff));
EXPECT_EQ(0xa1'b2'ff'ffu, SetFieldValue32(0xa1'b2'c3'd4u, 0, 16, 0xff'ff));
EXPECT_EQ(0xa1'ff'ff'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 8, 16, 0xff'ff));
EXPECT_EQ(0xff'ff'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 16, 16, 0xff'ff));
EXPECT_EQ(0xff'ff'ff'ffu, SetFieldValue32(0xa1'b2'c3'd4u, 0, 32, 0xff'ff'ff'ff));
}
TEST(SetFieldValue32, SetFieldToAllZero) {
EXPECT_EQ(0xa1'b2'c3'd0u, SetFieldValue32(0xa1'b2'c3'd4u, 0, 4, 0));
EXPECT_EQ(0xa1'b2'c3'04u, SetFieldValue32(0xa1'b2'c3'd4u, 4, 4, 0));
EXPECT_EQ(0xa1'b2'c0'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 8, 4, 0));
EXPECT_EQ(0xa1'b2'03'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 12, 4, 0));
EXPECT_EQ(0xa1'b0'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 16, 4, 0));
EXPECT_EQ(0xa1'02'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 20, 4, 0));
EXPECT_EQ(0xa0'b2'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 24, 4, 0));
EXPECT_EQ(0x01'b2'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 28, 4, 0));
EXPECT_EQ(0xa1'b2'c3'00u, SetFieldValue32(0xa1'b2'c3'd4u, 0, 8, 0));
EXPECT_EQ(0xa1'b2'00'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 8, 8, 0));
EXPECT_EQ(0xa1'00'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 16, 8, 0));
EXPECT_EQ(0x00'b2'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 24, 8, 0));
EXPECT_EQ(0xa1'b2'00'00u, SetFieldValue32(0xa1'b2'c3'd4u, 0, 16, 0));
EXPECT_EQ(0xa1'00'00'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 8, 16, 0));
EXPECT_EQ(0x00'00'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 16, 16, 0));
EXPECT_EQ(0x00'00'00'00u, SetFieldValue32(0xa1'b2'c3'd4u, 0, 32, 0));
}
TEST(SetFieldValue32, EndiannessMustMatch) {
EXPECT_EQ(0xa1'b2'ab'cdu, SetFieldValue32(0xa1'b2'c3'd4u, 0, 16, 0xab'cdu));
EXPECT_EQ(0xa1'ab'cd'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 8, 16, 0xab'cdu));
EXPECT_EQ(0xab'cd'c3'd4u, SetFieldValue32(0xa1'b2'c3'd4u, 16, 16, 0xab'cdu));
}
TEST(SetFieldValue32, FieldOfSize32) {
EXPECT_EQ(0x5e'6f'7a'8bu, SetFieldValue32(0xa1'b2'c3'd4u, 0, 32, 0x5e'6f'7a'8bu));
}
TEST(GetFieldValue32, FieldStartingAtBitZero) {
EXPECT_EQ(0x00'00'00'04u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 4));
EXPECT_EQ(0x00'00'00'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 8));
EXPECT_EQ(0x00'00'03'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 12));
EXPECT_EQ(0x00'00'c3'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 16));
EXPECT_EQ(0x00'02'c3'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 20));
EXPECT_EQ(0x00'b2'c3'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 24));
EXPECT_EQ(0x01'b2'c3'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 28));
EXPECT_EQ(0xa1'b2'c3'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 32));
}
TEST(GetFieldValue32, FieldStartingAtNonZeroBits) {
EXPECT_EQ(0x4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 4));
EXPECT_EQ(0xdu, GetFieldValue32(0xa1'b2'c3'd4u, 4, 4));
EXPECT_EQ(0x3u, GetFieldValue32(0xa1'b2'c3'd4u, 8, 4));
EXPECT_EQ(0xcu, GetFieldValue32(0xa1'b2'c3'd4u, 12, 4));
EXPECT_EQ(0x2u, GetFieldValue32(0xa1'b2'c3'd4u, 16, 4));
EXPECT_EQ(0xbu, GetFieldValue32(0xa1'b2'c3'd4u, 20, 4));
EXPECT_EQ(0x1u, GetFieldValue32(0xa1'b2'c3'd4u, 24, 4));
EXPECT_EQ(0xau, GetFieldValue32(0xa1'b2'c3'd4u, 28, 4));
}
TEST(GetFieldValue32, EndiannessMustMatch) {
EXPECT_EQ(0xc3'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 16));
EXPECT_EQ(0xb2'c3u, GetFieldValue32(0xa1'b2'c3'd4u, 8, 16));
EXPECT_EQ(0xa1'b2u, GetFieldValue32(0xa1'b2'c3'd4u, 16, 16));
}
TEST(GetFieldValue32, FieldOfSize32) {
EXPECT_EQ(0xa1'b2'c3'd4u, GetFieldValue32(0xa1'b2'c3'd4u, 0, 32));
}
} // namespace
} // namespace amlogic_display