70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
|
# NOTE: This test is sensitive to line numbers as it checks breakpoints
|
||
|
from numba import njit
|
||
|
import numpy as np
|
||
|
from numba.tests.gdb_support import GdbMIDriver, needs_gdb_py3
|
||
|
from numba.tests.support import TestCase, needs_subprocess
|
||
|
from numba.misc.numba_gdbinfo import collect_gdbinfo
|
||
|
import unittest
|
||
|
import re
|
||
|
|
||
|
|
||
|
@needs_gdb_py3
|
||
|
@needs_subprocess
|
||
|
class Test(TestCase):
|
||
|
|
||
|
def test(self):
|
||
|
rdt_a = np.dtype([("x", np.int16), ("y", np.float64)], align=True)
|
||
|
|
||
|
@njit(debug=True)
|
||
|
def foo():
|
||
|
a = 1.234
|
||
|
b = (1, 2, 3)
|
||
|
c = ('a', b, 4)
|
||
|
d = np.arange(5.)
|
||
|
e = np.array([[1, 3j], [2, 4j]])
|
||
|
f = "Some string" + " L-Padded string".lstrip()
|
||
|
g = 11 + 22j
|
||
|
h = np.arange(24).reshape((4, 6))[::2, ::3]
|
||
|
i = np.zeros(2, dtype=rdt_a)
|
||
|
return a, b, c, d, e, f, g, h, i
|
||
|
|
||
|
foo()
|
||
|
|
||
|
extension = collect_gdbinfo().extension_loc
|
||
|
driver = GdbMIDriver(__file__, init_cmds=['-x', extension], debug=False)
|
||
|
driver.set_breakpoint(line=29)
|
||
|
driver.run()
|
||
|
driver.check_hit_breakpoint(1)
|
||
|
|
||
|
# Ideally the function would be run to get the string repr of locals
|
||
|
# but not everything appears in DWARF e.g. string literals. Further,
|
||
|
# str on NumPy arrays seems to vary a bit in output. Therefore a custom
|
||
|
# match is used.
|
||
|
|
||
|
driver.stack_list_variables(1)
|
||
|
output = driver._captured.after.decode('UTF-8')
|
||
|
done_str = output.splitlines()[0]
|
||
|
pat = r'^\^done,variables=\[\{(.*)\}\]$'
|
||
|
lcls_strs = re.match(pat, done_str).groups()[0].split('},{')
|
||
|
lcls = {k: v for k, v in [re.match(r'name="(.*)",value="(.*)"',
|
||
|
x).groups() for x in lcls_strs]}
|
||
|
expected = dict()
|
||
|
expected['a'] = r'1\.234'
|
||
|
expected['b'] = r'\(1, 2, 3\)'
|
||
|
expected['c'] = r'\(0x0, \(1, 2, 3\), 4\)'
|
||
|
expected['d'] = r'\\n\[0. 1. 2. 3. 4.\]'
|
||
|
expected['e'] = r'\\n\[\[1.\+0.j 0.\+3.j\]\\n \[2.\+0.j 0.\+4.j\]\]'
|
||
|
expected['f'] = "'Some stringL-Padded string'"
|
||
|
expected['g'] = r"11\+22j"
|
||
|
expected['h'] = r'\\n\[\[ 0 3\]\\n \[12 15\]\]'
|
||
|
expected['i'] = r'\\n\[\(0, 0.\) \(0, 0.\)\]'
|
||
|
|
||
|
for k, v in expected.items():
|
||
|
self.assertRegex(lcls[k], v)
|
||
|
|
||
|
driver.quit()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|