// File: /workspace/github_cpp_makefile_star2_O2/aalto-speech[P]ftk/test/emtest.cc
// Function: ForwardBackwardTest7::test_method()
BOOST_AUTO_TEST_CASE(ForwardBackwardTest7)
{
    map<string, flt_type> vocab;
    vocab["a"] = log(0.25);
    vocab["sa"] = log(0.25);
    vocab["s"] = log(0.25);
    vocab["ki"] = log(0.50);
    vocab["kis"] = log(0.50);
    string sentence("kissa");
    map<string, flt_type> stats;
    flt_type lp = forward_backward(vocab, sentence, stats);
    BOOST_CHECK_EQUAL(5, (int)stats.size());
    BOOST_CHECK_CLOSE( 0.80, stats["kis"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( 0.20, stats["ki"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( 0.80, stats["sa"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( 0.20+0.20, stats["s"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( 0.20, stats["a"], DBL_ACCURACY );
    BOOST_CHECK_CLOSE( (flt_type)-1.63315443905, lp, DBL_ACCURACY );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x238, %rsp            # imm = 0x238
leaq -0x150(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x24573(%rip), %rsi     # 0x53f2c
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x158(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1b3d2
movabsq $-0x4009d1bd0105c611, %rbx # imm = 0xBFF62E42FEFA39EF
movq %rbx, (%rax)
leaq -0xb0(%rbp), %rdi
callq 0x57b8
leaq 0x24dc1(%rip), %rsi     # 0x547c0
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x158(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1b3d2
movq %rbx, (%rax)
leaq -0xb0(%rbp), %rdi
callq 0x57b8
leaq 0x235d3(%rip), %rsi     # 0x5300e
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x158(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1b3d2
movq %rbx, (%rax)
leaq -0xb0(%rbp), %rdi
callq 0x57b8
leaq 0x2430d(%rip), %rsi     # 0x53d84
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x158(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1b3d2
movabsq $-0x4019d1bd0105c611, %rbx # imm = 0xBFE62E42FEFA39EF
movq %rbx, (%rax)
leaq -0xb0(%rbp), %rdi
callq 0x57b8
leaq 0x242ca(%rip), %rsi     # 0x53d87
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x5160
leaq -0x158(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1b3d2
movq %rbx, (%rax)
leaq -0xb0(%rbp), %rdi
callq 0x57b8
leaq 0x2415b(%rip), %rsi     # 0x53c54
leaq -0xd0(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0x5160
leaq -0xa8(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x158(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
xorl %ecx, %ecx
callq 0x184bb
movsd %xmm0, -0xd8(%rbp)
movq 0x409ed(%rip), %rdi     # 0x70540
leaq 0x24026(%rip), %r14     # 0x53b80
leaq -0x258(%rbp), %rsi
movq %r14, (%rsi)
leaq 0x24023(%rip), %r15     # 0x53b8e
movq %r15, 0x8(%rsi)
leaq 0x23e9f(%rip), %r12     # 0x53a15
leaq -0x248(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x12b, %edx            # imm = 0x12B
callq 0x5710
leaq -0x60(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x3ff43(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq 0x40409(%rip), %rax     # 0x6ffb0
movq %rax, 0x10(%rdi)
leaq 0x237a5(%rip), %rax     # 0x53357
movq %rax, 0x18(%rdi)
leaq -0x238(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x80(%rbp), %r9
movl $0x5, (%r9)
movl -0x88(%rbp), %eax
leaq -0x38(%rbp), %r10
movl %eax, (%r10)
subq $0x8, %rsp
leaq 0x2409f(%rip), %rax     # 0x53c86
leaq 0x241f7(%rip), %r11     # 0x53de5
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
movl $0x12b, %edx            # imm = 0x12B
pushq %rax
pushq %r10
pushq %r11
callq 0x4ea09
addq $0x20, %rsp
movq 0x40931(%rip), %rdi     # 0x70540
leaq -0x228(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x218(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x12c, %edx            # imm = 0x12C
callq 0x5710
movb $0x0, -0x58(%rbp)
leaq 0x3fea0(%rip), %rax     # 0x6fae0
movq %rax, -0x60(%rbp)
movq 0x40365(%rip), %rax     # 0x6ffb0
movq %rax, -0x50(%rbp)
leaq 0x23701(%rip), %rax     # 0x53357
movq %rax, -0x48(%rbp)
movq %r14, -0x128(%rbp)
movq %r15, -0x120(%rbp)
movabsq $0x3fe999999999999a, %rax # imm = 0x3FE999999999999A
movq %rax, -0x38(%rbp)
leaq 0x2410a(%rip), %rsi     # 0x53d87
leaq -0x80(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0xb0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x1b3d2
movsd 0x4075e(%rip), %xmm0    # 0x70400
leaq -0x40(%rbp), %r13
movsd %xmm0, (%r13)
subq $0x8, %rsp
leaq 0x24046(%rip), %r11     # 0x53cfd
leaq 0x240d2(%rip), %r10     # 0x53d90
leaq 0x240c6(%rip), %rbx     # 0x53d8b
leaq -0x60(%rbp), %rdi
leaq -0x128(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x12c, %edx            # imm = 0x12C
pushq %r11
pushq %r13
pushq %r10
pushq %rax
pushq %rbx
callq 0x4eaf1
addq $0x30, %rsp
leaq -0x80(%rbp), %rdi
callq 0x57b8
movq 0x4083f(%rip), %rdi     # 0x70540
leaq -0x208(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x1f8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x12d, %edx            # imm = 0x12D
callq 0x5710
movb $0x0, -0x58(%rbp)
leaq 0x3fdae(%rip), %rax     # 0x6fae0
movq %rax, -0x60(%rbp)
movq 0x40273(%rip), %rax     # 0x6ffb0
movq %rax, -0x50(%rbp)
leaq 0x2360f(%rip), %rax     # 0x53357
movq %rax, -0x48(%rbp)
movq %r14, -0x118(%rbp)
movq %r15, -0x110(%rbp)
movabsq $0x3fc999999999999a, %rax # imm = 0x3FC999999999999A
movq %rax, -0x38(%rbp)
leaq 0x24015(%rip), %rsi     # 0x53d84
leaq -0x80(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
movq %rbx, %r13
leaq -0xb0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x1b3d2
movsd 0x40669(%rip), %xmm0    # 0x70400
movsd %xmm0, -0x40(%rbp)
subq $0x8, %rsp
leaq 0x23ff6(%rip), %r10     # 0x53d9d
leaq 0x2400c(%rip), %rbx     # 0x53dba
leaq -0x60(%rbp), %rdi
leaq -0x118(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x12d, %edx            # imm = 0x12D
leaq 0x23f2d(%rip), %r11     # 0x53cfd
pushq %r11
leaq -0x40(%rbp), %r11
pushq %r11
pushq %r10
pushq %rax
pushq %rbx
callq 0x4eaf1
addq $0x30, %rsp
leaq -0x80(%rbp), %rdi
callq 0x57b8
movq 0x4074b(%rip), %rdi     # 0x70540
leaq -0x1e8(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x1d8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x12e, %edx            # imm = 0x12E
callq 0x5710
movb $0x0, -0x58(%rbp)
leaq 0x3fcba(%rip), %rax     # 0x6fae0
movq %rax, -0x60(%rbp)
movq 0x4017f(%rip), %rax     # 0x6ffb0
movq %rax, -0x50(%rbp)
leaq 0x2351b(%rip), %rax     # 0x53357
movq %rax, -0x48(%rbp)
movq %r14, -0x108(%rbp)
movq %r15, -0x100(%rbp)
movabsq $0x3fe999999999999a, %rax # imm = 0x3FE999999999999A
movq %rax, -0x38(%rbp)
leaq 0x2495d(%rip), %rsi     # 0x547c0
leaq -0x80(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0xb0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x1b3d2
movsd 0x40578(%rip), %xmm0    # 0x70400
movsd %xmm0, -0x40(%rbp)
subq $0x8, %rsp
leaq 0x23f11(%rip), %r10     # 0x53da9
leaq -0x60(%rbp), %rdi
leaq -0x108(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x12e, %edx            # imm = 0x12E
leaq 0x23e43(%rip), %r11     # 0x53cfd
pushq %r11
leaq -0x40(%rbp), %r11
pushq %r11
pushq %r10
pushq %rax
pushq %r13
callq 0x4eaf1
addq $0x30, %rsp
leaq -0x80(%rbp), %rdi
callq 0x57b8
movq 0x40660(%rip), %rdi     # 0x70540
leaq -0x1c8(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x1b8(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x12f, %edx            # imm = 0x12F
callq 0x5710
movb $0x0, -0x58(%rbp)
leaq 0x3fbcf(%rip), %rax     # 0x6fae0
movq %rax, -0x60(%rbp)
movq 0x40094(%rip), %rax     # 0x6ffb0
movq %rax, -0x50(%rbp)
leaq 0x23430(%rip), %rax     # 0x53357
movq %rax, -0x48(%rbp)
movq %r14, -0xf8(%rbp)
movq %r15, -0xf0(%rbp)
movabsq $0x3fd999999999999a, %rax # imm = 0x3FD999999999999A
movq %rax, -0x38(%rbp)
leaq 0x230c0(%rip), %rsi     # 0x5300e
leaq -0x80(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0xb0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x1b3d2
movsd 0x4048d(%rip), %xmm0    # 0x70400
movsd %xmm0, -0x40(%rbp)
subq $0x8, %rsp
leaq 0x23e3c(%rip), %r10     # 0x53dbf
leaq 0x23e2b(%rip), %r11     # 0x53db5
leaq -0x60(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %r9
movl $0x12f, %edx            # imm = 0x12F
leaq 0x23d51(%rip), %rbx     # 0x53cfd
pushq %rbx
leaq -0x40(%rbp), %rbx
pushq %rbx
pushq %r10
pushq %rax
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0x80(%rbp), %rdi
callq 0x57b8
movq 0x40570(%rip), %rdi     # 0x70540
leaq -0x1a8(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x198(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x130, %edx            # imm = 0x130
callq 0x5710
movb $0x0, -0x58(%rbp)
leaq 0x3fadf(%rip), %rax     # 0x6fae0
movq %rax, -0x60(%rbp)
movq 0x3ffa4(%rip), %rax     # 0x6ffb0
movq %rax, -0x50(%rbp)
leaq 0x23340(%rip), %rax     # 0x53357
movq %rax, -0x48(%rbp)
movq %r14, -0xe8(%rbp)
movq %r15, -0xe0(%rbp)
movabsq $0x3fc999999999999a, %rax # imm = 0x3FC999999999999A
movq %rax, -0x38(%rbp)
leaq 0x23eee(%rip), %rsi     # 0x53f2c
leaq -0x80(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0x5160
leaq -0xb0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x1b3d2
movsd 0x4039d(%rip), %xmm0    # 0x70400
movsd %xmm0, -0x40(%rbp)
subq $0x8, %rsp
leaq 0x23c59(%rip), %r10     # 0x53ccc
leaq -0x60(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
leaq -0x38(%rbp), %rbx
movl $0x130, %edx            # imm = 0x130
movq %rbx, %r9
leaq 0x23c65(%rip), %r11     # 0x53cfd
pushq %r11
leaq -0x40(%rbp), %r11
pushq %r11
pushq %r10
pushq %rax
leaq 0x23d10(%rip), %rax     # 0x53dba
pushq %rax
callq 0x4eaf1
addq $0x30, %rsp
leaq -0x80(%rbp), %rdi
callq 0x57b8
movq 0x4047c(%rip), %rdi     # 0x70540
leaq -0x188(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
leaq -0x178(%rbp), %rcx
movq %r12, (%rcx)
movq %r12, 0x8(%rcx)
movl $0x131, %edx            # imm = 0x131
callq 0x5710
leaq -0x60(%rbp), %rdi
movb $0x0, 0x8(%rdi)
leaq 0x3f9e7(%rip), %rax     # 0x6fae0
movq %rax, (%rdi)
movq 0x3fead(%rip), %rax     # 0x6ffb0
movq %rax, 0x10(%rdi)
leaq 0x23249(%rip), %rax     # 0x53357
movq %rax, 0x18(%rdi)
leaq -0x168(%rbp), %rsi
movq %r14, (%rsi)
movq %r15, 0x8(%rsi)
movabsq $-0x4005de99736f688d, %rax # imm = 0xBFFA21668C909773
leaq -0x80(%rbp), %r9
movq %rax, (%r9)
movsd 0x402c7(%rip), %xmm0    # 0x70400
movsd %xmm0, -0x38(%rbp)
subq $0x8, %rsp
leaq 0x24645(%rip), %rax     # 0x5478e
leaq -0xd8(%rbp), %r10
leaq 0x23c73(%rip), %r11     # 0x53dca
pushq $0x1
popq %rcx
pushq $0x8
popq %r8
movl $0x131, %edx            # imm = 0x131
leaq 0x23b93(%rip), %r14     # 0x53cfd
pushq %r14
pushq %rbx
pushq %rax
pushq %r10
pushq %r11
callq 0x4eaf1
addq $0x30, %rsp
leaq -0xb0(%rbp), %rdi
callq 0x1bba4
leaq -0xd0(%rbp), %rdi
callq 0x57b8
leaq -0x158(%rbp), %rdi
callq 0x1bba4
addq $0x238, %rsp            # imm = 0x238
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x30202
jmp 0x301cd
jmp 0x301cd
jmp 0x30202
jmp 0x301cd
jmp 0x301cd
jmp 0x30202
jmp 0x301cd
jmp 0x301cd
jmp 0x30202
jmp 0x301cd
jmp 0x301cd
jmp 0x30202
jmp 0x301cd
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
callq 0x57b8
jmp 0x30205
jmp 0x30202
jmp 0x30202
jmp 0x301fd
jmp 0x301f1
jmp 0x301fd
jmp 0x301f1
jmp 0x301fd
jmp 0x301f1
jmp 0x301fd
jmp 0x301f1
jmp 0x301fd
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
jmp 0x30218
movq %rax, %rbx
jmp 0x3021d
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
callq 0x1bba4
leaq -0xd0(%rbp), %rdi
callq 0x57b8
leaq -0x158(%rbp), %rdi
callq 0x1bba4
movq %rbx, %rdi
callq 0x56b0