//===-- RegisterValueTest.cpp ---------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "lldb/Utility/RegisterValue.h" #include "gtest/gtest.h" using namespace lldb_private; using llvm::APInt; using llvm::ArrayRef; TEST(RegisterValueTest, GetSet8) { RegisterValue R8(uint8_t(47)); EXPECT_EQ(47u, R8.GetAsUInt8()); R8 = uint8_t(42); EXPECT_EQ(42u, R8.GetAsUInt8()); EXPECT_EQ(42u, R8.GetAsUInt16()); EXPECT_EQ(42u, R8.GetAsUInt32()); EXPECT_EQ(42u, R8.GetAsUInt64()); } TEST(RegisterValueTest, GetScalarValue) { using RV = RegisterValue; const auto &Get = [](const RV &V) -> llvm::Optional { Scalar S; if (V.GetScalarValue(S)) return S; return llvm::None; }; EXPECT_EQ(Get(RV(uint8_t(47))), Scalar(47)); EXPECT_EQ(Get(RV(uint16_t(4747))), Scalar(4747)); EXPECT_EQ(Get(RV(uint32_t(47474242))), Scalar(47474242)); EXPECT_EQ(Get(RV(uint64_t(4747424247474242))), Scalar(4747424247474242)); EXPECT_EQ(Get(RV(APInt::getMaxValue(128))), Scalar(APInt::getMaxValue(128))); EXPECT_EQ(Get(RV(47.5f)), Scalar(47.5f)); EXPECT_EQ(Get(RV(47.5)), Scalar(47.5)); EXPECT_EQ(Get(RV(47.5L)), Scalar(47.5L)); EXPECT_EQ(Get(RV({0xff, 0xee, 0xdd, 0xcc}, lldb::eByteOrderLittle)), Scalar(0xccddeeff)); EXPECT_EQ(Get(RV({0xff, 0xee, 0xdd, 0xcc}, lldb::eByteOrderBig)), Scalar(0xffeeddcc)); EXPECT_EQ(Get(RV({0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00}, lldb::eByteOrderLittle)), Scalar((APInt(128, 0x0011223344556677ull) << 64) | APInt(128, 0x8899aabbccddeeff))); EXPECT_EQ(Get(RV({0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00}, lldb::eByteOrderBig)), Scalar((APInt(128, 0xffeeddccbbaa9988ull) << 64) | APInt(128, 0x7766554433221100))); }