// File: /workspace/github_cpp_makefile_star2_O2/aalto-speech[P]ftk/test/emtest.cc
// Function: FactorGraphTest4::test_method()
BOOST_AUTO_TEST_CASE(FactorGraphTest4)
{
    map<std::string, flt_type> vocab;
    vocab.insert(make_pair("k", 0.0));
    vocab.insert(make_pair("a", 0.0));
    vocab.insert(make_pair("u", 0.0));
    vocab.insert(make_pair("p", 0.0));
    vocab.insert(make_pair("n", 0.0));
    vocab.insert(make_pair("g", 0.0));
    vocab.insert(make_pair("i", 0.0));
    vocab.insert(make_pair("s", 0.0));
    vocab.insert(make_pair("t", 0.0));
    vocab.insert(make_pair("m", 0.0));
    vocab.insert(make_pair("e", 0.0));
    vocab.insert(make_pair("kaupun", 0.0));
    vocab.insert(make_pair("gis", 0.0));
    vocab.insert(make_pair("gistu", 0.0));
    vocab.insert(make_pair("minen", 0.0));
    vocab.insert(make_pair("kau", 0.0));

    FactorGraph fg("kaupungistuminen", start_end, vocab, 6);
    BOOST_CHECK_EQUAL(23, (int)fg.nodes.size());

    StringSet ssvocab(vocab);
    FactorGraph ssfg("kaupungistuminen", start_end, ssvocab);
    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("kau"), 1, 1);
    assert_node(fg, node_idx++, std::string("kaupun"), 1, 3);
    assert_node(fg, node_idx++, std::string("a"), 1, 1);
    assert_node(fg, node_idx++, std::string("u"), 1, 1);
    assert_node(fg, node_idx++, std::string("p"), 2, 1);
    assert_node(fg, node_idx++, std::string("u"), 1, 1);
    assert_node(fg, node_idx++, std::string("n"), 1, 3);
    assert_node(fg, node_idx++, std::string("g"), 2, 1);
    assert_node(fg, node_idx++, std::string("gis"), 2, 1);
    assert_node(fg, node_idx++, std::string("gistu"), 2, 2);
    assert_node(fg, node_idx++, std::string("i"), 1, 1);
    assert_node(fg, node_idx++, std::string("s"), 1, 1);
    assert_node(fg, node_idx++, std::string("t"), 2, 1);
    assert_node(fg, node_idx++, std::string("u"), 1, 2);
    assert_node(fg, node_idx++, std::string("m"), 2, 1);
    assert_node(fg, node_idx++, std::string("minen"), 2, 1);
    assert_node(fg, node_idx++, std::string("i"), 1, 1);
    assert_node(fg, node_idx++, std::string("n"), 1, 1);
    assert_node(fg, node_idx++, std::string("e"), 1, 1);
    assert_node(fg, node_idx++, std::string("n"), 1, 1);
    assert_node(fg, node_idx++, start_end, 2, 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 0x2039a(%rip), %rax     # 0x53c52
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x20652(%rip), %rax     # 0x53f2c
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f71c(%rip), %rax     # 0x53018
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1ff2c(%rip), %rax     # 0x5384a
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x21607(%rip), %rax     # 0x54f47
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f741(%rip), %rax     # 0x530a3
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1fde4(%rip), %rax     # 0x53768
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f668(%rip), %rax     # 0x5300e
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1fbf3(%rip), %rax     # 0x535bb
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1f987(%rip), %rax     # 0x53371
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x1fe26(%rip), %rax     # 0x53832
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x20532(%rip), %rax     # 0x53f60
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x20517(%rip), %rax     # 0x53f67
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x204f9(%rip), %rax     # 0x53f6b
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x204ec(%rip), %rax     # 0x53f80
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x204bb(%rip), %rax     # 0x53f71
leaq -0x220(%rbp), %rsi
movq %rax, (%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x88(%rbp), %rdi
callq 0x4f7f4
leaq 0x2049d(%rip), %rsi     # 0x53f75
leaq -0x220(%rbp), %rdi
leaq -0x308(%rbp), %rdx
callq 0x5160
leaq 0x3ca96(%rip), %rdx     # 0x70588
leaq -0x100(%rbp), %rdi
leaq -0x220(%rbp), %rsi
leaq -0x88(%rbp), %rcx
pushq $0x6
popq %r8
xorl %r9d, %r9d
callq 0xf5e4
leaq -0x220(%rbp), %rdi
callq 0x57b8
movq 0x3ca1a(%rip), %rdi     # 0x70540
leaq 0x20053(%rip), %rbx     # 0x53b80
leaq -0x290(%rbp), %rsi
movq %rbx, (%rsi)
leaq 0x20050(%rip), %r14     # 0x53b8e
movq %r14, 0x8(%rsi)
leaq 0x1fecc(%rip), %r12     # 0x53a15
leaq -0x280(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x1c5, %edx            # imm = 0x1C5
callq 0x5710
leaq -0x220(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x3bf6d(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq 0x3c433(%rip), %r15     # 0x6ffb0
movq %r15, 0x10(%rdi)
leaq 0x1f7cf(%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 $0x17, (%r9)
pushq $0x38
popq %rcx
cqto
idivq %rcx
leaq -0x40(%rbp), %rcx
movl %eax, (%rcx)
leaq 0x20363(%rip), %rax     # 0x53f2e
movq %rax, 0x10(%rsp)
movq %rcx, 0x8(%rsp)
leaq 0x203aa(%rip), %rax     # 0x53f86
movq %rax, (%rsp)
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
movl $0x1c5, %edx            # imm = 0x1C5
callq 0x4ea09
leaq -0x220(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0xdbec
leaq 0x2036a(%rip), %rsi     # 0x53f75
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq 0x3c969(%rip), %rdx     # 0x70588
leaq -0x308(%rbp), %rdi
leaq -0x40(%rbp), %rsi
leaq -0x220(%rbp), %rcx
xorl %r8d, %r8d
callq 0xf8a0
leaq -0x40(%rbp), %rdi
callq 0x57b8
movq 0x3c8f7(%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 $0x1c9, %edx            # imm = 0x1C9
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 0x202ad(%rip), %rax     # 0x53f43
leaq -0x240(%rbp), %rcx
movq %rax, (%rcx)
leaq 0x202b1(%rip), %rax     # 0x53f58
movq %rax, 0x8(%rcx)
leaq -0x40(%rbp), %rsi
movb $0x0, 0x8(%rsi)
leaq 0x3beb6(%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 $0x1c9, %ecx            # imm = 0x1C9
xorl %r9d, %r9d
xorl %eax, %eax
callq 0x56f0
leaq -0x48(%rbp), %rdi
callq 0x291f6
leaq 0x3c88d(%rip), %rdx     # 0x70588
leaq -0x100(%rbp), %rdi
pushq $0x3
popq %r8
xorl %esi, %esi
xorl %ecx, %ecx
callq 0x31e6e
leaq 0x1ff3c(%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 0x20226(%rip), %rsi     # 0x53f71
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x2
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x201df(%rip), %rsi     # 0x53f60
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
pushq $0x3
popq %rsi
movl %esi, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x20175(%rip), %rsi     # 0x53f2c
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
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f22b(%rip), %rsi     # 0x53018
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x5
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1fa27(%rip), %rsi     # 0x5384a
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 0x1f1be(%rip), %rsi     # 0x53018
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x7
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x210b7(%rip), %rsi     # 0x54f47
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x8
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
pushq $0x3
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f1dc(%rip), %rsi     # 0x530a3
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x9
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
pushq $0x1
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x20069(%rip), %rsi     # 0x53f67
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0xa
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
pushq $0x1
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x20036(%rip), %rsi     # 0x53f6b
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0xb
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f7fd(%rip), %rsi     # 0x53768
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0xc
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f06d(%rip), %rsi     # 0x5300e
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0xd
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f5e4(%rip), %rsi     # 0x535bb
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0xe
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
pushq $0x1
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f00a(%rip), %rsi     # 0x53018
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0xf
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f32c(%rip), %rsi     # 0x53371
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x10
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
pushq $0x1
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1ff04(%rip), %rsi     # 0x53f80
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x11
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x2
popq %rcx
pushq $0x1
popq %r8
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f6b5(%rip), %rsi     # 0x53768
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x12
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x20e5e(%rip), %rsi     # 0x54f47
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x13
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x1f713(%rip), %rsi     # 0x53832
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x14
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x20df2(%rip), %rsi     # 0x54f47
leaq -0x40(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
pushq $0x15
popq %rsi
leaq -0x40(%rbp), %rdx
pushq $0x1
popq %rcx
movl %ecx, %r8d
callq 0x31e6e
leaq -0x40(%rbp), %rdi
callq 0x57b8
leaq 0x3c3fd(%rip), %rdx     # 0x70588
leaq -0x100(%rbp), %rdi
pushq $0x16
popq %rsi
pushq $0x2
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 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
jmp 0x34266
jmp 0x342da
movq %rax, %rbx
leaq -0x40(%rbp), %rdi
callq 0x57b8
jmp 0x342dd
jmp 0x342da
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
callq 0x291f6
jmp 0x342dd
jmp 0x342da
jmp 0x342da
movq %rax, %rbx
leaq -0x40(%rbp), %rdi
callq 0x57b8
jmp 0x342e9
movq %rax, %rbx
jmp 0x342e9
jmp 0x3429f
jmp 0x3429f
movq %rax, %rbx
jmp 0x342f5
movq %rax, %rbx
leaq -0x220(%rbp), %rdi
callq 0x57b8
jmp 0x34301
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
jmp 0x342d5
movq %rax, %rbx
jmp 0x34301
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