180814287SRaphael Isemann //===-- RegisterValueTest.cpp ---------------------------------------------===//
2d821c997SPavel Labath //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6d821c997SPavel Labath //
7d821c997SPavel Labath //===----------------------------------------------------------------------===//
8d821c997SPavel Labath
9d821c997SPavel Labath #include "lldb/Utility/RegisterValue.h"
10d821c997SPavel Labath #include "gtest/gtest.h"
11f190ce62SKazu Hirata #include <optional>
12d821c997SPavel Labath
13d821c997SPavel Labath using namespace lldb_private;
14d2700b78SPavel Labath using llvm::APInt;
15d821c997SPavel Labath
TEST(RegisterValueTest,GetSet8)16d821c997SPavel Labath TEST(RegisterValueTest, GetSet8) {
17d821c997SPavel Labath RegisterValue R8(uint8_t(47));
18d821c997SPavel Labath EXPECT_EQ(47u, R8.GetAsUInt8());
19d821c997SPavel Labath R8 = uint8_t(42);
20d821c997SPavel Labath EXPECT_EQ(42u, R8.GetAsUInt8());
21d821c997SPavel Labath EXPECT_EQ(42u, R8.GetAsUInt16());
22d821c997SPavel Labath EXPECT_EQ(42u, R8.GetAsUInt32());
23d821c997SPavel Labath EXPECT_EQ(42u, R8.GetAsUInt64());
24d821c997SPavel Labath }
25d2700b78SPavel Labath
TEST(RegisterValueTest,GetScalarValue)26d2700b78SPavel Labath TEST(RegisterValueTest, GetScalarValue) {
27d2700b78SPavel Labath using RV = RegisterValue;
28*2fe83274SKazu Hirata const auto &Get = [](const RV &V) -> std::optional<Scalar> {
29d2700b78SPavel Labath Scalar S;
30d2700b78SPavel Labath if (V.GetScalarValue(S))
31d2700b78SPavel Labath return S;
32d2a6114fSKazu Hirata return std::nullopt;
33d2700b78SPavel Labath };
34d2700b78SPavel Labath EXPECT_EQ(Get(RV(uint8_t(47))), Scalar(47));
35d2700b78SPavel Labath EXPECT_EQ(Get(RV(uint16_t(4747))), Scalar(4747));
36d2700b78SPavel Labath EXPECT_EQ(Get(RV(uint32_t(47474242))), Scalar(47474242));
37d2700b78SPavel Labath EXPECT_EQ(Get(RV(uint64_t(4747424247474242))), Scalar(4747424247474242));
38d2700b78SPavel Labath EXPECT_EQ(Get(RV(APInt::getMaxValue(128))), Scalar(APInt::getMaxValue(128)));
39d2700b78SPavel Labath EXPECT_EQ(Get(RV(47.5f)), Scalar(47.5f));
40d2700b78SPavel Labath EXPECT_EQ(Get(RV(47.5)), Scalar(47.5));
41d2700b78SPavel Labath EXPECT_EQ(Get(RV(47.5L)), Scalar(47.5L));
42d2700b78SPavel Labath EXPECT_EQ(Get(RV({0xff, 0xee, 0xdd, 0xcc}, lldb::eByteOrderLittle)),
43d2700b78SPavel Labath Scalar(0xccddeeff));
44ac6799d2SPavel Labath EXPECT_EQ(Get(RV({0xff, 0xee, 0xdd, 0xcc}, lldb::eByteOrderBig)),
45ac6799d2SPavel Labath Scalar(0xffeeddcc));
46d2700b78SPavel Labath EXPECT_EQ(Get(RV({0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66,
47d2700b78SPavel Labath 0x55, 0x44, 0x33, 0x22, 0x11, 0x00},
48d2700b78SPavel Labath lldb::eByteOrderLittle)),
49d2700b78SPavel Labath Scalar((APInt(128, 0x0011223344556677ull) << 64) |
50d2700b78SPavel Labath APInt(128, 0x8899aabbccddeeff)));
51d2700b78SPavel Labath EXPECT_EQ(Get(RV({0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66,
52d2700b78SPavel Labath 0x55, 0x44, 0x33, 0x22, 0x11, 0x00},
53d2700b78SPavel Labath lldb::eByteOrderBig)),
54d2700b78SPavel Labath Scalar((APInt(128, 0xffeeddccbbaa9988ull) << 64) |
55d2700b78SPavel Labath APInt(128, 0x7766554433221100)));
56d2700b78SPavel Labath }
57