// File: /workspace/github_cpp_makefile_star2_O2/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 %r12
pushq %rbx
subq $0x300, %rsp            # imm = 0x300
leaq -0x80(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x1f5c6(%rip), %rax     # 0x53c52
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f7a8(%rip), %rax     # 0x53e56
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f785(%rip), %rax     # 0x53e55
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f767(%rip), %rax     # 0x53e59
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f56e(%rip), %rbx     # 0x53c82
leaq -0x220(%rbp), %rsi
movq %rbx, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq -0x220(%rbp), %rsi
movq %rbx, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1e8bd(%rip), %rax     # 0x5300e
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1eff5(%rip), %rax     # 0x53768
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f6cd(%rip), %rax     # 0x53e62
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f6aa(%rip), %rax     # 0x53e61
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f685(%rip), %rsi     # 0x53e5e
leaq -0x220(%rbp), %rdi
leaq -0x308(%rbp), %rdx
callq 0x5160
leaq 0x3bd95(%rip), %rdx     # 0x70588
leaq -0x100(%rbp), %rdi
leaq -0x220(%rbp), %rsi
leaq -0x88(%rbp), %rcx
pushq $0x3
popq %r8
pushq $0x1
popq %r9
callq 0xf5e4
leaq -0x220(%rbp), %rdi
callq 0x57b8
movq 0x3bd18(%rip), %rdi     # 0x70540
leaq 0x1f351(%rip), %rbx     # 0x53b80
leaq -0x290(%rbp), %rsi
movq %rbx, (%rsi)
leaq 0x1f34e(%rip), %r14     # 0x53b8e
movq %r14, 0x8(%rsi)
leaq 0x1f1ca(%rip), %r12     # 0x53a15
leaq -0x280(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x1f7, %edx            # imm = 0x1F7
callq 0x5710
leaq -0x220(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x3b26b(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq 0x3b731(%rip), %r15     # 0x6ffb0
movq %r15, 0x10(%rdi)
leaq 0x1eacd(%rip), %rax     # 0x53357
movq %rax, 0x18(%rdi)
leaq -0x270(%rbp), %rsi
movq %rbx, (%rsi)
movq %r14, 0x8(%rsi)
leaq -0x308(%rbp), %r9
movq -0xb8(%rbp), %rax
subq -0xc0(%rbp), %rax
movl $0xb, (%r9)
pushq $0x38
popq %rcx
cqto
idivq %rcx
leaq -0x40(%rbp), %rcx
movl %eax, (%rcx)
leaq 0x1f661(%rip), %rax     # 0x53f2e
movq %rax, 0x10(%rsp)
movq %rcx, 0x8(%rsp)
leaq 0x1f6bc(%rip), %rax     # 0x53f9a
movq %rax, (%rsp)
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
movl $0x1f7, %edx            # imm = 0x1F7
callq 0x4ea09
leaq -0x220(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0xdbec
leaq 0x1f551(%rip), %rsi     # 0x53e5e
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq 0x3bc67(%rip), %rdx     # 0x70588
leaq -0x308(%rbp), %rdi
leaq -0x40(%rbp), %rsi
leaq -0x220(%rbp), %rcx
pushq $0x1
popq %r8
callq 0xf8a0
leaq -0x40(%rbp), %rdi
callq 0x57b8
movq 0x3bbf4(%rip), %rdi     # 0x70540
leaq -0x260(%rbp), %rsi
movq %rbx, (%rsi)
movq %r14, 0x8(%rsi)
leaq -0x250(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x1fb, %edx            # imm = 0x1FB
callq 0x5710
leaq -0x100(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0x1043c
leaq -0x58(%rbp), %rdi
movb %al, (%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rdi)
leaq 0x1f5aa(%rip), %rax     # 0x53f43
leaq -0x240(%rbp), %rcx
movq %rax, (%rcx)
leaq 0x1f5ae(%rip), %rax     # 0x53f58
movq %rax, 0x8(%rcx)
leaq -0x40(%rbp), %rsi
movb $0x0, 0x8(%rsi)
leaq 0x3b1b3(%rip), %rax     # 0x6fb70
movq %rax, (%rsi)
movq %r15, 0x10(%rsi)
movq %rcx, 0x18(%rsi)
leaq -0x230(%rbp), %rdx
movq %rbx, (%rdx)
movq %r14, 0x8(%rdx)
andq $0x0, (%rsp)
pushq $0x1
popq %r8
movl $0x1fb, %ecx            # imm = 0x1FB
xorl %r9d, %r9d
xorl %eax, %eax
callq 0x56f0
leaq -0x48(%rbp), %rdi
callq 0x291f6
leaq 0x3bb8a(%rip), %rdx     # 0x70588
leaq -0x100(%rbp), %rdi
pushq $0x3
popq %r8
xorl %esi, %esi
xorl %ecx, %ecx
callq 0x31e6e
leaq 0x1f239(%rip), %rsi     # 0x53c52
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %esi
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f407(%rip), %rsi     # 0x53e55
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %rsi
movl %esi, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f3d5(%rip), %rsi     # 0x53e59
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x3
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f39b(%rip), %rsi     # 0x53e56
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x4
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1e51c(%rip), %rsi     # 0x5300e
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x5
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f339(%rip), %rsi     # 0x53e61
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x6
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
pushq $0x1
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1e4af(%rip), %rsi     # 0x5300e
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x7
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
pushq $0x1
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f2cc(%rip), %rsi     # 0x53e62
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x8
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
pushq $0x1
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1eb9b(%rip), %rsi     # 0x53768
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x9
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x3b985(%rip), %rdx     # 0x70588
leaq -0x100(%rbp), %rdi
pushq $0xa
popq %rsi
pushq $0x3
popq %rcx
xorl %r8d, %r8d
callq 0x31e6e
leaq -0x308(%rbp), %rdi
callq 0x10c24
leaq -0x220(%rbp), %rdi
callq 0xdea0
leaq -0x100(%rbp), %rdi
callq 0x10c24
leaq -0x88(%rbp), %rdi
callq 0x1bba4
addq $0x300, %rsp            # imm = 0x300
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x34c7e
jmp 0x34ce6
jmp 0x34c7e
jmp 0x34ce6
jmp 0x34c7e
jmp 0x34ce6
jmp 0x34c7e
jmp 0x34ce6
jmp 0x34c7e
jmp 0x34ce6
jmp 0x34c7e
jmp 0x34ce6
jmp 0x34c7e
jmp 0x34ce6
jmp 0x34c7e
jmp 0x34ce6
movq %rax, %rbx
leaq -0x40(%rbp), %rdi
callq 0x57b8
jmp 0x34ce9
jmp 0x34ce6
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
callq 0x291f6
jmp 0x34ce9
jmp 0x34ce6
jmp 0x34ce6
movq %rax, %rbx
leaq -0x40(%rbp), %rdi
callq 0x57b8
jmp 0x34cf5
movq %rax, %rbx
jmp 0x34cf5
jmp 0x34cb7
jmp 0x34cb7
movq %rax, %rbx
jmp 0x34d01
movq %rax, %rbx
leaq -0x220(%rbp), %rdi
callq 0x57b8
jmp 0x34d0d
jmp 0x34ce1
jmp 0x34ce1
jmp 0x34ce1
jmp 0x34ce1
jmp 0x34ce1
jmp 0x34ce1
jmp 0x34ce1
jmp 0x34ce1
jmp 0x34ce1
jmp 0x34ce1
movq %rax, %rbx
jmp 0x34d0d
movq %rax, %rbx
leaq -0x308(%rbp), %rdi
callq 0x10c24
leaq -0x220(%rbp), %rdi
callq 0xdea0
leaq -0x100(%rbp), %rdi
callq 0x10c24
leaq -0x88(%rbp), %rdi
callq 0x1bba4
movq %rbx, %rdi
callq 0x56b0