xref: /llvm-project/lldb/test/API/python_api/sbdata/TestSBData.py (revision 9c2468821ec51defd09c246fea4a47886fff8c01)
199451b44SJordan Rupprecht"""Test the SBData APIs."""
299451b44SJordan Rupprecht
399451b44SJordan Rupprecht
499451b44SJordan Rupprechtfrom math import fabs
599451b44SJordan Rupprechtimport lldb
699451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
799451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
899451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprechtclass SBDataAPICase(TestBase):
1299451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1399451b44SJordan Rupprecht
1499451b44SJordan Rupprecht    def setUp(self):
1599451b44SJordan Rupprecht        # Call super's setUp().
1699451b44SJordan Rupprecht        TestBase.setUp(self)
1799451b44SJordan Rupprecht        # Find the line number to break on inside main.cpp.
182238dcc3SJonas Devlieghere        self.line = line_number("main.cpp", "// set breakpoint here")
1999451b44SJordan Rupprecht
2099451b44SJordan Rupprecht    def test_byte_order_and_address_byte_size(self):
2199451b44SJordan Rupprecht        """Test the SBData::SetData() to ensure the byte order and address
2299451b44SJordan Rupprecht        byte size are obeyed"""
232238dcc3SJonas Devlieghere        addr_data = b"\x11\x22\x33\x44\x55\x66\x77\x88"
2499451b44SJordan Rupprecht        error = lldb.SBError()
2599451b44SJordan Rupprecht        data = lldb.SBData()
2699451b44SJordan Rupprecht        data.SetData(error, addr_data, lldb.eByteOrderBig, 4)
2799451b44SJordan Rupprecht        addr = data.GetAddress(error, 0)
282238dcc3SJonas Devlieghere        self.assertEqual(addr, 0x11223344)
2999451b44SJordan Rupprecht        data.SetData(error, addr_data, lldb.eByteOrderBig, 8)
3099451b44SJordan Rupprecht        addr = data.GetAddress(error, 0)
312238dcc3SJonas Devlieghere        self.assertEqual(addr, 0x1122334455667788)
3299451b44SJordan Rupprecht        data.SetData(error, addr_data, lldb.eByteOrderLittle, 4)
3399451b44SJordan Rupprecht        addr = data.GetAddress(error, 0)
342238dcc3SJonas Devlieghere        self.assertEqual(addr, 0x44332211)
3599451b44SJordan Rupprecht        data.SetData(error, addr_data, lldb.eByteOrderLittle, 8)
3699451b44SJordan Rupprecht        addr = data.GetAddress(error, 0)
372238dcc3SJonas Devlieghere        self.assertEqual(addr, 0x8877665544332211)
3899451b44SJordan Rupprecht
3972e25978SMed Ismail Bennani    def test_byte_order_and_address_byte_size_with_ownership(self):
4072e25978SMed Ismail Bennani        """Test the SBData::SetDataWithOwnership() to ensure the byte order
4172e25978SMed Ismail Bennani        and address byte size are obeyed even when source date is released"""
422238dcc3SJonas Devlieghere        addr_data = b"\x11\x22\x33\x44\x55\x66\x77\x88"
4372e25978SMed Ismail Bennani        error = lldb.SBError()
4472e25978SMed Ismail Bennani        data = lldb.SBData()
4572e25978SMed Ismail Bennani        data.SetDataWithOwnership(error, addr_data, lldb.eByteOrderBig, 8)
4672e25978SMed Ismail Bennani        del addr_data
4772e25978SMed Ismail Bennani        addr = data.GetAddress(error, 0)
482238dcc3SJonas Devlieghere        self.assertEqual(addr, 0x1122334455667788)
4972e25978SMed Ismail Bennani
5099451b44SJordan Rupprecht    def test_with_run_command(self):
5199451b44SJordan Rupprecht        """Test the SBData APIs."""
5299451b44SJordan Rupprecht        self.build()
5399451b44SJordan Rupprecht        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
5499451b44SJordan Rupprecht
5599451b44SJordan Rupprecht        lldbutil.run_break_set_by_file_and_line(
562238dcc3SJonas Devlieghere            self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True
572238dcc3SJonas Devlieghere        )
5899451b44SJordan Rupprecht
5999451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
6099451b44SJordan Rupprecht
6199451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
622238dcc3SJonas Devlieghere        self.expect(
632238dcc3SJonas Devlieghere            "thread list",
642238dcc3SJonas Devlieghere            STOPPED_DUE_TO_BREAKPOINT,
652238dcc3SJonas Devlieghere            substrs=["stopped", "stop reason = breakpoint"],
662238dcc3SJonas Devlieghere        )
6799451b44SJordan Rupprecht
6899451b44SJordan Rupprecht        target = self.dbg.GetSelectedTarget()
6999451b44SJordan Rupprecht
7099451b44SJordan Rupprecht        process = target.GetProcess()
7199451b44SJordan Rupprecht
722238dcc3SJonas Devlieghere        thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint)
7399451b44SJordan Rupprecht        self.assertIsNotNone(thread)
7499451b44SJordan Rupprecht
7599451b44SJordan Rupprecht        frame = thread.GetSelectedFrame()
762238dcc3SJonas Devlieghere        foobar = frame.FindVariable("foobar")
7799451b44SJordan Rupprecht        self.assertTrue(foobar.IsValid())
7899451b44SJordan Rupprecht        data = foobar.GetPointeeData(0, 2)
7999451b44SJordan Rupprecht        offset = 0
8099451b44SJordan Rupprecht        error = lldb.SBError()
8199451b44SJordan Rupprecht
8299451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 1)
8399451b44SJordan Rupprecht        offset += 4
8499451b44SJordan Rupprecht        low = data.GetSignedInt16(error, offset)
85779bbbf2SDave Lee        self.assertSuccess(error)
8699451b44SJordan Rupprecht        offset += 2
8799451b44SJordan Rupprecht        high = data.GetSignedInt16(error, offset)
88779bbbf2SDave Lee        self.assertSuccess(error)
8999451b44SJordan Rupprecht        offset += 2
9099451b44SJordan Rupprecht        self.assertTrue(
912238dcc3SJonas Devlieghere            (low == 9 and high == 0) or (low == 0 and high == 9), "foo[0].b == 9"
922238dcc3SJonas Devlieghere        )
93*9c246882SJordan Rupprecht        self.assertLess(
94*9c246882SJordan Rupprecht            fabs(data.GetFloat(error, offset) - 3.14), 1, "foo[0].c == 3.14"
952238dcc3SJonas Devlieghere        )
96779bbbf2SDave Lee        self.assertSuccess(error)
9799451b44SJordan Rupprecht        offset += 4
9899451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 8)
9999451b44SJordan Rupprecht        offset += 4
10099451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 5)
10199451b44SJordan Rupprecht        offset += 4
10299451b44SJordan Rupprecht
10399451b44SJordan Rupprecht        self.runCmd("n")
10499451b44SJordan Rupprecht
10599451b44SJordan Rupprecht        offset = 16
10699451b44SJordan Rupprecht
10799451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 5)
10899451b44SJordan Rupprecht
10999451b44SJordan Rupprecht        data = foobar.GetPointeeData(1, 1)
11099451b44SJordan Rupprecht
11199451b44SJordan Rupprecht        offset = 0
11299451b44SJordan Rupprecht
11399451b44SJordan Rupprecht        self.assert_data(data.GetSignedInt32, offset, 8)
11499451b44SJordan Rupprecht        offset += 4
11599451b44SJordan Rupprecht        self.assert_data(data.GetSignedInt32, offset, 7)
11699451b44SJordan Rupprecht        offset += 8
1171fb5c7a2SDave Lee        self.assertEqual(
1182238dcc3SJonas Devlieghere            data.GetUnsignedInt32(error, offset), 0, "do not read beyond end"
1192238dcc3SJonas Devlieghere        )
12099451b44SJordan Rupprecht        self.assertTrue(not error.Success())
12199451b44SJordan Rupprecht        error.Clear()  # clear the error for the next test
12299451b44SJordan Rupprecht
12399451b44SJordan Rupprecht        star_foobar = foobar.Dereference()
12499451b44SJordan Rupprecht        self.assertTrue(star_foobar.IsValid())
12599451b44SJordan Rupprecht
12699451b44SJordan Rupprecht        data = star_foobar.GetData()
12799451b44SJordan Rupprecht
12899451b44SJordan Rupprecht        offset = 0
12999451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 1)
13099451b44SJordan Rupprecht        offset += 4
13199451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 9)
13299451b44SJordan Rupprecht
13399451b44SJordan Rupprecht        foobar_addr = star_foobar.GetLoadAddress()
13499451b44SJordan Rupprecht        foobar_addr += 12
13599451b44SJordan Rupprecht
13699451b44SJordan Rupprecht        # http://llvm.org/bugs/show_bug.cgi?id=11579
13799451b44SJordan Rupprecht        # lldb::SBValue::CreateValueFromAddress does not verify SBType::GetPointerType succeeds
13899451b44SJordan Rupprecht        # This should not crash LLDB.
13999451b44SJordan Rupprecht        nothing = foobar.CreateValueFromAddress(
1402238dcc3SJonas Devlieghere            "nothing",
1412238dcc3SJonas Devlieghere            foobar_addr,
1422238dcc3SJonas Devlieghere            star_foobar.GetType().GetBasicType(lldb.eBasicTypeInvalid),
1432238dcc3SJonas Devlieghere        )
14499451b44SJordan Rupprecht
14599451b44SJordan Rupprecht        new_foobar = foobar.CreateValueFromAddress(
1462238dcc3SJonas Devlieghere            "f00", foobar_addr, star_foobar.GetType()
1472238dcc3SJonas Devlieghere        )
14899451b44SJordan Rupprecht        self.assertTrue(new_foobar.IsValid())
14999451b44SJordan Rupprecht        data = new_foobar.GetData()
15099451b44SJordan Rupprecht
1512238dcc3SJonas Devlieghere        self.assertEqual(data.uint32[0], 8, "then foo[1].a == 8")
1522238dcc3SJonas Devlieghere        self.assertEqual(data.uint32[1], 7, "then foo[1].b == 7")
15399451b44SJordan Rupprecht        # exploiting that sizeof(uint32) == sizeof(float)
154*9c246882SJordan Rupprecht        self.assertLess(fabs(data.float[2] - 3.14), 1, "foo[1].c == 3.14")
15599451b44SJordan Rupprecht
15699451b44SJordan Rupprecht        self.runCmd("n")
15799451b44SJordan Rupprecht
15899451b44SJordan Rupprecht        offset = 0
15999451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 8)
16099451b44SJordan Rupprecht        offset += 4
16199451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 7)
16299451b44SJordan Rupprecht        offset += 4
163*9c246882SJordan Rupprecht        self.assertLess(
164*9c246882SJordan Rupprecht            fabs(data.GetFloat(error, offset) - 3.14), 1, "foo[1].c == 3.14"
1652238dcc3SJonas Devlieghere        )
166779bbbf2SDave Lee        self.assertSuccess(error)
16799451b44SJordan Rupprecht
16899451b44SJordan Rupprecht        data = new_foobar.GetData()
16999451b44SJordan Rupprecht
17099451b44SJordan Rupprecht        offset = 0
17199451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 8)
17299451b44SJordan Rupprecht        offset += 4
17399451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 7)
17499451b44SJordan Rupprecht        offset += 4
175*9c246882SJordan Rupprecht        self.assertLess(
176*9c246882SJordan Rupprecht            fabs(data.GetFloat(error, offset) - 6.28), 1, "foo[1].c == 6.28"
1772238dcc3SJonas Devlieghere        )
178779bbbf2SDave Lee        self.assertSuccess(error)
17999451b44SJordan Rupprecht
18099451b44SJordan Rupprecht        self.runCmd("n")
18199451b44SJordan Rupprecht
1822238dcc3SJonas Devlieghere        barfoo = frame.FindVariable("barfoo")
18399451b44SJordan Rupprecht
18499451b44SJordan Rupprecht        data = barfoo.GetData()
18599451b44SJordan Rupprecht        offset = 0
18699451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 1)
18799451b44SJordan Rupprecht        offset += 4
18899451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 2)
18999451b44SJordan Rupprecht        offset += 4
190*9c246882SJordan Rupprecht        self.assertLess(fabs(data.GetFloat(error, offset) - 3), 1, "barfoo[0].c == 3")
191779bbbf2SDave Lee        self.assertSuccess(error)
19299451b44SJordan Rupprecht        offset += 4
19399451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 4)
19499451b44SJordan Rupprecht        offset += 4
19599451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 5)
19699451b44SJordan Rupprecht        offset += 4
197*9c246882SJordan Rupprecht        self.assertLess(fabs(data.GetFloat(error, offset) - 6), 1, "barfoo[1].c == 6")
198779bbbf2SDave Lee        self.assertSuccess(error)
19999451b44SJordan Rupprecht
20099451b44SJordan Rupprecht        new_object = barfoo.CreateValueFromData(
2012238dcc3SJonas Devlieghere            "new_object", data, barfoo.GetType().GetBasicType(lldb.eBasicTypeInt)
2022238dcc3SJonas Devlieghere        )
2032238dcc3SJonas Devlieghere        self.assertEqual(new_object.GetValue(), "1", "new_object == 1")
20499451b44SJordan Rupprecht
20599451b44SJordan Rupprecht        if data.GetByteOrder() == lldb.eByteOrderBig:
20699451b44SJordan Rupprecht            data.SetData(
2072238dcc3SJonas Devlieghere                error, "\0\0\0A", data.GetByteOrder(), data.GetAddressByteSize()
2082238dcc3SJonas Devlieghere            )
20999451b44SJordan Rupprecht        else:
21099451b44SJordan Rupprecht            data.SetData(
2112238dcc3SJonas Devlieghere                error, "A\0\0\0", data.GetByteOrder(), data.GetAddressByteSize()
2122238dcc3SJonas Devlieghere            )
213779bbbf2SDave Lee        self.assertSuccess(error)
21499451b44SJordan Rupprecht
21599451b44SJordan Rupprecht        data2 = lldb.SBData()
2162238dcc3SJonas Devlieghere        data2.SetData(error, "BCD", data.GetByteOrder(), data.GetAddressByteSize())
217779bbbf2SDave Lee        self.assertSuccess(error)
21899451b44SJordan Rupprecht
21999451b44SJordan Rupprecht        data.Append(data2)
22099451b44SJordan Rupprecht
22199451b44SJordan Rupprecht        # this breaks on EBCDIC
22299451b44SJordan Rupprecht        offset = 0
22399451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt32, offset, 65)
22499451b44SJordan Rupprecht        offset += 4
22599451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt8, offset, 66)
22699451b44SJordan Rupprecht        offset += 1
22799451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt8, offset, 67)
22899451b44SJordan Rupprecht        offset += 1
22999451b44SJordan Rupprecht        self.assert_data(data.GetUnsignedInt8, offset, 68)
23099451b44SJordan Rupprecht        offset += 1
23199451b44SJordan Rupprecht
23299451b44SJordan Rupprecht        # check the new API calls introduced per LLVM llvm.org/prenhancement request
23399451b44SJordan Rupprecht        # 11619 (Allow creating SBData values from arrays or primitives in
23499451b44SJordan Rupprecht        # Python)
23599451b44SJordan Rupprecht
23699451b44SJordan Rupprecht        hello_str = "hello!"
23799451b44SJordan Rupprecht        data2 = lldb.SBData.CreateDataFromCString(
2382238dcc3SJonas Devlieghere            process.GetByteOrder(), process.GetAddressByteSize(), hello_str
2392238dcc3SJonas Devlieghere        )
240619e2e09SDave Lee        self.assertEqual(len(data2.uint8), len(hello_str))
2412238dcc3SJonas Devlieghere        self.assertEqual(data2.uint8[0], 104, "h == 104")
2422238dcc3SJonas Devlieghere        self.assertEqual(data2.uint8[1], 101, "e == 101")
2432238dcc3SJonas Devlieghere        self.assertEqual(data2.uint8[2], 108, "l == 108")
24499451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt8, 3, 108)  # l
2452238dcc3SJonas Devlieghere        self.assertEqual(data2.uint8[4], 111, "o == 111")
24699451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt8, 5, 33)  # !
24799451b44SJordan Rupprecht
24899451b44SJordan Rupprecht        uint_lists = [[1, 2, 3, 4, 5], [int(i) for i in [1, 2, 3, 4, 5]]]
24999451b44SJordan Rupprecht        int_lists = [[2, -2], [int(i) for i in [2, -2]]]
25099451b44SJordan Rupprecht
25199451b44SJordan Rupprecht        for l in uint_lists:
25299451b44SJordan Rupprecht            data2 = lldb.SBData.CreateDataFromUInt64Array(
2532238dcc3SJonas Devlieghere                process.GetByteOrder(), process.GetAddressByteSize(), l
2542238dcc3SJonas Devlieghere            )
25599451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt64, 0, 1)
25699451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt64, 8, 2)
25799451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt64, 16, 3)
25899451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt64, 24, 4)
25999451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt64, 32, 5)
26099451b44SJordan Rupprecht
2611fb5c7a2SDave Lee            self.assertEqual(
2622238dcc3SJonas Devlieghere                data2.uint64s,
2632238dcc3SJonas Devlieghere                [1, 2, 3, 4, 5],
2642238dcc3SJonas Devlieghere                "read_data_helper failure: data2 == [1,2,3,4,5]",
2652238dcc3SJonas Devlieghere            )
26699451b44SJordan Rupprecht
26799451b44SJordan Rupprecht        for l in int_lists:
26899451b44SJordan Rupprecht            data2 = lldb.SBData.CreateDataFromSInt32Array(
2692238dcc3SJonas Devlieghere                process.GetByteOrder(), process.GetAddressByteSize(), l
2702238dcc3SJonas Devlieghere            )
2712238dcc3SJonas Devlieghere            self.assertEqual(data2.sint32[0:2], [2, -2], "signed32 data2 = [2,-2]")
27299451b44SJordan Rupprecht
27399451b44SJordan Rupprecht        data2.Append(
27499451b44SJordan Rupprecht            lldb.SBData.CreateDataFromSInt64Array(
2752238dcc3SJonas Devlieghere                process.GetByteOrder(), process.GetAddressByteSize(), int_lists[0]
2762238dcc3SJonas Devlieghere            )
2772238dcc3SJonas Devlieghere        )
27899451b44SJordan Rupprecht        self.assert_data(data2.GetSignedInt32, 0, 2)
27999451b44SJordan Rupprecht        self.assert_data(data2.GetSignedInt32, 4, -2)
2802238dcc3SJonas Devlieghere        self.assertEqual(data2.sint64[1:3], [2, -2], "signed64 data2 = [2,-2]")
28199451b44SJordan Rupprecht
28299451b44SJordan Rupprecht        for l in int_lists:
28399451b44SJordan Rupprecht            data2 = lldb.SBData.CreateDataFromSInt64Array(
2842238dcc3SJonas Devlieghere                process.GetByteOrder(), process.GetAddressByteSize(), l
2852238dcc3SJonas Devlieghere            )
28699451b44SJordan Rupprecht            self.assert_data(data2.GetSignedInt64, 0, 2)
28799451b44SJordan Rupprecht            self.assert_data(data2.GetSignedInt64, 8, -2)
2882238dcc3SJonas Devlieghere            self.assertEqual(data2.sint64[0:2], [2, -2], "signed64 data2 = [2,-2]")
28999451b44SJordan Rupprecht
29099451b44SJordan Rupprecht        for l in uint_lists:
29199451b44SJordan Rupprecht            data2 = lldb.SBData.CreateDataFromUInt32Array(
2922238dcc3SJonas Devlieghere                process.GetByteOrder(), process.GetAddressByteSize(), l
2932238dcc3SJonas Devlieghere            )
29499451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt32, 0, 1)
29599451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt32, 4, 2)
29699451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt32, 8, 3)
29799451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt32, 12, 4)
29899451b44SJordan Rupprecht            self.assert_data(data2.GetUnsignedInt32, 16, 5)
29999451b44SJordan Rupprecht
30099451b44SJordan Rupprecht        bool_list = [True, True, False, False, True, False]
30199451b44SJordan Rupprecht
30299451b44SJordan Rupprecht        data2 = lldb.SBData.CreateDataFromSInt32Array(
3032238dcc3SJonas Devlieghere            process.GetByteOrder(), process.GetAddressByteSize(), bool_list
3042238dcc3SJonas Devlieghere        )
3051fb5c7a2SDave Lee        self.assertEqual(
3062238dcc3SJonas Devlieghere            data2.sint32[0:6], [1, 1, 0, 0, 1, 0], "signed32 data2 = [1, 1, 0, 0, 1, 0]"
3072238dcc3SJonas Devlieghere        )
30899451b44SJordan Rupprecht
30999451b44SJordan Rupprecht        data2 = lldb.SBData.CreateDataFromUInt32Array(
3102238dcc3SJonas Devlieghere            process.GetByteOrder(), process.GetAddressByteSize(), bool_list
3112238dcc3SJonas Devlieghere        )
3121fb5c7a2SDave Lee        self.assertEqual(
3132238dcc3SJonas Devlieghere            data2.uint32[0:6],
3142238dcc3SJonas Devlieghere            [1, 1, 0, 0, 1, 0],
3152238dcc3SJonas Devlieghere            "unsigned32 data2 = [1, 1, 0, 0, 1, 0]",
3162238dcc3SJonas Devlieghere        )
31799451b44SJordan Rupprecht
31899451b44SJordan Rupprecht        data2 = lldb.SBData.CreateDataFromSInt64Array(
3192238dcc3SJonas Devlieghere            process.GetByteOrder(), process.GetAddressByteSize(), bool_list
3202238dcc3SJonas Devlieghere        )
3211fb5c7a2SDave Lee        self.assertEqual(
3222238dcc3SJonas Devlieghere            data2.sint64[0:6], [1, 1, 0, 0, 1, 0], "signed64 data2 = [1, 1, 0, 0, 1, 0]"
3232238dcc3SJonas Devlieghere        )
32499451b44SJordan Rupprecht
32599451b44SJordan Rupprecht        data2 = lldb.SBData.CreateDataFromUInt64Array(
3262238dcc3SJonas Devlieghere            process.GetByteOrder(), process.GetAddressByteSize(), bool_list
3272238dcc3SJonas Devlieghere        )
3281fb5c7a2SDave Lee        self.assertEqual(
3292238dcc3SJonas Devlieghere            data2.uint64[0:6], [1, 1, 0, 0, 1, 0], "signed64 data2 = [1, 1, 0, 0, 1, 0]"
3302238dcc3SJonas Devlieghere        )
33199451b44SJordan Rupprecht
33299451b44SJordan Rupprecht        data2 = lldb.SBData.CreateDataFromDoubleArray(
3332238dcc3SJonas Devlieghere            process.GetByteOrder(), process.GetAddressByteSize(), [3.14, 6.28, 2.71]
3342238dcc3SJonas Devlieghere        )
335*9c246882SJordan Rupprecht        self.assertLess(
336*9c246882SJordan Rupprecht            fabs(data2.GetDouble(error, 0) - 3.14), 0.5, "double data2[0] = 3.14"
3372238dcc3SJonas Devlieghere        )
338779bbbf2SDave Lee        self.assertSuccess(error)
339*9c246882SJordan Rupprecht        self.assertLess(
340*9c246882SJordan Rupprecht            fabs(data2.GetDouble(error, 8) - 6.28), 0.5, "double data2[1] = 6.28"
3412238dcc3SJonas Devlieghere        )
342779bbbf2SDave Lee        self.assertSuccess(error)
343*9c246882SJordan Rupprecht        self.assertLess(
344*9c246882SJordan Rupprecht            fabs(data2.GetDouble(error, 16) - 2.71), 0.5, "double data2[2] = 2.71"
3452238dcc3SJonas Devlieghere        )
346779bbbf2SDave Lee        self.assertSuccess(error)
34799451b44SJordan Rupprecht
34899451b44SJordan Rupprecht        data2 = lldb.SBData()
34999451b44SJordan Rupprecht
35099451b44SJordan Rupprecht        data2.SetDataFromCString(hello_str)
351619e2e09SDave Lee        self.assertEqual(len(data2.uint8), len(hello_str))
35299451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt8, 0, 104)
35399451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt8, 1, 101)
35499451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt8, 2, 108)
35599451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt8, 3, 108)
35699451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt8, 4, 111)
35799451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt8, 5, 33)
35899451b44SJordan Rupprecht
359984354fbSJorge Gorbe Moya        data2.SetDataFromUInt64Array([1, 2, 3, 4, 5, 2**63])
36099451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt64, 0, 1)
36199451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt64, 8, 2)
36299451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt64, 16, 3)
36399451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt64, 24, 4)
36499451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt64, 32, 5)
365984354fbSJorge Gorbe Moya        self.assert_data(data2.GetUnsignedInt64, 40, 2**63)
36699451b44SJordan Rupprecht
3670ed758b2SDave Lee        self.assertEqual(
3682238dcc3SJonas Devlieghere            data2.uint64[0], 1, "read_data_helper failure: set data2[0] = 1"
3692238dcc3SJonas Devlieghere        )
3700ed758b2SDave Lee        self.assertEqual(
3712238dcc3SJonas Devlieghere            data2.uint64[1], 2, "read_data_helper failure: set data2[1] = 2"
3722238dcc3SJonas Devlieghere        )
3730ed758b2SDave Lee        self.assertEqual(
3742238dcc3SJonas Devlieghere            data2.uint64[2], 3, "read_data_helper failure: set data2[2] = 3"
3752238dcc3SJonas Devlieghere        )
3760ed758b2SDave Lee        self.assertEqual(
3772238dcc3SJonas Devlieghere            data2.uint64[3], 4, "read_data_helper failure: set data2[3] = 4"
3782238dcc3SJonas Devlieghere        )
3790ed758b2SDave Lee        self.assertEqual(
3802238dcc3SJonas Devlieghere            data2.uint64[4], 5, "read_data_helper failure: set data2[4] = 5"
3812238dcc3SJonas Devlieghere        )
38299451b44SJordan Rupprecht
383*9c246882SJordan Rupprecht        self.assertEqual(
384*9c246882SJordan Rupprecht            data2.uint64[0:2],
385*9c246882SJordan Rupprecht            [1, 2],
3862238dcc3SJonas Devlieghere            "read_data_helper failure: set data2[0:2] = [1,2]",
3872238dcc3SJonas Devlieghere        )
38899451b44SJordan Rupprecht
38999451b44SJordan Rupprecht        data2.SetDataFromSInt32Array([2, -2])
39099451b44SJordan Rupprecht        self.assert_data(data2.GetSignedInt32, 0, 2)
39199451b44SJordan Rupprecht        self.assert_data(data2.GetSignedInt32, 4, -2)
39299451b44SJordan Rupprecht
39399451b44SJordan Rupprecht        data2.SetDataFromSInt64Array([2, -2])
39499451b44SJordan Rupprecht        self.assert_data(data2.GetSignedInt64, 0, 2)
39599451b44SJordan Rupprecht        self.assert_data(data2.GetSignedInt64, 8, -2)
39699451b44SJordan Rupprecht
39799451b44SJordan Rupprecht        data2.SetDataFromUInt32Array([1, 2, 3, 4, 5])
39899451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt32, 0, 1)
39999451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt32, 4, 2)
40099451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt32, 8, 3)
40199451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt32, 12, 4)
40299451b44SJordan Rupprecht        self.assert_data(data2.GetUnsignedInt32, 16, 5)
40399451b44SJordan Rupprecht
4040ed758b2SDave Lee        self.assertEqual(
4052238dcc3SJonas Devlieghere            data2.uint32[0], 1, "read_data_helper failure: set 32-bit data2[0] = 1"
4062238dcc3SJonas Devlieghere        )
4070ed758b2SDave Lee        self.assertEqual(
4082238dcc3SJonas Devlieghere            data2.uint32[1], 2, "read_data_helper failure: set 32-bit data2[1] = 2"
4092238dcc3SJonas Devlieghere        )
4100ed758b2SDave Lee        self.assertEqual(
4112238dcc3SJonas Devlieghere            data2.uint32[2], 3, "read_data_helper failure: set 32-bit data2[2] = 3"
4122238dcc3SJonas Devlieghere        )
4130ed758b2SDave Lee        self.assertEqual(
4142238dcc3SJonas Devlieghere            data2.uint32[3], 4, "read_data_helper failure: set 32-bit data2[3] = 4"
4152238dcc3SJonas Devlieghere        )
4160ed758b2SDave Lee        self.assertEqual(
4172238dcc3SJonas Devlieghere            data2.uint32[4], 5, "read_data_helper failure: set 32-bit data2[4] = 5"
4182238dcc3SJonas Devlieghere        )
41999451b44SJordan Rupprecht
42099451b44SJordan Rupprecht        data2.SetDataFromDoubleArray([3.14, 6.28, 2.71])
421*9c246882SJordan Rupprecht        self.assertLess(
422*9c246882SJordan Rupprecht            fabs(data2.GetDouble(error, 0) - 3.14), 0.5, "set double data2[0] = 3.14"
4232238dcc3SJonas Devlieghere        )
424*9c246882SJordan Rupprecht        self.assertLess(
425*9c246882SJordan Rupprecht            fabs(data2.GetDouble(error, 8) - 6.28), 0.5, "set double data2[1] = 6.28"
4262238dcc3SJonas Devlieghere        )
427*9c246882SJordan Rupprecht        self.assertLess(
428*9c246882SJordan Rupprecht            fabs(data2.GetDouble(error, 16) - 2.71), 0.5, "set double data2[2] = 2.71"
4292238dcc3SJonas Devlieghere        )
43099451b44SJordan Rupprecht
431*9c246882SJordan Rupprecht        self.assertLess(
432*9c246882SJordan Rupprecht            fabs(data2.double[0] - 3.14),
433*9c246882SJordan Rupprecht            0.5,
4342238dcc3SJonas Devlieghere            "read_data_helper failure: set double data2[0] = 3.14",
4352238dcc3SJonas Devlieghere        )
436*9c246882SJordan Rupprecht        self.assertLess(
437*9c246882SJordan Rupprecht            fabs(data2.double[1] - 6.28),
438*9c246882SJordan Rupprecht            0.5,
4392238dcc3SJonas Devlieghere            "read_data_helper failure: set double data2[1] = 6.28",
4402238dcc3SJonas Devlieghere        )
441*9c246882SJordan Rupprecht        self.assertLess(
442*9c246882SJordan Rupprecht            fabs(data2.double[2] - 2.71),
443*9c246882SJordan Rupprecht            0.5,
4442238dcc3SJonas Devlieghere            "read_data_helper failure: set double data2[2] = 2.71",
4452238dcc3SJonas Devlieghere        )
44699451b44SJordan Rupprecht
44799451b44SJordan Rupprecht    def assert_data(self, func, arg, expected):
44899451b44SJordan Rupprecht        """Asserts func(SBError error, arg) == expected."""
44999451b44SJordan Rupprecht        error = lldb.SBError()
45099451b44SJordan Rupprecht        result = func(error, arg)
45199451b44SJordan Rupprecht        if not error.Success():
45299451b44SJordan Rupprecht            stream = lldb.SBStream()
45399451b44SJordan Rupprecht            error.GetDescription(stream)
45499451b44SJordan Rupprecht            self.assertTrue(
4552238dcc3SJonas Devlieghere                error.Success(),
4562238dcc3SJonas Devlieghere                "%s(error, %s) did not succeed: %s"
4572238dcc3SJonas Devlieghere                % (func.__name__, arg, stream.GetData()),
4582238dcc3SJonas Devlieghere            )
459*9c246882SJordan Rupprecht        self.assertEqual(
460*9c246882SJordan Rupprecht            expected,
461*9c246882SJordan Rupprecht            result,
4622238dcc3SJonas Devlieghere            "%s(error, %s) == %s != %s" % (func.__name__, arg, result, expected),
4632238dcc3SJonas Devlieghere        )
464