// File: aalto-speech[P]ftk/test/emtest.cc
// Function: TransitionForwardBackwardTest6::test_method()
BOOST_AUTO_TEST_CASE(TransitionForwardBackwardTest6)
{
    transitions_t transitions;
    string str1("a"); string str2("b");
    string str3("c"); string str4("d");
    set<string> vocab = {start_end,str1,str2,str3,str4};
    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);
    transitions_t stats;
    flt_type lp = forward_backward(transitions, fg, stats);
    BOOST_CHECK_EQUAL(0, (int)stats.size());
    BOOST_CHECK_CLOSE( MIN_FLOAT, lp, DBL_ACCURACY );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4b0, %rsp            # imm = 0x4B0
movq %rdi, -0x8(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x4bd30
leaq -0x59(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0x67b0
movq -0x380(%rbp), %rdx
leaq 0x2b62e(%rip), %rsi     # 0xcbf14
leaq -0x58(%rbp), %rdi
callq 0x65e0
jmp 0xa08f1
leaq -0x59(%rbp), %rdi
callq 0x6470
leaq -0x91(%rbp), %rdi
movq %rdi, -0x388(%rbp)
callq 0x67b0
movq -0x388(%rbp), %rdx
leaq 0x2b2d6(%rip), %rsi     # 0xcbbf1
leaq -0x90(%rbp), %rdi
callq 0x65e0
jmp 0xa0929
leaq -0x91(%rbp), %rdi
callq 0x6470
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x390(%rbp)
callq 0x67b0
movq -0x390(%rbp), %rdx
leaq 0x2b28b(%rip), %rsi     # 0xcbbe1
leaq -0xb8(%rbp), %rdi
callq 0x65e0
jmp 0xa0964
leaq -0xb9(%rbp), %rdi
callq 0x6470
leaq -0xe1(%rbp), %rdi
movq %rdi, -0x398(%rbp)
callq 0x67b0
movq -0x398(%rbp), %rdx
leaq 0x2a680(%rip), %rsi     # 0xcb011
leaq -0xe0(%rbp), %rdi
callq 0x65e0
jmp 0xa099f
leaq -0xe1(%rbp), %rdi
callq 0x6470
leaq -0x1c8(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
leaq 0x66c78(%rip), %rsi     # 0x107638
callq 0x61c0
jmp 0xa09c7
leaq -0x1a8(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
leaq -0x58(%rbp), %rsi
callq 0x61c0
jmp 0xa09e0
leaq -0x188(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
leaq -0x90(%rbp), %rsi
callq 0x61c0
jmp 0xa09fc
leaq -0x168(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
leaq -0xb8(%rbp), %rsi
callq 0x61c0
jmp 0xa0a18
leaq -0x148(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
leaq -0xe0(%rbp), %rsi
callq 0x61c0
jmp 0xa0a34
leaq -0x1c8(%rbp), %rax
movq %rax, -0x128(%rbp)
movq $0x5, -0x120(%rbp)
leaq -0x1d2(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0xdab0
movq -0x3a0(%rbp), %r8
movq -0x128(%rbp), %rsi
movq -0x120(%rbp), %rdx
leaq -0x118(%rbp), %rdi
leaq -0x1d1(%rbp), %rcx
callq 0xbfde0
jmp 0xa0a8a
leaq -0x1d2(%rbp), %rdi
callq 0xdb50
leaq -0x1c8(%rbp), %rax
movq %rax, -0x3b0(%rbp)
addq $0xa0, %rax
movq %rax, -0x3a8(%rbp)
movq -0x3a8(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x3b8(%rbp)
callq 0x6908
movq -0x3b0(%rbp), %rcx
movq -0x3b8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x3a8(%rbp)
jne 0xa0ab1
leaq 0x66b4f(%rip), %rsi     # 0x107638
leaq -0x38(%rbp), %rdi
callq 0x4b980
movq %rax, -0x3c0(%rbp)
jmp 0xa0afb
movq -0x3c0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4b030
movq %rax, -0x3c8(%rbp)
jmp 0xa0b14
movq -0x3c8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x4b980
movq %rax, -0x3d0(%rbp)
jmp 0xa0b41
movq -0x3d0(%rbp), %rdi
leaq 0x66ae9(%rip), %rsi     # 0x107638
callq 0x4b030
movq %rax, -0x3d8(%rbp)
jmp 0xa0b5d
movq -0x3d8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4b980
movq %rax, -0x3e0(%rbp)
jmp 0xa0b87
movq -0x3e0(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x4b030
movq %rax, -0x3e8(%rbp)
jmp 0xa0ba3
movq -0x3e8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x4b980
movq %rax, -0x3f0(%rbp)
jmp 0xa0bd0
movq -0x3f0(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x4b030
movq %rax, -0x3f8(%rbp)
jmp 0xa0bec
movq -0x3f8(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x4b980
movq %rax, -0x400(%rbp)
jmp 0xa0c19
movq -0x400(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x4b030
movq %rax, -0x408(%rbp)
jmp 0xa0c35
movq -0x408(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x1f9(%rbp), %rdi
movq %rdi, -0x410(%rbp)
callq 0x67b0
movq -0x410(%rbp), %rdx
leaq 0x2afbd(%rip), %rsi     # 0xcbc27
leaq -0x1f8(%rbp), %rdi
callq 0x65e0
jmp 0xa0c78
leaq -0x1f9(%rbp), %rdi
callq 0x6470
leaq 0x669ad(%rip), %rdx     # 0x107638
leaq -0x278(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
leaq -0x118(%rbp), %rcx
movl $0x1, %r8d
xorl %r9d, %r9d
callq 0x239b0
jmp 0xa0cb0
leaq -0x2a8(%rbp), %rdi
movq %rdi, -0x420(%rbp)
callq 0x4bd30
movq -0x420(%rbp), %rdx
leaq -0x38(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x45f80
movsd %xmm0, -0x418(%rbp)
jmp 0xa0ce4
movsd -0x418(%rbp), %xmm0
movsd %xmm0, -0x2b0(%rbp)
movq 0x668f5(%rip), %rax     # 0x1075f0
movq %rax, -0x428(%rbp)
leaq 0x2ae5f(%rip), %rsi     # 0xcbb68
leaq -0x2c0(%rbp), %rdi
movl $0xe, %edx
callq 0x70bd0
jmp 0xa0d1c
leaq -0x2d0(%rbp), %rdi
callq 0x70c00
jmp 0xa0d2a
movq -0x428(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
movl $0x3b3, %edx            # imm = 0x3B3
leaq -0x2d0(%rbp), %rcx
callq 0x6840
jmp 0xa0d4b
callq 0x70e90
movq %rax, -0x430(%rbp)
jmp 0xa0d59
movq -0x430(%rbp), %rsi
leaq 0x2a5c3(%rip), %rdx     # 0xcb32a
leaq -0x2f8(%rbp), %rdi
callq 0x70e50
jmp 0xa0d75
leaq 0x2adec(%rip), %rsi     # 0xcbb68
leaq -0x308(%rbp), %rdi
movl $0xe, %edx
callq 0x70bd0
jmp 0xa0d8f
movl $0x0, -0x30c(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x34310
movl %eax, -0x310(%rbp)
leaq 0x2aebc(%rip), %rcx     # 0xcbc6e
movq %rsp, %rax
movq %rcx, 0x10(%rax)
leaq -0x310(%rbp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x2bc75(%rip), %rcx     # 0xcca40
movq %rcx, (%rax)
leaq -0x2f8(%rbp), %rdi
leaq -0x308(%rbp), %rsi
movl $0x3b3, %edx            # imm = 0x3B3
movl $0x1, %ecx
movl $0x2, %r8d
leaq -0x30c(%rbp), %r9
callq 0xbf480
jmp 0xa0dfa
leaq -0x2f8(%rbp), %rdi
callq 0x70ea0
callq 0x70ec0
movb %al, -0x431(%rbp)
jmp 0xa0e13
movb -0x431(%rbp), %al
testb $0x1, %al
jne 0xa0cf4
jmp 0xa0e23
jmp 0xa0e25
movq 0x667c4(%rip), %rax     # 0x1075f0
movq %rax, -0x440(%rbp)
leaq 0x2ad2e(%rip), %rsi     # 0xcbb68
leaq -0x320(%rbp), %rdi
movl $0xe, %edx
callq 0x70bd0
jmp 0xa0e4d
leaq -0x330(%rbp), %rdi
callq 0x70c00
jmp 0xa0e5b
movq -0x440(%rbp), %rdi
leaq -0x320(%rbp), %rsi
movl $0x3b4, %edx            # imm = 0x3B4
leaq -0x330(%rbp), %rcx
callq 0x6840
jmp 0xa0e7c
callq 0x70e90
movq %rax, -0x448(%rbp)
jmp 0xa0e8a
movq -0x448(%rbp), %rsi
leaq 0x2a492(%rip), %rdx     # 0xcb32a
leaq -0x358(%rbp), %rdi
callq 0x70e50
jmp 0xa0ea6
leaq 0x2acbb(%rip), %rsi     # 0xcbb68
leaq -0x368(%rbp), %rdi
movl $0xe, %edx
callq 0x70bd0
jmp 0xa0ec0
callq 0x4ae70
movaps 0x2a6f4(%rip), %xmm1    # 0xcb5c0
pxor %xmm1, %xmm0
movlpd %xmm0, -0x370(%rbp)
movsd 0x665d0(%rip), %xmm0    # 0x1074b0
callq 0xbf970
movsd %xmm0, -0x450(%rbp)
jmp 0xa0eef
movsd -0x450(%rbp), %xmm0
movsd %xmm0, -0x378(%rbp)
leaq 0x2addf(%rip), %rcx     # 0xcbce5
movq %rsp, %rax
movq %rcx, 0x20(%rax)
leaq -0x378(%rbp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x2b857(%rip), %rcx     # 0xcc776
movq %rcx, 0x10(%rax)
leaq -0x2b0(%rbp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x2ad4b(%rip), %rcx     # 0xcbc80
movq %rcx, (%rax)
leaq -0x358(%rbp), %rdi
leaq -0x368(%rbp), %rsi
movl $0x3b4, %edx            # imm = 0x3B4
movl $0x1, %ecx
movl $0x8, %r8d
leaq -0x370(%rbp), %r9
callq 0xbf6a0
jmp 0xa0f64
leaq -0x358(%rbp), %rdi
callq 0x70ea0
callq 0x70ec0
movb %al, -0x451(%rbp)
jmp 0xa0f7d
movb -0x451(%rbp), %al
testb $0x1, %al
jne 0xa0e25
jmp 0xa0f8d
leaq -0x2a8(%rbp), %rdi
callq 0x4bd50
leaq -0x278(%rbp), %rdi
callq 0x26180
leaq -0x1f8(%rbp), %rdi
callq 0x6908
leaq -0x118(%rbp), %rdi
callq 0x5c1b0
leaq -0xe0(%rbp), %rdi
callq 0x6908
leaq -0xb8(%rbp), %rdi
callq 0x6908
leaq -0x90(%rbp), %rdi
callq 0x6908
leaq -0x58(%rbp), %rdi
callq 0x6908
leaq -0x38(%rbp), %rdi
callq 0x4bd50
addq $0x4b0, %rsp            # imm = 0x4B0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x59(%rbp), %rdi
callq 0x6470
jmp 0xa1208
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x91(%rbp), %rdi
callq 0x6470
jmp 0xa11ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xb9(%rbp), %rdi
callq 0x6470
jmp 0xa11f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xe1(%rbp), %rdi
callq 0x6470
jmp 0xa11e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
movq -0x1d0(%rbp), %rax
leaq -0x1c8(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x460(%rbp)
je 0xa10c4
movq -0x460(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x468(%rbp)
callq 0x6908
movq -0x468(%rbp), %rax
leaq -0x1c8(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x460(%rbp)
jne 0xa1093
jmp 0xa11db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x1d2(%rbp), %rdi
callq 0xdb50
leaq -0x1c8(%rbp), %rax
movq %rax, -0x478(%rbp)
addq $0xa0, %rax
movq %rax, -0x470(%rbp)
movq -0x470(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x480(%rbp)
callq 0x6908
movq -0x478(%rbp), %rcx
movq -0x480(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x470(%rbp)
jne 0xa10fc
jmp 0xa11db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0xa11cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x1f9(%rbp), %rdi
callq 0x6470
jmp 0xa11cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0xa11c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0xa11ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x70ea0
jmp 0xa11ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x358(%rbp), %rdi
callq 0x70ea0
leaq -0x2a8(%rbp), %rdi
callq 0x4bd50
leaq -0x278(%rbp), %rdi
callq 0x26180
leaq -0x1f8(%rbp), %rdi
callq 0x6908
leaq -0x118(%rbp), %rdi
callq 0x5c1b0
leaq -0xe0(%rbp), %rdi
callq 0x6908
leaq -0xb8(%rbp), %rdi
callq 0x6908
leaq -0x90(%rbp), %rdi
callq 0x6908
leaq -0x58(%rbp), %rdi
callq 0x6908
leaq -0x38(%rbp), %rdi
callq 0x4bd50
movq -0x68(%rbp), %rdi
callq 0x67a0
nopw (%rax,%rax)