// File: /workspace/github_cpp_makefile_star2_O2/aalto-speech[P]ftk/test/emtest.cc
// Function: ForwardBackwardTest9::test_method()
BOOST_AUTO_TEST_CASE(ForwardBackwardTest9)
{
    map<string, flt_type> vocab;
    vocab["i"] = log(0.25);
    vocab["si"] = log(0.25);
    vocab["s"] = log(0.25);
    vocab["kö"] = log(0.50);
    vocab["kös"] = log(0.50);
    vocab["kössi"] = log(0.1953125);
    vocab["k"] = log(0.00000000001);
    vocab["�"] = log(0.00000000001);
    vocab["�"] = log(0.00000000001);
    string sentence("kössi");
    map<string, flt_type> stats;
    flt_type lp = forward_backward(vocab, sentence, stats, true);
    BOOST_CHECK_EQUAL(6, (int)stats.size());
    BOOST_CHECK_CLOSE( 0.5, stats["kössi"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( 0.80/2.0, stats["kös"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( 0.20/2.0, stats["kö"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( 0.8/2.0, stats["si"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( (0.2+0.2)/2.0, stats["s"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( 0.2/2.0, stats["i"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( (flt_type)-0.940007258491, lp, DBL_ACCURACY);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
leaq -0xf8(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x223dd(%rip), %rsi     # 0x53768
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movabsq $-0x4009d1bd0105c611, %rbx # imm = 0xBFF62E42FEFA39EF
movq %rbx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x22a91(%rip), %rsi     # 0x53e62
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movq %rbx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x21c01(%rip), %rsi     # 0x5300e
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movq %rbx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x22a0c(%rip), %rsi     # 0x53e55
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movabsq $-0x4019d1bd0105c611, %rbx # imm = 0xBFE62E42FEFA39EF
movq %rbx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x229ca(%rip), %rsi     # 0x53e59
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movq %rbx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x22993(%rip), %rsi     # 0x53e5e
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movabsq $-0x4005de99736f4fa2, %rcx # imm = 0xBFFA21668C90B05E
movq %rcx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x22741(%rip), %rsi     # 0x53c52
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movabsq $-0x3fc6abeb9de6ab02, %rbx # imm = 0xC0395414621954FE
movq %rbx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x2272b(%rip), %rsi     # 0x53c82
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movq %rbx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x226ef(%rip), %rsi     # 0x53c82
leaq -0x88(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x100(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1b3d2
movq %rbx, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x57b8
leaq 0x2288f(%rip), %rsi     # 0x53e5e
leaq -0xd0(%rbp), %rdi
leaq -0x88(%rbp), %rdx
callq 0x5160
leaq -0x80(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x100(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0x88(%rbp), %rdx
pushq $0x1
popq %rcx
callq 0x184bb
movsd %xmm0, -0x108(%rbp)
movq 0x3ef19(%rip), %rdi     # 0x70540
leaq 0x22552(%rip), %rbx     # 0x53b80
leaq -0x288(%rbp), %rsi
movq %rbx, (%rsi)
leaq 0x2254f(%rip), %r15     # 0x53b8e
movq %r15, 0x8(%rsi)
leaq 0x223cb(%rip), %r12     # 0x53a15
leaq -0x278(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x15d, %edx            # imm = 0x15D
callq 0x5710
leaq -0x58(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x3e46f(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq 0x3e935(%rip), %rax     # 0x6ffb0
movq %rax, 0x10(%rdi)
leaq 0x21cd1(%rip), %rax     # 0x53357
movq %rax, 0x18(%rdi)
leaq -0x268(%rbp), %rsi
movq %rbx, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0xa8(%rbp), %r9
movl $0x6, (%r9)
movl -0x60(%rbp), %eax
leaq -0x38(%rbp), %r10
movl %eax, (%r10)
subq $0x8, %rsp
leaq 0x225cb(%rip), %rax     # 0x53c86
leaq 0x23013(%rip), %r11     # 0x546d5
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
movl $0x15d, %edx            # imm = 0x15D
pushq %rax
pushq %r10
pushq %r11
callq 0x4ea09
addq $0x20, %rsp
movq 0x3ee5d(%rip), %rdi     # 0x70540
leaq -0x258(%rbp), %rsi
movq %rbx, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x248(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x15e, %edx            # imm = 0x15E
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x3e3cc(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq 0x3e891(%rip), %rax     # 0x6ffb0
movq %rax, -0x48(%rbp)
leaq 0x21c2d(%rip), %rax     # 0x53357
movq %rax, -0x40(%rbp)
movq %rbx, -0x168(%rbp)
movq %r15, -0x160(%rbp)
movabsq $0x3fe0000000000000, %rax # imm = 0x3FE0000000000000
movq %rax, -0x38(%rbp)
leaq 0x2270d(%rip), %rsi     # 0x53e5e
leaq -0xa8(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x1b3d2
movsd 0x3ec84(%rip), %xmm0    # 0x70400
leaq -0xb0(%rbp), %r13
movsd %xmm0, (%r13)
subq $0x8, %rsp
leaq 0x22569(%rip), %rbx     # 0x53cfd
leaq 0x226ca(%rip), %r10     # 0x53e65
leaq 0x22641(%rip), %r11     # 0x53de3
leaq -0x58(%rbp), %rdi
leaq -0x168(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x15e, %edx            # imm = 0x15E
pushq %rbx
pushq %r13
pushq %r10
pushq %rax
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0xa8(%rbp), %rdi
callq 0x57b8
movq 0x3ed5f(%rip), %rdi     # 0x70540
leaq -0x238(%rbp), %rsi
leaq 0x22391(%rip), %rbx     # 0x53b80
movq %rbx, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x228(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x15f, %edx            # imm = 0x15F
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x3e2c7(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq 0x3e78c(%rip), %rax     # 0x6ffb0
movq %rax, -0x48(%rbp)
leaq 0x21b28(%rip), %rax     # 0x53357
movq %rax, -0x40(%rbp)
movq %rbx, -0x158(%rbp)
movq %r15, -0x150(%rbp)
movabsq $0x3fd999999999999a, %r14 # imm = 0x3FD999999999999A
movq %r14, -0x38(%rbp)
leaq 0x22603(%rip), %rsi     # 0x53e59
leaq -0xa8(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x1b3d2
movsd 0x3eb7f(%rip), %xmm0    # 0x70400
movsd %xmm0, -0xb0(%rbp)
subq $0x8, %rsp
leaq 0x225e1(%rip), %r10     # 0x53e75
leaq 0x2255b(%rip), %r11     # 0x53df6
leaq -0x58(%rbp), %rdi
leaq -0x158(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x15f, %edx            # imm = 0x15F
leaq 0x22440(%rip), %rbx     # 0x53cfd
pushq %rbx
pushq %r13
pushq %r10
pushq %rax
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0xa8(%rbp), %rdi
callq 0x57b8
movq 0x3ec5f(%rip), %rdi     # 0x70540
leaq -0x218(%rbp), %rsi
leaq 0x22291(%rip), %rbx     # 0x53b80
movq %rbx, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x208(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x160, %edx            # imm = 0x160
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x3e1c7(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq 0x3e68c(%rip), %rax     # 0x6ffb0
movq %rax, -0x48(%rbp)
leaq 0x21a28(%rip), %rax     # 0x53357
movq %rax, -0x40(%rbp)
movq %rbx, -0x148(%rbp)
movq %r15, -0x140(%rbp)
movabsq $0x3fb999999999999a, %rax # imm = 0x3FB999999999999A
movq %rax, -0x38(%rbp)
leaq 0x224ff(%rip), %rsi     # 0x53e55
leaq -0xa8(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x1b3d2
movsd 0x3ea7f(%rip), %xmm0    # 0x70400
movsd %xmm0, -0xb0(%rbp)
subq $0x8, %rsp
leaq 0x224ef(%rip), %r10     # 0x53e83
leaq 0x22464(%rip), %r11     # 0x53dff
leaq -0x58(%rbp), %rdi
leaq -0x148(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x160, %edx            # imm = 0x160
leaq 0x22340(%rip), %rbx     # 0x53cfd
pushq %rbx
pushq %r13
pushq %r10
pushq %rax
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0xa8(%rbp), %rdi
callq 0x57b8
movq 0x3eb5f(%rip), %rdi     # 0x70540
leaq -0x1f8(%rbp), %rsi
leaq 0x22191(%rip), %rbx     # 0x53b80
movq %rbx, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x1e8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x161, %edx            # imm = 0x161
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x3e0c7(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq 0x3e58c(%rip), %rax     # 0x6ffb0
movq %rax, -0x48(%rbp)
leaq 0x21928(%rip), %rax     # 0x53357
movq %rax, -0x40(%rbp)
movq %rbx, -0x138(%rbp)
movq %r15, -0x130(%rbp)
movq %r14, -0x38(%rbp)
leaq 0x22416(%rip), %rsi     # 0x53e62
leaq -0xa8(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x1b3d2
movsd 0x3e989(%rip), %xmm0    # 0x70400
movsd %xmm0, -0xb0(%rbp)
subq $0x8, %rsp
leaq 0x22406(%rip), %r10     # 0x53e90
leaq 0x22377(%rip), %r11     # 0x53e08
leaq -0x58(%rbp), %rdi
leaq -0x138(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x161, %edx            # imm = 0x161
leaq 0x2224a(%rip), %rbx     # 0x53cfd
pushq %rbx
pushq %r13
pushq %r10
pushq %rax
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0xa8(%rbp), %rdi
callq 0x57b8
movq 0x3ea69(%rip), %rdi     # 0x70540
leaq -0x1d8(%rbp), %rsi
leaq 0x2209b(%rip), %rbx     # 0x53b80
movq %rbx, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x1c8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x162, %edx            # imm = 0x162
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x3dfd1(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq 0x3e496(%rip), %rax     # 0x6ffb0
movq %rax, -0x48(%rbp)
leaq 0x21832(%rip), %rax     # 0x53357
movq %rax, -0x40(%rbp)
movq %rbx, -0x128(%rbp)
movq %r15, -0x120(%rbp)
movabsq $0x3fc999999999999a, %rax # imm = 0x3FC999999999999A
movq %rax, -0x38(%rbp)
leaq 0x214c2(%rip), %rsi     # 0x5300e
leaq -0xa8(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x1b3d2
movsd 0x3e889(%rip), %xmm0    # 0x70400
movsd %xmm0, -0xb0(%rbp)
subq $0x8, %rsp
leaq 0x22235(%rip), %r10     # 0x53dbf
leaq 0x2227f(%rip), %r11     # 0x53e10
leaq -0x58(%rbp), %rdi
leaq -0x128(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x162, %edx            # imm = 0x162
leaq 0x2214a(%rip), %rbx     # 0x53cfd
pushq %rbx
pushq %r13
pushq %r10
pushq %rax
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0xa8(%rbp), %rdi
callq 0x57b8
movq 0x3e969(%rip), %rdi     # 0x70540
leaq -0x1b8(%rbp), %rsi
leaq 0x21f9b(%rip), %rbx     # 0x53b80
movq %rbx, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x1a8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x163, %edx            # imm = 0x163
callq 0x5710
movb $0x0, -0x50(%rbp)
leaq 0x3ded1(%rip), %rax     # 0x6fae0
movq %rax, -0x58(%rbp)
movq 0x3e396(%rip), %rax     # 0x6ffb0
movq %rax, -0x48(%rbp)
leaq 0x21732(%rip), %rax     # 0x53357
movq %rax, -0x40(%rbp)
movq %rbx, -0x118(%rbp)
movq %r15, -0x110(%rbp)
movabsq $0x3fb999999999999a, %rax # imm = 0x3FB999999999999A
movq %rax, -0x38(%rbp)
leaq 0x21b1c(%rip), %rsi     # 0x53768
leaq -0xa8(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
movq %r13, %r14
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x1b3d2
movsd 0x3e786(%rip), %xmm0    # 0x70400
movsd %xmm0, -0xb0(%rbp)
subq $0x8, %rsp
leaq 0x2220f(%rip), %r10     # 0x53e9c
leaq 0x2218a(%rip), %r11     # 0x53e1e
leaq -0x58(%rbp), %rdi
leaq -0x118(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %rbx
movl $0x163, %edx            # imm = 0x163
movq %rbx, %r9
leaq 0x22044(%rip), %r13     # 0x53cfd
pushq %r13
pushq %r14
pushq %r10
pushq %rax
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0xa8(%rbp), %rdi
callq 0x57b8
movq 0x3e862(%rip), %rdi     # 0x70540
leaq -0x198(%rbp), %rsi
leaq 0x21e94(%rip), %r14     # 0x53b80
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x188(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x164, %edx            # imm = 0x164
callq 0x5710
leaq -0x58(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x3ddc6(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq 0x3e28c(%rip), %rax     # 0x6ffb0
movq %rax, 0x10(%rdi)
leaq 0x21628(%rip), %rax     # 0x53357
movq %rax, 0x18(%rdi)
leaq -0x178(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
movabsq $-0x4011eb75e5d8e9c6, %rax # imm = 0xBFEE148A1A27163A
leaq -0xa8(%rbp), %r9
movq %rax, (%r9)
movsd 0x3e6a3(%rip), %xmm0    # 0x70400
movsd %xmm0, -0x38(%rbp)
subq $0x8, %rsp
leaq 0x22a21(%rip), %rax     # 0x5478e
leaq -0x108(%rbp), %r10
leaq 0x220ab(%rip), %r11     # 0x53e26
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
movl $0x164, %edx            # imm = 0x164
leaq 0x21f6f(%rip), %r14     # 0x53cfd
pushq %r14
pushq %rbx
pushq %rax
pushq %r10
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0x88(%rbp), %rdi
callq 0x1bba4
leaq -0xd0(%rbp), %rdi
callq 0x57b8
leaq -0x100(%rbp), %rdi
callq 0x1bba4
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x31e3f
jmp 0x31df7
jmp 0x31df7
jmp 0x31e3f
jmp 0x31df7
jmp 0x31df7
jmp 0x31e3f
jmp 0x31df7
jmp 0x31df7
jmp 0x31e3f
jmp 0x31df7
jmp 0x31df7
jmp 0x31e3f
jmp 0x31df7
jmp 0x31df7
jmp 0x31e3f
jmp 0x31df7
movq %rax, %rbx
leaq -0xa8(%rbp), %rdi
callq 0x57b8
jmp 0x31e42
jmp 0x31e3f
jmp 0x31e3f
jmp 0x31e3a
jmp 0x31e2e
jmp 0x31e3a
jmp 0x31e2e
jmp 0x31e3a
jmp 0x31e2e
jmp 0x31e3a
jmp 0x31e2e
jmp 0x31e3a
jmp 0x31e2e
jmp 0x31e3a
jmp 0x31e2e
jmp 0x31e3a
jmp 0x31e2e
jmp 0x31e3a
jmp 0x31e2e
jmp 0x31e3a
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
jmp 0x31e55
movq %rax, %rbx
jmp 0x31e5a
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
callq 0x1bba4
leaq -0xd0(%rbp), %rdi
callq 0x57b8
leaq -0x100(%rbp), %rdi
callq 0x1bba4
movq %rbx, %rdi
callq 0x56b0