File: TestCppBitfields.py

package info (click to toggle)
llvm-toolchain-13 1%3A13.0.1-6~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,418,812 kB
  • sloc: cpp: 5,290,827; ansic: 996,570; asm: 544,593; python: 188,212; objc: 72,027; lisp: 30,291; f90: 25,395; sh: 24,900; javascript: 9,780; pascal: 9,398; perl: 7,484; ml: 5,432; awk: 3,523; makefile: 2,892; xml: 953; cs: 573; fortran: 539
file content (152 lines) | stat: -rw-r--r-- 5,241 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
"""Show bitfields and check that they display correctly."""

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


class CppBitfieldsTestCase(TestBase):

    mydir = TestBase.compute_mydir(__file__)

    def setUp(self):
        # Call super's setUp().
        TestBase.setUp(self)
        # Find the line number to break inside main().
        self.line = line_number('main.cpp', '// Set break point at this line.')

    def test_and_run_command(self):
        """Test 'frame variable ...' on a variable with bitfields."""
        self.build()

        lldbutil.run_to_source_breakpoint(self, '// Set break point at this line.',
          lldb.SBFileSpec("main.cpp", False))

        # The stop reason of the thread should be breakpoint.
        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
                    substrs=['stopped',
                             'stop reason = breakpoint'])

        # The breakpoint should have a hit count of 1.
        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
                    substrs=[' resolved, hit count = 1'])

        self.expect("expr (lba.a)", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs=['unsigned int', '2'])
        self.expect("expr (lbb.b)", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs=['unsigned int', '3'])
        self.expect("expr (lbc.c)", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs=['unsigned int', '4'])
        self.expect("expr (lbd.a)", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs=['unsigned int', '5'])
        self.expect("expr (clang_example.f.a)", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs=['uint64_t', '1'])

        self.expect("expr uwbf",
            substrs=['a = 255',
                    'b = 65535',
                    'c = 4294967295',
                    'x = 4294967295'] )

        self.expect("expr uwubf",
            substrs=['a = 16777215',
                    'x = 4294967295'] )

        self.expect(
            "frame variable --show-types lba",
            VARIABLES_DISPLAYED_CORRECTLY,
            substrs=[
                '(int:32)  = ',
                '(unsigned int:20) a = 2',
                ])

        self.expect(
            "frame variable --show-types lbb",
            VARIABLES_DISPLAYED_CORRECTLY,
            substrs=[
                '(unsigned int:1) a = 1',
                '(int:31)  =',
                '(unsigned int:20) b = 3',
                ])

        self.expect(
            "frame variable --show-types lbc",
            VARIABLES_DISPLAYED_CORRECTLY,
            substrs=[
                '(int:22)  =',
                '(unsigned int:1) a = 1',
                '(unsigned int:1) b = 0',
                '(unsigned int:5) c = 4',
                '(unsigned int:1) d = 1',
                '(int:2)  =',
                '(unsigned int:20) e = 20',
                ])

        self.expect(
            "frame variable --show-types lbd",
            VARIABLES_DISPLAYED_CORRECTLY,
            substrs=[
                '(char [3]) arr = "ab"',
                '(int:32)  =',
                '(unsigned int:20) a = 5',
                ])

        self.expect(
            "frame variable --show-types clang_example",
            VARIABLES_DISPLAYED_CORRECTLY,
            substrs=[
                   '(int:22)  =',
                   '(uint64_t:1) a = 1',
                   '(uint64_t:1) b = 0',
                   '(uint64_t:1) c = 1',
                   '(uint64_t:1) d = 0',
                   '(uint64_t:1) e = 1',
                   '(uint64_t:1) f = 0',
                   '(uint64_t:1) g = 1',
                   '(uint64_t:1) h = 0',
                   '(uint64_t:1) i = 1',
                   '(uint64_t:1) j = 0',
                   '(uint64_t:1) k = 1',
                ])

        self.expect(
            "frame variable --show-types derived",
            VARIABLES_DISPLAYED_CORRECTLY,
            substrs=[
                '(uint32_t) b_a = 2',
                '(uint32_t:1) d_a = 1',
                ])

        self.expect(
            "frame variable --show-types bb",
            VARIABLES_DISPLAYED_CORRECTLY,
            substrs=[
                '(bool:1) a = true',
                '(bool:1) b = false',
                '(bool:2) c = true',
                '(bool:2) d = true',
                ])

        bb = self.frame().FindVariable('bb')
        self.assertTrue(bb.IsValid())

        bb_a = bb.GetChildAtIndex(0)
        self.assertTrue(bb_a.IsValid())
        self.assertEqual(bb_a.GetValueAsUnsigned(), 1)
        self.assertEqual(bb_a.GetValueAsSigned(), 1)

        bb_b = bb.GetChildAtIndex(1)
        self.assertTrue(bb_b.IsValid())
        self.assertEqual(bb_b.GetValueAsUnsigned(), 0)
        self.assertEqual(bb_b.GetValueAsSigned(), 0)

        bb_c = bb.GetChildAtIndex(2)
        self.assertTrue(bb_c.IsValid())
        self.assertEqual(bb_c.GetValueAsUnsigned(), 1)
        self.assertEqual(bb_c.GetValueAsSigned(), 1)

        bb_d = bb.GetChildAtIndex(3)
        self.assertTrue(bb_d.IsValid())
        self.assertEqual(bb_d.GetValueAsUnsigned(), 1)
        self.assertEqual(bb_d.GetValueAsSigned(), 1)