blob: 217db366df9df17c80500e44939efadbc15d03bd [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/fixed-point-util.h"
#include <gtest/gtest.h>
namespace amlogic_display {
TEST(DoubleToU28p4Test, Correctness) {
EXPECT_EQ(ToU28_4(0.0), 0x0'0u);
EXPECT_EQ(ToU28_4(1.0), 0x1'0u);
EXPECT_EQ(ToU28_4(2.0), 0x2'0u);
EXPECT_EQ(ToU28_4(2.5), 0x2'8u);
EXPECT_EQ(ToU28_4(3.0), 0x3'0u);
EXPECT_EQ(ToU28_4(3.5), 0x3'8u);
EXPECT_EQ(ToU28_4(3.75), 0x3'cu);
EXPECT_EQ(ToU28_4(4.0), 0x4'0u);
EXPECT_EQ(ToU28_4(5.0), 0x5'0u);
EXPECT_EQ(ToU28_4(6.0), 0x6'0u);
EXPECT_EQ(ToU28_4(6.25), 0x6'4u);
EXPECT_EQ(ToU28_4(7.0), 0x7'0u);
EXPECT_EQ(ToU28_4(7.5), 0x7'8u);
EXPECT_EQ(ToU28_4(12.0), 0xc'0u);
EXPECT_EQ(ToU28_4(14.0), 0xe'0u);
EXPECT_EQ(ToU28_4(15.0), 0xf'0u);
// The maximum number which can be represented in U28.4 format.
EXPECT_EQ(ToU28_4(268435455.9375), 0xffff'fff'fu);
}
TEST(IntToU28p4Test, Correctness) {
EXPECT_EQ(ToU28_4(0), 0x0'0u);
EXPECT_EQ(ToU28_4(1), 0x1'0u);
EXPECT_EQ(ToU28_4(2), 0x2'0u);
EXPECT_EQ(ToU28_4(3), 0x3'0u);
EXPECT_EQ(ToU28_4(4), 0x4'0u);
EXPECT_EQ(ToU28_4(5), 0x5'0u);
EXPECT_EQ(ToU28_4(6), 0x6'0u);
EXPECT_EQ(ToU28_4(7), 0x7'0u);
EXPECT_EQ(ToU28_4(12), 0xc'0u);
EXPECT_EQ(ToU28_4(14), 0xe'0u);
EXPECT_EQ(ToU28_4(15), 0xf'0u);
// The maximum int number which can be represented in U28.4 format.
EXPECT_EQ(ToU28_4(0xFFF'FFFF), 0xFFFF'FFF0u);
}
TEST(U28p4ToDouble, ConversionIsPrecise) {
EXPECT_EQ(U28_4ToDouble(0x0'0), 0.0);
EXPECT_EQ(U28_4ToDouble(0x1'0), 1.0);
EXPECT_EQ(U28_4ToDouble(0x2'0), 2.0);
EXPECT_EQ(U28_4ToDouble(0x2'8), 2.5);
EXPECT_EQ(U28_4ToDouble(0x3'0), 3.0);
EXPECT_EQ(U28_4ToDouble(0x3'8), 3.5);
EXPECT_EQ(U28_4ToDouble(0x3'c), 3.75);
EXPECT_EQ(U28_4ToDouble(0x4'0), 4.0);
EXPECT_EQ(U28_4ToDouble(0x5'0), 5.0);
EXPECT_EQ(U28_4ToDouble(0x6'0), 6.0);
EXPECT_EQ(U28_4ToDouble(0x6'4), 6.25);
EXPECT_EQ(U28_4ToDouble(0x7'0), 7.0);
EXPECT_EQ(U28_4ToDouble(0x7'8), 7.5);
EXPECT_EQ(U28_4ToDouble(0xc'0), 12.0);
EXPECT_EQ(U28_4ToDouble(0xe'0), 14.0);
EXPECT_EQ(U28_4ToDouble(0xf'0), 15.0);
// The maximum number which can be represented in U28.4 format.
EXPECT_EQ(U28_4ToDouble(0xffff'fff'f), 268435455.9375);
}
} // namespace amlogic_display