// File: aalto-speech[P]ftk/test/emtest.cc
// Function: TransitionViterbiTest6::test_method()
BOOST_AUTO_TEST_CASE(TransitionViterbiTest6)
{
    string str1("a"); string str2("b");
    string str3("c"); string str4("d");
    set<string> vocab = {start_end,str1,str2,str3,str4};

    transitions_t transitions;
    transitions[start_end][str1] = -1.0;
    transitions[str4][start_end] = -1.0;
    transitions[str1][str2] = -1.0;
    transitions[str2][str3] = -1.0;
    transitions[str3][str4] = -1.0;
    string sentence("a-bcd");
    FactorGraph fg(sentence, start_end, vocab, 1);
    vector<string> best_path;
    flt_type lp = viterbi(transitions, fg, best_path);
    BOOST_CHECK_EQUAL(0, (int)best_path.size());
    BOOST_CHECK_CLOSE( MIN_FLOAT, lp, DBL_ACCURACY );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4a0, %rsp            # imm = 0x4A0
movq %rdi, -0x8(%rbp)
leaq -0x29(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0x67b0
movq -0x368(%rbp), %rdx
leaq 0x35cc7(%rip), %rsi     # 0xcbf14
leaq -0x28(%rbp), %rdi
callq 0x65e0
jmp 0x96258
leaq -0x29(%rbp), %rdi
callq 0x6470
leaq -0x61(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0x67b0
movq -0x370(%rbp), %rdx
leaq 0x35972(%rip), %rsi     # 0xcbbf1
leaq -0x60(%rbp), %rdi
callq 0x65e0
jmp 0x9628a
leaq -0x61(%rbp), %rdi
callq 0x6470
leaq -0x89(%rbp), %rdi
movq %rdi, -0x378(%rbp)
callq 0x67b0
movq -0x378(%rbp), %rdx
leaq 0x3592d(%rip), %rsi     # 0xcbbe1
leaq -0x88(%rbp), %rdi
callq 0x65e0
jmp 0x962c2
leaq -0x89(%rbp), %rdi
callq 0x6470
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0x67b0
movq -0x380(%rbp), %rdx
leaq 0x34d22(%rip), %rsi     # 0xcb011
leaq -0xb0(%rbp), %rdi
callq 0x65e0
jmp 0x962fd
leaq -0xb1(%rbp), %rdi
callq 0x6470
leaq -0x198(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
leaq 0x7131a(%rip), %rsi     # 0x107638
callq 0x61c0
jmp 0x96325
leaq -0x178(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
leaq -0x28(%rbp), %rsi
callq 0x61c0
jmp 0x9633e
leaq -0x158(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
leaq -0x60(%rbp), %rsi
callq 0x61c0
jmp 0x96357
leaq -0x138(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
leaq -0x88(%rbp), %rsi
callq 0x61c0
jmp 0x96373
leaq -0x118(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
leaq -0xb0(%rbp), %rsi
callq 0x61c0
jmp 0x9638f
leaq -0x198(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq $0x5, -0xf0(%rbp)
leaq -0x1a2(%rbp), %rdi
movq %rdi, -0x388(%rbp)
callq 0xdab0
movq -0x388(%rbp), %r8
movq -0xf8(%rbp), %rsi
movq -0xf0(%rbp), %rdx
leaq -0xe8(%rbp), %rdi
leaq -0x1a1(%rbp), %rcx
callq 0xbfde0
jmp 0x963e5
leaq -0x1a2(%rbp), %rdi
callq 0xdb50
leaq -0x198(%rbp), %rax
movq %rax, -0x398(%rbp)
addq $0xa0, %rax
movq %rax, -0x390(%rbp)
movq -0x390(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x3a0(%rbp)
callq 0x6908
movq -0x398(%rbp), %rcx
movq -0x3a0(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x390(%rbp)
jne 0x9640c
leaq -0x1d8(%rbp), %rdi
movq %rdi, -0x3b0(%rbp)
callq 0x4bd30
movq -0x3b0(%rbp), %rdi
leaq 0x711da(%rip), %rsi     # 0x107638
callq 0x4b980
movq %rax, -0x3a8(%rbp)
jmp 0x9646c
movq -0x3a8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x4b030
movq %rax, -0x3b8(%rbp)
jmp 0x96485
movq -0x3b8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x1d8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x4b980
movq %rax, -0x3c0(%rbp)
jmp 0x964b5
movq -0x3c0(%rbp), %rdi
leaq 0x71175(%rip), %rsi     # 0x107638
callq 0x4b030
movq %rax, -0x3c8(%rbp)
jmp 0x964d1
movq -0x3c8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x1d8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x4b980
movq %rax, -0x3d0(%rbp)
jmp 0x964fe
movq -0x3d0(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x4b030
movq %rax, -0x3d8(%rbp)
jmp 0x96517
movq -0x3d8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x1d8(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x4b980
movq %rax, -0x3e0(%rbp)
jmp 0x96544
movq -0x3e0(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x4b030
movq %rax, -0x3e8(%rbp)
jmp 0x96560
movq -0x3e8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x1d8(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x4b980
movq %rax, -0x3f0(%rbp)
jmp 0x96590
movq -0x3f0(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x4b030
movq %rax, -0x3f8(%rbp)
jmp 0x965ac
movq -0x3f8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x1f9(%rbp), %rdi
movq %rdi, -0x400(%rbp)
callq 0x67b0
movq -0x400(%rbp), %rdx
leaq 0x35646(%rip), %rsi     # 0xcbc27
leaq -0x1f8(%rbp), %rdi
callq 0x65e0
jmp 0x965ef
leaq -0x1f9(%rbp), %rdi
callq 0x6470
leaq 0x71036(%rip), %rdx     # 0x107638
leaq -0x278(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
leaq -0xe8(%rbp), %rcx
movl $0x1, %r8d
xorl %r9d, %r9d
callq 0x239b0
jmp 0x96627
leaq -0x290(%rbp), %rdi
movq %rdi, -0x410(%rbp)
callq 0xc7d0
movq -0x410(%rbp), %rdx
leaq -0x1d8(%rbp), %rdi
leaq -0x278(%rbp), %rsi
movl $0x1, %ecx
callq 0x45140
movsd %xmm0, -0x408(%rbp)
jmp 0x96663
movsd -0x408(%rbp), %xmm0
movsd %xmm0, -0x298(%rbp)
movq 0x70f76(%rip), %rax     # 0x1075f0
movq %rax, -0x418(%rbp)
leaq 0x354e0(%rip), %rsi     # 0xcbb68
leaq -0x2a8(%rbp), %rdi
movl $0xe, %edx
callq 0x70bd0
jmp 0x9669b
leaq -0x2b8(%rbp), %rdi
callq 0x70c00
jmp 0x966a9
movq -0x418(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
movl $0x2df, %edx            # imm = 0x2DF
leaq -0x2b8(%rbp), %rcx
callq 0x6840
jmp 0x966ca
callq 0x70e90
movq %rax, -0x420(%rbp)
jmp 0x966d8
movq -0x420(%rbp), %rsi
leaq 0x34c44(%rip), %rdx     # 0xcb32a
leaq -0x2e0(%rbp), %rdi
callq 0x70e50
jmp 0x966f4
leaq 0x3546d(%rip), %rsi     # 0xcbb68
leaq -0x2f0(%rbp), %rdi
movl $0xe, %edx
callq 0x70bd0
jmp 0x9670e
movl $0x0, -0x2f4(%rbp)
leaq -0x290(%rbp), %rdi
callq 0xcba0
movl %eax, -0x2f8(%rbp)
leaq 0x359ac(%rip), %rcx     # 0xcc0dd
movq %rsp, %rax
movq %rcx, 0x10(%rax)
leaq -0x2f8(%rbp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x362f6(%rip), %rcx     # 0xcca40
movq %rcx, (%rax)
leaq -0x2e0(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
movl $0x2df, %edx            # imm = 0x2DF
movl $0x1, %ecx
movl $0x2, %r8d
leaq -0x2f4(%rbp), %r9
callq 0xbf480
jmp 0x96779
leaq -0x2e0(%rbp), %rdi
callq 0x70ea0
callq 0x70ec0
movb %al, -0x421(%rbp)
jmp 0x96792
movb -0x421(%rbp), %al
testb $0x1, %al
jne 0x96673
jmp 0x967a2
jmp 0x967a4
movq 0x70e45(%rip), %rax     # 0x1075f0
movq %rax, -0x430(%rbp)
leaq 0x353af(%rip), %rsi     # 0xcbb68
leaq -0x308(%rbp), %rdi
movl $0xe, %edx
callq 0x70bd0
jmp 0x967cc
leaq -0x318(%rbp), %rdi
callq 0x70c00
jmp 0x967da
movq -0x430(%rbp), %rdi
leaq -0x308(%rbp), %rsi
movl $0x2e0, %edx            # imm = 0x2E0
leaq -0x318(%rbp), %rcx
callq 0x6840
jmp 0x967fb
callq 0x70e90
movq %rax, -0x438(%rbp)
jmp 0x96809
movq -0x438(%rbp), %rsi
leaq 0x34b13(%rip), %rdx     # 0xcb32a
leaq -0x340(%rbp), %rdi
callq 0x70e50
jmp 0x96825
leaq 0x3533c(%rip), %rsi     # 0xcbb68
leaq -0x350(%rbp), %rdi
movl $0xe, %edx
callq 0x70bd0
jmp 0x9683f
callq 0x4ae70
movaps 0x34d75(%rip), %xmm1    # 0xcb5c0
pxor %xmm1, %xmm0
movlpd %xmm0, -0x358(%rbp)
movsd 0x70c51(%rip), %xmm0    # 0x1074b0
callq 0xbf970
movsd %xmm0, -0x440(%rbp)
jmp 0x9686e
movsd -0x440(%rbp), %xmm0
movsd %xmm0, -0x360(%rbp)
leaq 0x35460(%rip), %rcx     # 0xcbce5
movq %rsp, %rax
movq %rcx, 0x20(%rax)
leaq -0x360(%rbp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x35ed8(%rip), %rcx     # 0xcc776
movq %rcx, 0x10(%rax)
leaq -0x298(%rbp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x353cc(%rip), %rcx     # 0xcbc80
movq %rcx, (%rax)
leaq -0x340(%rbp), %rdi
leaq -0x350(%rbp), %rsi
movl $0x2e0, %edx            # imm = 0x2E0
movl $0x1, %ecx
movl $0x8, %r8d
leaq -0x358(%rbp), %r9
callq 0xbf6a0
jmp 0x968e3
leaq -0x340(%rbp), %rdi
callq 0x70ea0
callq 0x70ec0
movb %al, -0x441(%rbp)
jmp 0x968fc
movb -0x441(%rbp), %al
testb $0x1, %al
jne 0x967a4
jmp 0x9690c
leaq -0x290(%rbp), %rdi
callq 0xcfc0
leaq -0x278(%rbp), %rdi
callq 0x26180
leaq -0x1f8(%rbp), %rdi
callq 0x6908
leaq -0x1d8(%rbp), %rdi
callq 0x4bd50
leaq -0xe8(%rbp), %rdi
callq 0x5c1b0
leaq -0xb0(%rbp), %rdi
callq 0x6908
leaq -0x88(%rbp), %rdi
callq 0x6908
leaq -0x60(%rbp), %rdi
callq 0x6908
leaq -0x28(%rbp), %rdi
callq 0x6908
addq $0x4a0, %rsp            # imm = 0x4A0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x29(%rbp), %rdi
callq 0x6470
jmp 0x96b8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x61(%rbp), %rdi
callq 0x6470
jmp 0x96b84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x89(%rbp), %rdi
callq 0x6470
jmp 0x96b7b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xb1(%rbp), %rdi
callq 0x6470
jmp 0x96b6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movq -0x1a0(%rbp), %rax
leaq -0x198(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x450(%rbp)
je 0x96a40
movq -0x450(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x458(%rbp)
callq 0x6908
movq -0x458(%rbp), %rax
leaq -0x198(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x450(%rbp)
jne 0x96a0f
jmp 0x96b63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1a2(%rbp), %rdi
callq 0xdb50
leaq -0x198(%rbp), %rax
movq %rax, -0x468(%rbp)
addq $0xa0, %rax
movq %rax, -0x460(%rbp)
movq -0x460(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x470(%rbp)
callq 0x6908
movq -0x468(%rbp), %rcx
movq -0x470(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x460(%rbp)
jne 0x96a78
jmp 0x96b63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x96b4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1f9(%rbp), %rdi
callq 0x6470
jmp 0x96b4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x96b3f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x96b27
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x70ea0
jmp 0x96b27
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x70ea0
leaq -0x290(%rbp), %rdi
callq 0xcfc0
leaq -0x278(%rbp), %rdi
callq 0x26180
leaq -0x1f8(%rbp), %rdi
callq 0x6908
leaq -0x1d8(%rbp), %rdi
callq 0x4bd50
leaq -0xe8(%rbp), %rdi
callq 0x5c1b0
leaq -0xb0(%rbp), %rdi
callq 0x6908
leaq -0x88(%rbp), %rdi
callq 0x6908
leaq -0x60(%rbp), %rdi
callq 0x6908
leaq -0x28(%rbp), %rdi
callq 0x6908
movq -0x38(%rbp), %rdi
callq 0x67a0
nopw %cs:(%rax,%rax)