// File: /workspace/github_cpp_makefile_star2_O1/aalto-speech[P]ftk/test/emtest.cc
// Function: FactorGraphTest5::test_method()
BOOST_AUTO_TEST_CASE(FactorGraphTest5)
{
    map<std::string, flt_type> vocab;
    vocab.insert(make_pair("k", 0.0));
    vocab.insert(make_pair("ö", 0.0));
    vocab.insert(make_pair("kö", 0.0));
    vocab.insert(make_pair("kös", 0.0));
    vocab.insert(make_pair("�", 0.0));
    vocab.insert(make_pair("�", 0.0));
    vocab.insert(make_pair("s", 0.0));
    vocab.insert(make_pair("i", 0.0));
    vocab.insert(make_pair("si", 0.0));
    vocab.insert(make_pair("ssi", 0.0));

    FactorGraph fg("kössi", start_end, vocab, 3, true);
    BOOST_CHECK_EQUAL(11, (int)fg.nodes.size());

    StringSet ssvocab(vocab);
    FactorGraph ssfg("kössi", start_end, ssvocab, true);
    BOOST_CHECK(fg.assert_equal(ssfg));

    int node_idx = 0;
    assert_node(fg, node_idx++, start_end, 0, 3);
    assert_node(fg, node_idx++, std::string("k"), 1, 1);
    assert_node(fg, node_idx++, std::string("kö"), 1, 2);
    assert_node(fg, node_idx++, std::string("kös"), 1, 2);
    assert_node(fg, node_idx++, std::string("ö"), 1, 2);
    assert_node(fg, node_idx++, std::string("s"), 2, 2);
    assert_node(fg, node_idx++, std::string("ssi"), 2, 1);
    assert_node(fg, node_idx++, std::string("s"), 2, 1);
    assert_node(fg, node_idx++, std::string("si"), 2, 1);
    assert_node(fg, node_idx++, std::string("i"), 1, 1);
    assert_node(fg, node_idx++, start_end, 3, 0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2f8, %rsp            # imm = 0x2F8
leaq -0x70(%rbp), %rax
movl $0x0, (%rax)
xorl %ecx, %ecx
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x3057d(%rip), %rax     # 0x71ce4
leaq -0x250(%rbp), %rsi
movq %rax, (%rsi)
movq %rcx, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq 0x30763(%rip), %rax     # 0x71ee8
leaq -0x250(%rbp), %rsi
movq %rax, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq 0x30740(%rip), %rax     # 0x71ee7
leaq -0x250(%rbp), %rsi
movq %rax, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq 0x30722(%rip), %rax     # 0x71eeb
leaq -0x250(%rbp), %rsi
movq %rax, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq 0x30529(%rip), %rbx     # 0x71d14
leaq -0x250(%rbp), %rsi
movq %rbx, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq -0x250(%rbp), %rsi
movq %rbx, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq 0x2f7e6(%rip), %rax     # 0x7100e
leaq -0x250(%rbp), %rsi
movq %rax, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq 0x2ff92(%rip), %rax     # 0x717dc
leaq -0x250(%rbp), %rsi
movq %rax, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq 0x30688(%rip), %rax     # 0x71ef4
leaq -0x250(%rbp), %rsi
movq %rax, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq 0x30665(%rip), %rax     # 0x71ef3
leaq -0x250(%rbp), %rsi
movq %rax, (%rsi)
movq $0x0, 0x8(%rsi)
leaq -0x78(%rbp), %rdi
callq 0x6bdee
leaq -0x240(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x30635(%rip), %rsi     # 0x71ef0
leaq 0x30634(%rip), %rdx     # 0x71ef6
leaq -0x250(%rbp), %rdi
callq 0x95e2
leaq 0x49cc3(%rip), %rdx     # 0x8b598
leaq -0x120(%rbp), %rdi
leaq -0x250(%rbp), %rsi
leaq -0x78(%rbp), %rcx
movl $0x3, %r8d
movl $0x1, %r9d
callq 0x10f58
movq -0x250(%rbp), %rdi
cmpq %r15, %rdi
je 0x41909
callq 0x5380
movq 0x49c40(%rip), %rdi     # 0x8b550
leaq 0x302fb(%rip), %r12     # 0x71c12
leaq -0x2a0(%rbp), %rsi
movq %r12, (%rsi)
leaq 0x302f8(%rip), %r14     # 0x71c20
movq %r14, 0x8(%rsi)
leaq 0x3012c(%rip), %r15     # 0x71a5f
leaq -0x290(%rbp), %rcx
movq %r15, (%rcx)
movq %r15, 0x8(%rcx)
movl $0x1f7, %edx            # imm = 0x1F7
callq 0x5760
xorl %eax, %eax
leaq -0x48(%rbp), %rsi
movb %al, 0x8(%rsi)
leaq 0x49105(%rip), %rcx     # 0x8aa60
movq %rcx, (%rsi)
movq 0x4964b(%rip), %r13     # 0x8afb0
movq %r13, 0x10(%rsi)
leaq 0x2fa57(%rip), %rcx     # 0x713c7
movq %rcx, 0x18(%rsi)
leaq -0x98(%rbp), %rcx
movl $0xb, (%rcx)
movq -0xd8(%rbp), %rdx
subq -0xe0(%rbp), %rdx
shrq $0x3, %rdx
imull $0xb6db6db7, %edx, %edx # imm = 0xB6DB6DB7
leaq -0x94(%rbp), %r8
cmpl $0xb, %edx
leaq -0x90(%rbp), %rdi
sete (%rdi)
movl %edx, (%r8)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rdi)
leaq -0xa8(%rbp), %rbx
movq %r12, (%rbx)
movq %r14, 0x8(%rbx)
leaq -0x130(%rbp), %rdx
movq %rcx, (%rdx)
movb %al, -0x248(%rbp)
leaq 0x491fc(%rip), %rcx     # 0x8abd8
movq %rcx, -0x250(%rbp)
movq %r13, -0x240(%rbp)
movq %rdx, -0x238(%rbp)
leaq -0x128(%rbp), %rdx
movq %r8, (%rdx)
leaq -0x318(%rbp), %r10
movb %al, 0x8(%r10)
movq %rcx, (%r10)
movq %r13, 0x10(%r10)
movq %rdx, 0x18(%r10)
subq $0x8, %rsp
leaq 0x305a4(%rip), %r11     # 0x71fc0
leaq 0x30609(%rip), %r12     # 0x7202c
movl $0x1f7, %ecx            # imm = 0x1F7
movq %rbx, %rdx
movl $0x1, %r8d
movl $0x2, %r9d
xorl %eax, %eax
pushq %r10
pushq %r11
leaq -0x250(%rbp), %r10
pushq %r10
pushq %r12
pushq $0x2
callq 0x5740
addq $0x30, %rsp
leaq -0x80(%rbp), %rdi
callq 0x2e966
leaq -0x250(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xf588
leaq -0x38(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x30475(%rip), %rsi     # 0x71ef0
leaq 0x30474(%rip), %rdx     # 0x71ef6
leaq -0x48(%rbp), %rdi
callq 0x95e2
leaq 0x30180(%rip), %r12     # 0x71c12
leaq 0x49aff(%rip), %rdx     # 0x8b598
leaq -0x318(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0x250(%rbp), %rcx
movl $0x1, %r8d
callq 0x1127c
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41ac4
callq 0x5380
movq 0x49a85(%rip), %rdi     # 0x8b550
leaq -0x280(%rbp), %rsi
movq %r12, (%rsi)
leaq 0x30144(%rip), %rax     # 0x71c20
movq %rax, 0x8(%rsi)
leaq -0x270(%rbp), %rcx
movq %r15, (%rcx)
movq %r15, 0x8(%rcx)
movl $0x1fb, %edx            # imm = 0x1FB
callq 0x5760
leaq -0x120(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x12170
leaq -0x90(%rbp), %rdi
movb %al, (%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rdi)
leaq 0x304b3(%rip), %rax     # 0x71fd5
movq %rax, -0xa8(%rbp)
leaq 0x304ba(%rip), %rax     # 0x71fea
movq %rax, -0xa0(%rbp)
leaq -0x48(%rbp), %rsi
movb $0x0, 0x8(%rsi)
leaq 0x48fd2(%rip), %rax     # 0x8ab18
movq %rax, (%rsi)
movq %r13, 0x10(%rsi)
movq %rbx, 0x18(%rsi)
leaq -0x260(%rbp), %rdx
movq %r12, (%rdx)
leaq 0x300be(%rip), %rax     # 0x71c20
movq %rax, 0x8(%rdx)
subq $0x8, %rsp
movl $0x1fb, %ecx            # imm = 0x1FB
movl $0x1, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x5740
addq $0x10, %rsp
leaq -0x80(%rbp), %rdi
callq 0x2e966
leaq 0x49a03(%rip), %rdx     # 0x8b598
leaq -0x120(%rbp), %rdi
xorl %esi, %esi
xorl %ecx, %ecx
movl $0x3, %r8d
callq 0x3d96f
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x3012b(%rip), %rsi     # 0x71ce4
leaq 0x30125(%rip), %rdx     # 0x71ce5
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x1, %esi
movl $0x1, %ecx
movl $0x1, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41bf3
callq 0x5380
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x302e6(%rip), %rsi     # 0x71ee7
leaq 0x302e2(%rip), %rdx     # 0x71eea
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x2, %esi
movl $0x1, %ecx
movl $0x2, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41c3b
callq 0x5380
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x302a2(%rip), %rsi     # 0x71eeb
leaq 0x3029f(%rip), %rdx     # 0x71eef
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x3, %esi
movl $0x1, %ecx
movl $0x2, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41c83
callq 0x5380
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x30257(%rip), %rsi     # 0x71ee8
leaq 0x30252(%rip), %rdx     # 0x71eea
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x4, %esi
movl $0x1, %ecx
movl $0x2, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41ccb
callq 0x5380
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x2f335(%rip), %rsi     # 0x7100e
leaq 0x2f32f(%rip), %rdx     # 0x7100f
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x5, %esi
movl $0x2, %ecx
movl $0x2, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41d13
callq 0x5380
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x301d2(%rip), %rsi     # 0x71ef3
leaq 0x301ce(%rip), %rdx     # 0x71ef6
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x6, %esi
movl $0x2, %ecx
movl $0x1, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41d5b
callq 0x5380
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x2f2a5(%rip), %rsi     # 0x7100e
leaq 0x2f29f(%rip), %rdx     # 0x7100f
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x7, %esi
movl $0x2, %ecx
movl $0x1, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41da3
callq 0x5380
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x30143(%rip), %rsi     # 0x71ef4
leaq 0x3013e(%rip), %rdx     # 0x71ef6
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x8, %esi
movl $0x2, %ecx
movl $0x1, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41deb
callq 0x5380
leaq -0x48(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x2f9e3(%rip), %rsi     # 0x717dc
leaq 0x2f9dd(%rip), %rdx     # 0x717dd
callq 0x95e2
leaq -0x120(%rbp), %rdi
leaq -0x48(%rbp), %rdx
movl $0x9, %esi
movl $0x1, %ecx
movl $0x1, %r8d
callq 0x3d96f
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41e33
callq 0x5380
leaq 0x4975e(%rip), %rdx     # 0x8b598
leaq -0x120(%rbp), %rdi
movl $0xa, %esi
movl $0x3, %ecx
xorl %r8d, %r8d
callq 0x3d96f
leaq -0x318(%rbp), %rdi
callq 0x12c6c
leaq -0x250(%rbp), %rdi
callq 0xf8d4
leaq -0x120(%rbp), %rdi
callq 0x12c6c
leaq -0x78(%rbp), %rdi
callq 0x1e7f8
addq $0x2f8, %rsp            # imm = 0x2F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
jmp 0x41f5f
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
jmp 0x41f5f
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
jmp 0x41f5f
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
jmp 0x41f5f
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
jmp 0x41f5f
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
jmp 0x41f5f
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
jmp 0x41f5f
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
jmp 0x41f5f
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fd9
callq 0x5380
jmp 0x41fd9
jmp 0x41fd6
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
callq 0x2e966
jmp 0x41fd9
jmp 0x41fd6
jmp 0x41fd6
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r14, %rdi
je 0x41fe5
callq 0x5380
jmp 0x41fe5
movq %rax, %rbx
jmp 0x41fe5
jmp 0x41fa2
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
callq 0x2e966
jmp 0x41ff1
movq %rax, %rbx
jmp 0x41ff1
movq %rax, %rbx
movq -0x250(%rbp), %rdi
cmpq %r15, %rdi
je 0x41ffd
callq 0x5380
jmp 0x41ffd
jmp 0x41fd1
jmp 0x41fd1
jmp 0x41fd1
jmp 0x41fd1
jmp 0x41fd1
jmp 0x41fd1
jmp 0x41fd1
jmp 0x41fd1
jmp 0x41fd1
jmp 0x41fd1
movq %rax, %rbx
jmp 0x41ffd
movq %rax, %rbx
leaq -0x318(%rbp), %rdi
callq 0x12c6c
leaq -0x250(%rbp), %rdi
callq 0xf8d4
leaq -0x120(%rbp), %rdi
callq 0x12c6c
leaq -0x78(%rbp), %rdi
callq 0x1e7f8
movq %rbx, %rdi
callq 0x56f0