// File: /workspace/github_cpp_makefile_star2_O2/aalto-speech[P]ftk/test/msfgtest.cc
// Function: MultiStringFactorGraphTest2::test_method()
BOOST_AUTO_TEST_CASE(MultiStringFactorGraphTest2)
{
    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, false);
    BOOST_CHECK_EQUAL( 1, (int)msfg.string_end_nodes.size() );
    BOOST_CHECK_EQUAL( 7, (int)msfg.num_paths(sentence) );
    msfg.add(fg2, false);
    BOOST_CHECK_EQUAL( 2, (int)msfg.string_end_nodes.size() );
    BOOST_CHECK_EQUAL( 7, msfg.num_paths(sentence2) );
    msfg.add(fg3, false);
    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 0x1f8a3(%rip), %rsi     # 0x705d8
leaq -0x550(%rbp), %rdi
callq 0x4ee8c
leaq 0x2f0a(%rip), %rsi      # 0x53c52
leaq -0x368(%rbp), %r14
leaq -0x458(%rbp), %rdx
movq %r14, %rdi
callq 0x5160
leaq -0x348(%rbp), %r15
leaq 0x29fc(%rip), %rsi      # 0x53768
leaq -0x3e0(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x328(%rbp), %r15
leaq 0x2285(%rip), %rsi      # 0x5300e
leaq -0xe8(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x308(%rbp), %r15
leaq 0x3186(%rip), %rsi      # 0x53f2c
leaq -0xc8(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x2e8(%rbp), %r15
leaq 0x39fd(%rip), %rsi      # 0x547c0
leaq -0xa8(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x2c8(%rbp), %r15
leaq 0x2fa4(%rip), %rsi      # 0x53d84
leaq -0x58(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x2a8(%rbp), %r15
leaq 0x2f8d(%rip), %rsi      # 0x53d87
leaq -0x30(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x288(%rbp), %r15
leaq 0x2e40(%rip), %rsi      # 0x53c54
leaq -0x2c(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x268(%rbp), %r15
leaq 0x402d(%rip), %rsi      # 0x54e5b
leaq -0x35(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x248(%rbp), %r15
leaq 0x401f(%rip), %rsi      # 0x54e67
leaq -0x34(%rbp), %rdx
movq %r15, %rdi
callq 0x5160
leaq -0x228(%rbp), %r15
leaq 0x400e(%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 0x50e91
leaq 0x2da2(%rip), %rsi      # 0x53c54
leaq -0xe8(%rbp), %rdi
leaq -0x368(%rbp), %rdx
callq 0x5160
leaq 0x1f70c(%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 0x3f6b(%rip), %rsi      # 0x54e5f
leaq -0xc8(%rbp), %rdi
leaq -0x458(%rbp), %rdx
callq 0x5160
leaq 0x1f6ca(%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 0x3f35(%rip), %rsi      # 0x54e6b
leaq -0xa8(%rbp), %rdi
leaq -0x3e0(%rbp), %rdx
callq 0x5160
leaq 0x1f688(%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
xorl %edx, %edx
callq 0x129ea
movq 0x1f63b(%rip), %rdi     # 0x705c8
leaq 0x3eb6(%rip), %r14      # 0x54e4a
leaq -0x208(%rbp), %rsi
movq %r14, (%rsi)
leaq 0x3eb5(%rip), %r15      # 0x54e5a
movq %r15, 0x8(%rsi)
leaq 0x2a65(%rip), %r12      # 0x53a15
leaq -0x1f8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
pushq $0x2b
popq %rdx
callq 0x5710
leaq -0x58(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x1eb0b(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq 0x1efd1(%rip), %rbx     # 0x6ffb0
movq %rbx, 0x10(%rdi)
leaq 0x236d(%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 0x3e5a(%rip), %r10      # 0x54e75
leaq 0x2f79(%rip), %rax      # 0x53f9b
pushq $0x2b
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 0x1f583(%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 $0x2c
popq %rdx
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x1ea6c(%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 0x3de4(%rip), %rax      # 0x54e97
leaq 0x349e(%rip), %r10      # 0x54558
leaq -0x58(%rbp), %rdi
leaq -0x88(%rbp), %rsi
pushq $0x2c
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
xorl %edx, %edx
callq 0x129ea
movq 0x1f4c8(%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 $0x2e
popq %rdx
callq 0x5710
leaq -0x58(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x1e9ad(%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 0x3543(%rip), %rax      # 0x546ae
pushq $0x2e
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq 0x3cf9(%rip), %r10      # 0x54e75
pushq %r10
leaq -0x2c(%rbp), %r10
pushq %r10
pushq %rax
callq 0x4ea09
addq $0x20, %rsp
movq 0x1f433(%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 $0x2f
popq %rdx
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x1e91c(%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 0x3cb5(%rip), %rax      # 0x54eb5
leaq -0x58(%rbp), %rdi
leaq -0x78(%rbp), %rsi
pushq $0x2f
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq -0x30(%rbp), %r9
pushq %rax
leaq -0x2c(%rbp), %rax
pushq %rax
leaq 0x3335(%rip), %rax      # 0x54558
pushq %rax
callq 0x4ea09
addq $0x20, %rsp
leaq -0x550(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
xorl %edx, %edx
callq 0x129ea
movq 0x1f37f(%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 $0x31
popq %rdx
callq 0x5710
leaq -0x58(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x1e864(%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 0x2cd3(%rip), %rax      # 0x53f87
pushq $0x31
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq 0x3bb0(%rip), %r10      # 0x54e75
pushq %r10
leaq -0x2c(%rbp), %r10
pushq %r10
pushq %rax
callq 0x4ea09
addq $0x20, %rsp
movq 0x1f2ea(%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 $0x32
popq %rdx
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x1e7d3(%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 0x3b86(%rip), %rax      # 0x54ecf
leaq -0x58(%rbp), %rdi
leaq -0x68(%rbp), %rsi
pushq $0x32
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
leaq -0x30(%rbp), %r9
pushq %rax
leaq -0x2c(%rbp), %rax
pushq %rax
leaq 0x31ec(%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 0x51491
jmp 0x51491
jmp 0x51491
movq %rax, %rbx
jmp 0x514a0
movq %rax, %rbx
jmp 0x514ac
movq %rax, %rbx
jmp 0x514b8
movq %rax, %rbx
jmp 0x514c4
movq %rax, %rbx
jmp 0x514d0
movq %rax, %rbx
jmp 0x514dc
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 0x51430
movb $0x1, %al
jmp 0x51465
jmp 0x51460
jmp 0x51460
jmp 0x51460
jmp 0x51460
jmp 0x51460
jmp 0x51460
jmp 0x51460
jmp 0x51460
jmp 0x51460
movq %rax, %rbx
xorl %eax, %eax
cmpq %r15, %r14
sete %cl
testb %al, %al
jne 0x514e8
testb %cl, %cl
jne 0x514e8
addq $-0x20, %r15
movq %r15, %rdi
callq 0x57b8
cmpq %r14, %r15
jne 0x51473
jmp 0x514e8
movq %rax, %rbx
jmp 0x514e8
jmp 0x51491
jmp 0x51491
jmp 0x51491
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