// File: minimind[P]simple-graph/unittest/catch.hpp
// Function: Catch::listTests(Catch::Config const&)
inline std::size_t listTests( Config const& config ) {

        TestSpec testSpec = config.testSpec();
        if( config.testSpec().hasFilters() )
            std::cout << "Matching test cases:\n";
        else {
            std::cout << "All available test cases:\n";
            testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec();
        }

        std::size_t matchedTests = 0;
        TextAttributes nameAttr, tagsAttr;
        nameAttr.setInitialIndent( 2 ).setIndent( 4 );
        tagsAttr.setIndent( 6 );

        std::vector<TestCase> matchedTestCases;
        getRegistryHub().getTestCaseRegistry().getFilteredTests( testSpec, config, matchedTestCases );
        for( std::vector<TestCase>::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end();
                it != itEnd;
                ++it ) {
            matchedTests++;
            TestCaseInfo const& testCaseInfo = it->getTestCaseInfo();
            Colour::Code colour = testCaseInfo.isHidden()
                ? Colour::SecondaryText
                : Colour::None;
            Colour colourGuard( colour );

            std::cout << Text( testCaseInfo.name, nameAttr ) << std::endl;
            if( !testCaseInfo.tags.empty() )
                std::cout << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl;
        }

        if( !config.testSpec().hasFilters() )
            std::cout << pluralise( matchedTests, "test case" ) << "\n" << std::endl;
        else
            std::cout << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl;
        return matchedTests;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x360, %rsp            # imm = 0x360
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq (%rdi), %rax
movq 0x68(%rax), %rax
callq *%rax
movq %rax, %rsi
leaq -0x20(%rbp), %rdi
callq 0x32e60
movq -0x8(%rbp), %rdi
movq (%rdi), %rax
movq 0x68(%rax), %rax
callq *%rax
movq %rax, -0x2c8(%rbp)
jmp 0x340ae
movq -0x2c8(%rbp), %rdi
callq 0x357b0
movb %al, -0x2c9(%rbp)
jmp 0x340c2
movb -0x2c9(%rbp), %al
testb $0x1, %al
jne 0x340ce
jmp 0x340f9
movq 0x78ee3(%rip), %rdi     # 0xacfb8
leaq 0x44f3a(%rip), %rsi     # 0x79016
callq 0xb520
jmp 0x340e3
jmp 0x34200
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x34786
movq 0x78eb8(%rip), %rdi     # 0xacfb8
leaq 0x44f25(%rip), %rsi     # 0x7902c
callq 0xb520
jmp 0x3410e
callq 0x11e50
movq %rax, %rsi
leaq -0xb8(%rbp), %rdi
callq 0x2fe60
jmp 0x34124
leaq -0xd9(%rbp), %rdi
movq %rdi, -0x2d8(%rbp)
callq 0xb930
movq -0x2d8(%rbp), %rdx
leaq 0x454fc(%rip), %rsi     # 0x79641
leaq -0xd8(%rbp), %rdi
callq 0x134e0
jmp 0x34153
leaq -0xb8(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x2feb0
movq %rax, -0x2e0(%rbp)
jmp 0x3416f
movq -0x2e0(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x2ff90
jmp 0x34181
leaq -0x20(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x2ffe0
leaq -0x48(%rbp), %rdi
callq 0x30010
leaq -0xd8(%rbp), %rdi
callq 0xb330
leaq -0xd9(%rbp), %rdi
callq 0xb5c0
leaq -0xb8(%rbp), %rdi
callq 0x30030
jmp 0x34200
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x341e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0xb330
leaq -0xd9(%rbp), %rdi
callq 0xb5c0
leaq -0xb8(%rbp), %rdi
callq 0x30030
jmp 0x34786
movq $0x0, -0xe8(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x2a2e0
jmp 0x34219
leaq -0x128(%rbp), %rdi
callq 0x2a2e0
jmp 0x34227
leaq -0x108(%rbp), %rdi
movl $0x2, %esi
callq 0x357d0
movq %rax, -0x2e8(%rbp)
jmp 0x34241
movq -0x2e8(%rbp), %rdi
movl $0x4, %esi
callq 0x2a310
leaq -0x128(%rbp), %rdi
movl $0x6, %esi
callq 0x2a310
leaq -0x140(%rbp), %rdi
callq 0x1a400
callq 0xcc50
movq %rax, -0x2f0(%rbp)
jmp 0x3427d
movq -0x2f0(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
callq *%rax
movq %rax, -0x2f8(%rbp)
jmp 0x34296
movq -0x2f8(%rbp), %rdi
movq -0x8(%rbp), %rdx
movq (%rdi), %rax
movq 0x18(%rax), %rax
leaq -0x20(%rbp), %rsi
leaq -0x140(%rbp), %rcx
callq *%rax
jmp 0x342b7
leaq -0x140(%rbp), %rdi
callq 0x357f0
movq %rax, -0x150(%rbp)
leaq -0x148(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x35820
leaq -0x140(%rbp), %rdi
callq 0x35860
movq %rax, -0x160(%rbp)
leaq -0x158(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x35820
leaq -0x148(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x35890
testb $0x1, %al
jne 0x3431f
jmp 0x344d3
movq -0xe8(%rbp), %rax
incq %rax
movq %rax, -0xe8(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x358d0
movq %rax, %rdi
callq 0xe410
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rdi
callq 0xdfd0
movb %al, %cl
xorl %eax, %eax
testb %cl, %cl
movl $0x17, %ecx
cmovnel %ecx, %eax
movl %eax, -0x16c(%rbp)
movl -0x16c(%rbp), %esi
leaq -0x16d(%rbp), %rdi
callq 0xd210
jmp 0x3437f
movq -0x168(%rbp), %rsi
leaq -0x1c8(%rbp), %rdi
leaq -0x108(%rbp), %rdx
callq 0x2a330
jmp 0x3439b
movq 0x78c16(%rip), %rdi     # 0xacfb8
leaq -0x1c8(%rbp), %rsi
callq 0x2a240
movq %rax, -0x300(%rbp)
jmp 0x343b7
movq -0x300(%rbp), %rdi
movq 0x78bbb(%rip), %rsi     # 0xacf80
callq 0xb5a0
jmp 0x343cc
leaq -0x1c8(%rbp), %rdi
callq 0x2a970
movq -0x168(%rbp), %rdi
addq $0x60, %rdi
callq 0x358f0
testb $0x1, %al
jne 0x344a5
movq -0x168(%rbp), %rsi
addq $0xc0, %rsi
leaq -0x220(%rbp), %rdi
leaq -0x128(%rbp), %rdx
callq 0x2a330
jmp 0x34413
movq 0x78b9e(%rip), %rdi     # 0xacfb8
leaq -0x220(%rbp), %rsi
callq 0x2a240
movq %rax, -0x308(%rbp)
jmp 0x3442f
movq -0x308(%rbp), %rdi
movq 0x78b43(%rip), %rsi     # 0xacf80
callq 0xb5a0
jmp 0x34444
leaq -0x220(%rbp), %rdi
callq 0x2a970
jmp 0x344a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x3477a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x344c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x2a970
jmp 0x344c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x2a970
jmp 0x344c2
leaq -0x16d(%rbp), %rdi
callq 0xd290
leaq -0x148(%rbp), %rdi
callq 0x35910
jmp 0x34303
leaq -0x16d(%rbp), %rdi
callq 0xd290
jmp 0x3477a
movq -0x8(%rbp), %rdi
movq (%rdi), %rax
movq 0x68(%rax), %rax
callq *%rax
movq %rax, -0x310(%rbp)
jmp 0x344e9
movq -0x310(%rbp), %rdi
callq 0x357b0
movb %al, -0x311(%rbp)
jmp 0x344fd
movb -0x311(%rbp), %al
testb $0x1, %al
jne 0x3462d
jmp 0x3450d
movq -0xe8(%rbp), %rax
movq %rax, -0x328(%rbp)
leaq -0x269(%rbp), %rdi
movq %rdi, -0x320(%rbp)
callq 0xb930
movq -0x320(%rbp), %rdx
leaq 0x44b14(%rip), %rsi     # 0x79050
leaq -0x268(%rbp), %rdi
callq 0x134e0
jmp 0x3454a
movq -0x328(%rbp), %rsi
leaq -0x248(%rbp), %rdi
leaq -0x268(%rbp), %rdx
callq 0xf150
jmp 0x34566
movq 0x78a4b(%rip), %rdi     # 0xacfb8
leaq -0x248(%rbp), %rsi
callq 0xf190
movq %rax, -0x330(%rbp)
jmp 0x34582
movq -0x330(%rbp), %rdi
leaq 0x44f97(%rip), %rsi     # 0x79527
callq 0xb520
movq %rax, -0x338(%rbp)
jmp 0x3459e
movq -0x338(%rbp), %rdi
movq 0x789d4(%rip), %rsi     # 0xacf80
callq 0xb5a0
jmp 0x345b3
leaq -0x248(%rbp), %rdi
callq 0x35930
leaq -0x268(%rbp), %rdi
callq 0xb330
leaq -0x269(%rbp), %rdi
callq 0xb5c0
jmp 0x34747
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x3461c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x34610
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x35930
leaq -0x268(%rbp), %rdi
callq 0xb330
leaq -0x269(%rbp), %rdi
callq 0xb5c0
jmp 0x3477a
movq -0xe8(%rbp), %rax
movq %rax, -0x348(%rbp)
leaq -0x2b9(%rbp), %rdi
movq %rdi, -0x340(%rbp)
callq 0xb930
movq -0x340(%rbp), %rdx
leaq 0x449eb(%rip), %rsi     # 0x79047
leaq -0x2b8(%rbp), %rdi
callq 0x134e0
jmp 0x3466a
movq -0x348(%rbp), %rsi
leaq -0x298(%rbp), %rdi
leaq -0x2b8(%rbp), %rdx
callq 0xf150
jmp 0x34686
movq 0x7892b(%rip), %rdi     # 0xacfb8
leaq -0x298(%rbp), %rsi
callq 0xf190
movq %rax, -0x350(%rbp)
jmp 0x346a2
movq -0x350(%rbp), %rdi
leaq 0x44e77(%rip), %rsi     # 0x79527
callq 0xb520
movq %rax, -0x358(%rbp)
jmp 0x346be
movq -0x358(%rbp), %rdi
movq 0x788b4(%rip), %rsi     # 0xacf80
callq 0xb5a0
jmp 0x346d3
leaq -0x298(%rbp), %rdi
callq 0x35930
leaq -0x2b8(%rbp), %rdi
callq 0xb330
leaq -0x2b9(%rbp), %rdi
callq 0xb5c0
jmp 0x34747
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x34739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x3472d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x35930
leaq -0x2b8(%rbp), %rdi
callq 0xb330
leaq -0x2b9(%rbp), %rdi
callq 0xb5c0
jmp 0x3477a
movq -0xe8(%rbp), %rax
movq %rax, -0x360(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x159c0
leaq -0x20(%rbp), %rdi
callq 0x30010
movq -0x360(%rbp), %rax
addq $0x360, %rsp            # imm = 0x360
popq %rbp
retq
leaq -0x140(%rbp), %rdi
callq 0x159c0
leaq -0x20(%rbp), %rdi
callq 0x30010
movq -0x28(%rbp), %rdi
callq 0xb920
nopl (%rax,%rax)