Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lldb / test / API / lang / cpp / class-template-parameter-pack / TestTemplatePackArgs.py
blobc571357ff6720f7a5fcd71d9a70ad9b8e89c7432
1 """
2 Test that the type of arguments to C++ template classes that have variadic
3 parameters can be enumerated.
4 """
5 import lldb
6 from lldbsuite.test.decorators import *
7 from lldbsuite.test.lldbtest import *
8 from lldbsuite.test import lldbutil
11 class TemplatePackArgsTestCase(TestBase):
12 def test_template_argument_pack(self):
13 self.build()
14 (_, _, thread, _) = lldbutil.run_to_source_breakpoint(
15 self, "breakpoint here", lldb.SBFileSpec("main.cpp"), exe_name="a.out"
17 frame = thread.GetSelectedFrame()
19 empty_pack = frame.FindVariable("emptyPack")
20 self.assertTrue(
21 empty_pack.IsValid(), "make sure we find the emptyPack variable"
24 only_pack = frame.FindVariable("onlyPack")
25 self.assertTrue(only_pack.IsValid(), "make sure we find the onlyPack variable")
26 self.assertEqual(only_pack.GetType().GetNumberOfTemplateArguments(), 4)
27 self.assertEqual(
28 only_pack.GetType().GetTemplateArgumentType(0).GetName(), "int"
30 self.assertEqual(
31 only_pack.GetType().GetTemplateArgumentType(1).GetName(), "char"
33 self.assertEqual(
34 only_pack.GetType().GetTemplateArgumentType(2).GetName(), "double"
36 # Access the C<double, 42> template parameter.
37 nested_template = only_pack.GetType().GetTemplateArgumentType(3)
38 self.assertEqual(nested_template.GetName(), "D<int, int, bool>")
39 self.assertEqual(nested_template.GetNumberOfTemplateArguments(), 3)
40 self.assertEqual(nested_template.GetTemplateArgumentType(0).GetName(), "int")
41 self.assertEqual(nested_template.GetTemplateArgumentType(1).GetName(), "int")
42 self.assertEqual(nested_template.GetTemplateArgumentType(2).GetName(), "bool")