// File: grame-cncm[P]digraph/tests.cpp
// Function: test1(std::ostream&)
void test1(std::ostream& ss)
{
    digraph<char, int> g;
    g.add('A', 'B', 0)
        .add('B', 'C', 0)
        .add('C', 'A', 0)
        .add('D', 'B', 0)
        .add('D', 'C', 0)
        .add('D', 'E', 0)
        .add('E', 'D', 0)
        .add('E', 'F', 0)
        .add('F', 'G', 0)
        .add('G', 'F', 0)
        .add('H', 'G', 0)
        .add('H', 'E', 0)
        .add('H', 'H', 0);

    ss << "Tarjan partition of g = ";
    Tarjan<char, int> tarj(g);
    for (const auto& cycle : tarj.partition()) {
        ss << "group{ ";
        for (const auto& n : cycle) {
            ss << n << " ";
        }
        ss << "} ";
    }
}

// Assembly:
subq $0x218, %rsp            # imm = 0x218
movq %rdi, 0x210(%rsp)
leaq 0x200(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x24270
movq 0x70(%rsp), %rdi
movb $0x41, 0x1ff(%rsp)
movb $0x42, 0x1fe(%rsp)
movl $0x0, 0x1f8(%rsp)
leaq 0x1ff(%rsp), %rsi
leaq 0x1fe(%rsp), %rdx
leaq 0x1f8(%rsp), %rcx
callq 0x242b0
movq %rax, 0x78(%rsp)
jmp 0x1ce95
movq 0x78(%rsp), %rdi
movb $0x42, 0x1eb(%rsp)
movb $0x43, 0x1ea(%rsp)
movl $0x0, 0x1e4(%rsp)
leaq 0x1eb(%rsp), %rsi
leaq 0x1ea(%rsp), %rdx
leaq 0x1e4(%rsp), %rcx
callq 0x242b0
movq %rax, 0x68(%rsp)
jmp 0x1ced9
movq 0x68(%rsp), %rdi
movb $0x43, 0x1e3(%rsp)
movb $0x41, 0x1e2(%rsp)
movl $0x0, 0x1dc(%rsp)
leaq 0x1e3(%rsp), %rsi
leaq 0x1e2(%rsp), %rdx
leaq 0x1dc(%rsp), %rcx
callq 0x242b0
movq %rax, 0x60(%rsp)
jmp 0x1cf1d
movq 0x60(%rsp), %rdi
movb $0x44, 0x1db(%rsp)
movb $0x42, 0x1da(%rsp)
movl $0x0, 0x1d4(%rsp)
leaq 0x1db(%rsp), %rsi
leaq 0x1da(%rsp), %rdx
leaq 0x1d4(%rsp), %rcx
callq 0x242b0
movq %rax, 0x58(%rsp)
jmp 0x1cf61
movq 0x58(%rsp), %rdi
movb $0x44, 0x1d3(%rsp)
movb $0x43, 0x1d2(%rsp)
movl $0x0, 0x1cc(%rsp)
leaq 0x1d3(%rsp), %rsi
leaq 0x1d2(%rsp), %rdx
leaq 0x1cc(%rsp), %rcx
callq 0x242b0
movq %rax, 0x50(%rsp)
jmp 0x1cfa5
movq 0x50(%rsp), %rdi
movb $0x44, 0x1cb(%rsp)
movb $0x45, 0x1ca(%rsp)
movl $0x0, 0x1c4(%rsp)
leaq 0x1cb(%rsp), %rsi
leaq 0x1ca(%rsp), %rdx
leaq 0x1c4(%rsp), %rcx
callq 0x242b0
movq %rax, 0x48(%rsp)
jmp 0x1cfe9
movq 0x48(%rsp), %rdi
movb $0x45, 0x1c3(%rsp)
movb $0x44, 0x1c2(%rsp)
movl $0x0, 0x1bc(%rsp)
leaq 0x1c3(%rsp), %rsi
leaq 0x1c2(%rsp), %rdx
leaq 0x1bc(%rsp), %rcx
callq 0x242b0
movq %rax, 0x40(%rsp)
jmp 0x1d02d
movq 0x40(%rsp), %rdi
movb $0x45, 0x1bb(%rsp)
movb $0x46, 0x1ba(%rsp)
movl $0x0, 0x1b4(%rsp)
leaq 0x1bb(%rsp), %rsi
leaq 0x1ba(%rsp), %rdx
leaq 0x1b4(%rsp), %rcx
callq 0x242b0
movq %rax, 0x38(%rsp)
jmp 0x1d071
movq 0x38(%rsp), %rdi
movb $0x46, 0x1b3(%rsp)
movb $0x47, 0x1b2(%rsp)
movl $0x0, 0x1ac(%rsp)
leaq 0x1b3(%rsp), %rsi
leaq 0x1b2(%rsp), %rdx
leaq 0x1ac(%rsp), %rcx
callq 0x242b0
movq %rax, 0x30(%rsp)
jmp 0x1d0b5
movq 0x30(%rsp), %rdi
movb $0x47, 0x1ab(%rsp)
movb $0x46, 0x1aa(%rsp)
movl $0x0, 0x1a4(%rsp)
leaq 0x1ab(%rsp), %rsi
leaq 0x1aa(%rsp), %rdx
leaq 0x1a4(%rsp), %rcx
callq 0x242b0
movq %rax, 0x28(%rsp)
jmp 0x1d0f9
movq 0x28(%rsp), %rdi
movb $0x48, 0x1a3(%rsp)
movb $0x47, 0x1a2(%rsp)
movl $0x0, 0x19c(%rsp)
leaq 0x1a3(%rsp), %rsi
leaq 0x1a2(%rsp), %rdx
leaq 0x19c(%rsp), %rcx
callq 0x242b0
movq %rax, 0x20(%rsp)
jmp 0x1d13d
movq 0x20(%rsp), %rdi
movb $0x48, 0x19b(%rsp)
movb $0x45, 0x19a(%rsp)
movl $0x0, 0x194(%rsp)
leaq 0x19b(%rsp), %rsi
leaq 0x19a(%rsp), %rdx
leaq 0x194(%rsp), %rcx
callq 0x242b0
movq %rax, 0x18(%rsp)
jmp 0x1d181
movq 0x18(%rsp), %rdi
movb $0x48, 0x193(%rsp)
movb $0x48, 0x192(%rsp)
movl $0x0, 0x18c(%rsp)
leaq 0x193(%rsp), %rsi
leaq 0x192(%rsp), %rdx
leaq 0x18c(%rsp), %rcx
callq 0x242b0
jmp 0x1d1c0
movq 0x210(%rsp), %rdi
leaq 0x20294(%rip), %rsi     # 0x3d463
callq 0x2180
jmp 0x1d1d6
leaq 0xc0(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x24620
jmp 0x1d1ed
leaq 0xc0(%rsp), %rdi
callq 0x247b0
movq %rax, 0x10(%rsp)
jmp 0x1d201
movq 0x10(%rsp), %rax
movq %rax, 0xb8(%rsp)
movq 0xb8(%rsp), %rdi
callq 0xad10
movq %rax, 0xb0(%rsp)
movq 0xb8(%rsp), %rdi
callq 0xad40
movq %rax, 0xa8(%rsp)
leaq 0xb0(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0xad70
testb $0x1, %al
jne 0x1d256
jmp 0x1d394
leaq 0xb0(%rsp), %rdi
callq 0xad90
movq %rax, 0xa0(%rsp)
movq 0x210(%rsp), %rdi
leaq 0x20202(%rip), %rsi     # 0x3d47c
callq 0x2180
jmp 0x1d281
movq 0xa0(%rsp), %rax
movq %rax, 0x98(%rsp)
movq 0x98(%rsp), %rdi
callq 0xa150
movq %rax, 0x90(%rsp)
movq 0x98(%rsp), %rdi
callq 0xa180
movq %rax, 0x88(%rsp)
leaq 0x90(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0xa1b0
testb $0x1, %al
jne 0x1d2d9
jmp 0x1d36a
leaq 0x90(%rsp), %rdi
callq 0xa1d0
movq %rax, 0x80(%rsp)
movq 0x210(%rsp), %rdi
movq 0x80(%rsp), %rax
movsbl (%rax), %esi
callq 0x21e0
movq %rax, 0x8(%rsp)
jmp 0x1d30d
movq 0x8(%rsp), %rdi
leaq 0x217ba(%rip), %rsi     # 0x3ead3
callq 0x2180
jmp 0x1d320
jmp 0x1d322
leaq 0x90(%rsp), %rdi
callq 0xa350
jmp 0x1d2bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
jmp 0x1d3b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1f0(%rsp)
movl %eax, 0x1ec(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0x247d0
jmp 0x1d3b6
movq 0x210(%rsp), %rdi
leaq 0x20155(%rip), %rsi     # 0x3d4ce
callq 0x2180
jmp 0x1d380
jmp 0x1d382
leaq 0xb0(%rsp), %rdi
callq 0xadb0
jmp 0x1d238
leaq 0xc0(%rsp), %rdi
callq 0x247d0
leaq 0x200(%rsp), %rdi
callq 0x24610
addq $0x218, %rsp            # imm = 0x218
retq
leaq 0x200(%rsp), %rdi
callq 0x24610
movq 0x1f0(%rsp), %rdi
callq 0x2290