// File: /workspace/github_cpp_makefile_star2_O2/aalto-speech[P]ftk/test/msfgtest.cc
// Function: MultiStringFactorGraphTest1::test_method()
BOOST_AUTO_TEST_CASE(MultiStringFactorGraphTest1)
{
    MultiStringFactorGraph msfg(start_end_symbol);
    set<string> vocab = {"k", "i", "s", "a", "sa", "ki", "kis", "kissa",
                         "lle", "kin", "kala"};
    string sentence("kissa");
    FactorGraph fg(sentence, start_end_symbol, vocab, 5);
    string sentence2("kissallekin");
    FactorGraph fg2(sentence2, start_end_symbol, vocab, 5);
    string sentence3("kissakala");
    FactorGraph fg3(sentence3, start_end_symbol, vocab, 5);
    msfg.add(fg);
    BOOST_CHECK_EQUAL( 1, (int)msfg.string_end_nodes.size() );
    BOOST_CHECK_EQUAL( 7, (int)msfg.num_paths(sentence) );
    msfg.add(fg2);
    BOOST_CHECK_EQUAL( 2, (int)msfg.string_end_nodes.size() );
    BOOST_CHECK_EQUAL( 7, msfg.num_paths(sentence2) );
    msfg.add(fg3);
    BOOST_CHECK_EQUAL( 3, (int)msfg.string_end_nodes.size() );
    BOOST_CHECK_EQUAL( 7, (int)msfg.num_paths(sentence3) );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x528, %rsp            # imm = 0x528
leaq 0x203c3(%rip), %rsi     # 0x705d8
leaq -0x550(%rbp), %rdi
callq 0x4ee8c
leaq 0x3a2a(%rip), %rsi      # 0x53c52
leaq -0x368(%rbp), %r14
leaq -0x458(%rbp), %rdx
movq %r14, %rdi
callq 0x5160
leaq -0x348(%rbp), %r15
leaq 0x351c(%rip), %rsi      # 0x53768
leaq -0x3e0(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x328(%rbp), %r15
leaq 0x2da5(%rip), %rsi      # 0x5300e
leaq -0xe8(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x308(%rbp), %r15
leaq 0x3ca6(%rip), %rsi      # 0x53f2c
leaq -0xc8(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x2e8(%rbp), %r15
leaq 0x451d(%rip), %rsi      # 0x547c0
leaq -0xa8(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x2c8(%rbp), %r15
leaq 0x3ac4(%rip), %rsi      # 0x53d84
leaq -0x58(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x2a8(%rbp), %r15
leaq 0x3aad(%rip), %rsi      # 0x53d87
leaq -0x30(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x288(%rbp), %r15
leaq 0x3960(%rip), %rsi      # 0x53c54
leaq -0x2c(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x268(%rbp), %r15
leaq 0x4b4d(%rip), %rsi      # 0x54e5b
leaq -0x35(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x248(%rbp), %r15
leaq 0x4b3f(%rip), %rsi      # 0x54e67
leaq -0x34(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x228(%rbp), %r15
leaq 0x4b2e(%rip), %rsi      # 0x54e70
leaq -0x33(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x118(%rbp), %rdi
leaq -0x368(%rbp), %rsi
pushq $0xb
popq %rdx
leaq -0x32(%rbp), %rcx
leaq -0x31(%rbp), %r8
callq 0x4ed0a
movl $0x140, %ebx            # imm = 0x140
leaq (%rbx,%rbp), %rdi
addq $-0x368, %rdi           # imm = 0xFC98
callq 0x57b8
addq $-0x20, %rbx
cmpq $-0x20, %rbx
jne 0x50371
leaq 0x38c2(%rip), %rsi      # 0x53c54
leaq -0xe8(%rbp), %rdi
leaq -0x368(%rbp), %rdx
callq 0x5160
leaq 0x2022c(%rip), %rdx     # 0x705d8
leaq -0x368(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
leaq -0x118(%rbp), %rcx
pushq $0x5
popq %r8
xorl %r9d, %r9d
callq 0xf742
leaq 0x4a8b(%rip), %rsi      # 0x54e5f
leaq -0xc8(%rbp), %rdi
leaq -0x458(%rbp), %rdx
callq 0x5160
leaq 0x201ea(%rip), %rdx     # 0x705d8
leaq -0x458(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
leaq -0x118(%rbp), %rcx
pushq $0x5
popq %r8
xorl %r9d, %r9d
callq 0xf742
leaq 0x4a55(%rip), %rsi      # 0x54e6b
leaq -0xa8(%rbp), %rdi
leaq -0x3e0(%rbp), %rdx
callq 0x5160
leaq 0x201a8(%rip), %rdx     # 0x705d8
leaq -0x3e0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
leaq -0x118(%rbp), %rcx
pushq $0x5
popq %r8
xorl %r9d, %r9d
callq 0xf742
leaq -0x550(%rbp), %rdi
leaq -0x368(%rbp), %rsi
pushq $0x1
popq %rdx
callq 0x129ea
movq 0x2015a(%rip), %rdi     # 0x705c8
leaq 0x49d5(%rip), %r14      # 0x54e4a
leaq -0x208(%rbp), %rsi
movq %r14, (%rsi)
leaq 0x49d4(%rip), %r15      # 0x54e5a
movq %r15, 0x8(%rsi)
leaq 0x3584(%rip), %r12      # 0x53a15
leaq -0x1f8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
pushq $0x15
popq %rdx
callq 0x5710
leaq -0x58(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x1f62a(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq 0x1faf0(%rip), %rbx     # 0x6ffb0
movq %rbx, 0x10(%rdi)
leaq 0x2e8c(%rip), %r13      # 0x53357
movq %r13, 0x18(%rdi)
leaq -0x1e8(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x30(%rbp), %r9
movl $0x1, (%r9)
movl -0x4f0(%rbp), %eax
movl %eax, -0x2c(%rbp)
subq $0x8, %rsp
leaq 0x4979(%rip), %r10      # 0x54e75
leaq 0x3a98(%rip), %rax      # 0x53f9b
pushq $0x15
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
pushq %r10
leaq -0x2c(%rbp), %r10
pushq %r10
pushq %rax
callq 0x4ea09
addq $0x20, %rsp
movq 0x200a2(%rip), %rdi     # 0x705c8
leaq -0x1d8(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x1c8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
pushq $0x16
popq %rdx
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x1f58b(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq %rbx, -0x48(%rbp)
movq %r13, -0x40(%rbp)
movq %r14, -0x88(%rbp)
movq %r15, -0x80(%rbp)
movl $0x7, -0x30(%rbp)
leaq -0x550(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x12eee
movl %eax, -0x2c(%rbp)
subq $0x8, %rsp
leaq 0x4903(%rip), %rax      # 0x54e97
leaq 0x3fbd(%rip), %r10      # 0x54558
leaq -0x58(%rbp), %rdi
leaq -0x88(%rbp), %rsi
pushq $0x16
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq -0x30(%rbp), %r9
pushq %rax
leaq -0x2c(%rbp), %rax
pushq %rax
pushq %r10
callq 0x4ea09
addq $0x20, %rsp
leaq -0x550(%rbp), %rdi
leaq -0x458(%rbp), %rsi
pushq $0x1
popq %rdx
callq 0x129ea
movq 0x1ffe6(%rip), %rdi     # 0x705c8
leaq -0x1b8(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x1a8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
pushq $0x18
popq %rdx
callq 0x5710
leaq -0x58(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x1f4cb(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq %rbx, 0x10(%rdi)
movq %r13, 0x18(%rdi)
leaq -0x198(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x30(%rbp), %r9
movl $0x2, (%r9)
movl -0x4f0(%rbp), %eax
movl %eax, -0x2c(%rbp)
subq $0x8, %rsp
leaq 0x4061(%rip), %rax      # 0x546ae
pushq $0x18
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq 0x4817(%rip), %r10      # 0x54e75
pushq %r10
leaq -0x2c(%rbp), %r10
pushq %r10
pushq %rax
callq 0x4ea09
addq $0x20, %rsp
movq 0x1ff51(%rip), %rdi     # 0x705c8
leaq -0x188(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x178(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
pushq $0x19
popq %rdx
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x1f43a(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq %rbx, -0x48(%rbp)
movq %r13, -0x40(%rbp)
movq %r14, -0x78(%rbp)
movq %r15, -0x70(%rbp)
movl $0x7, -0x30(%rbp)
leaq -0x550(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x12eee
movl %eax, -0x2c(%rbp)
subq $0x8, %rsp
leaq 0x47d3(%rip), %rax      # 0x54eb5
leaq -0x58(%rbp), %rdi
leaq -0x78(%rbp), %rsi
pushq $0x19
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq -0x30(%rbp), %r9
pushq %rax
leaq -0x2c(%rbp), %rax
pushq %rax
leaq 0x3e53(%rip), %rax      # 0x54558
pushq %rax
callq 0x4ea09
addq $0x20, %rsp
leaq -0x550(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
pushq $0x1
popq %rdx
callq 0x129ea
movq 0x1fe9c(%rip), %rdi     # 0x705c8
leaq -0x168(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x158(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
pushq $0x1b
popq %rdx
callq 0x5710
leaq -0x58(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x1f381(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq %rbx, 0x10(%rdi)
movq %r13, 0x18(%rdi)
leaq -0x148(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x30(%rbp), %r9
movl $0x3, (%r9)
movl -0x4f0(%rbp), %eax
movl %eax, -0x2c(%rbp)
subq $0x8, %rsp
leaq 0x37f0(%rip), %rax      # 0x53f87
pushq $0x1b
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq 0x46cd(%rip), %r10      # 0x54e75
pushq %r10
leaq -0x2c(%rbp), %r10
pushq %r10
pushq %rax
callq 0x4ea09
addq $0x20, %rsp
movq 0x1fe07(%rip), %rdi     # 0x705c8
leaq -0x138(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x128(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
pushq $0x1c
popq %rdx
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x1f2f0(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq %rbx, -0x48(%rbp)
movq %r13, -0x40(%rbp)
movq %r14, -0x68(%rbp)
movq %r15, -0x60(%rbp)
movl $0x7, -0x30(%rbp)
leaq -0x550(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x12eee
movl %eax, -0x2c(%rbp)
subq $0x8, %rsp
leaq 0x46a3(%rip), %rax      # 0x54ecf
leaq -0x58(%rbp), %rdi
leaq -0x68(%rbp), %rsi
pushq $0x1c
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq -0x30(%rbp), %r9
pushq %rax
leaq -0x2c(%rbp), %rax
pushq %rax
leaq 0x3d09(%rip), %rax      # 0x54558
pushq %rax
callq 0x4ea09
addq $0x20, %rsp
leaq -0x3e0(%rbp), %rdi
callq 0x10c24
leaq -0xa8(%rbp), %rdi
callq 0x57b8
leaq -0x458(%rbp), %rdi
callq 0x10c24
leaq -0xc8(%rbp), %rdi
callq 0x57b8
leaq -0x368(%rbp), %rdi
callq 0x10c24
leaq -0xe8(%rbp), %rdi
callq 0x57b8
leaq -0x118(%rbp), %rdi
callq 0x200e8
leaq -0x550(%rbp), %rdi
callq 0x128f4
addq $0x528, %rsp            # imm = 0x528
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x50974
jmp 0x50974
jmp 0x50974
movq %rax, %rbx
jmp 0x50983
movq %rax, %rbx
jmp 0x5098f
movq %rax, %rbx
jmp 0x5099b
movq %rax, %rbx
jmp 0x509a7
movq %rax, %rbx
jmp 0x509b3
movq %rax, %rbx
jmp 0x509bf
movq %rax, %rbx
movl $0x140, %r12d           # imm = 0x140
leaq (%r12,%rbp), %rdi
addq $-0x368, %rdi           # imm = 0xFC98
callq 0x57b8
addq $-0x20, %r12
cmpq $-0x20, %r12
jne 0x50913
movb $0x1, %al
jmp 0x50948
jmp 0x50943
jmp 0x50943
jmp 0x50943
jmp 0x50943
jmp 0x50943
jmp 0x50943
jmp 0x50943
jmp 0x50943
jmp 0x50943
movq %rax, %rbx
xorl %eax, %eax
cmpq %r15, %r14
sete %cl
testb %al, %al
jne 0x509cb
testb %cl, %cl
jne 0x509cb
addq $-0x20, %r15
movq %r15, %rdi
callq 0x57b8
cmpq %r14, %r15
jne 0x50956
jmp 0x509cb
movq %rax, %rbx
jmp 0x509cb
jmp 0x50974
jmp 0x50974
jmp 0x50974
movq %rax, %rbx
leaq -0x3e0(%rbp), %rdi
callq 0x10c24
leaq -0xa8(%rbp), %rdi
callq 0x57b8
leaq -0x458(%rbp), %rdi
callq 0x10c24
leaq -0xc8(%rbp), %rdi
callq 0x57b8
leaq -0x368(%rbp), %rdi
callq 0x10c24
leaq -0xe8(%rbp), %rdi
callq 0x57b8
leaq -0x118(%rbp), %rdi
callq 0x200e8
leaq -0x550(%rbp), %rdi
callq 0x128f4
movq %rbx, %rdi
callq 0x56b0