// File: aalto-speech[P]ftk/test/emtest.cc
// Function: viterbiTest8::test_method()
BOOST_AUTO_TEST_CASE(viterbiTest8)
{
    map<string, flt_type> vocab;
    string str1("p"); string str2("ö");
    string str3("l"); string str4("i");
    string str5("pölli");
    string str6("llä"); string str7("pöllillä");
    string str8("�");
    string str9("�");
    string str10("�");
    vocab[str1] = -1.0;
    vocab[str2] = -2.0;
    vocab[str3] = -1.5;
    vocab[str4] = -2.0;
    vocab[str5] = -3.0;
    vocab[str6] = -2.0;
    vocab[str7] = -1.0;
    string sentence("pöllillä");
    int maxlen = 8;
    vector<string> correct_path;
    correct_path.push_back(str7);
    viterbiChecks(vocab, maxlen, sentence, correct_path, -1, true);
    correct_path.clear();
    correct_path.push_back(str5);
    correct_path.push_back(str6);
    vocab[str7] = -6.0;
    viterbiChecks(vocab, maxlen, sentence, correct_path, -5.0, true);
    vocab[str1] = -0.1;
    vocab[str3] = -0.1;
    vocab[str4] = -0.1;
    vocab[str8] = -0.1;
    vocab[str9] = -0.1;
    vocab[str10] = -0.1;
    vocab.erase(str2);
    viterbiChecks(vocab, maxlen, sentence, correct_path, -5.0, true);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2f0, %rsp            # imm = 0x2F0
movq %rdi, -0x8(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x530a0
leaq -0x59(%rbp), %rdi
movq %rdi, -0x220(%rbp)
callq 0x67b0
movq -0x220(%rbp), %rdx
leaq 0x545b4(%rip), %rsi     # 0xcb81a
leaq -0x58(%rbp), %rdi
callq 0x65e0
jmp 0x77271
leaq -0x59(%rbp), %rdi
callq 0x6470
leaq -0x91(%rbp), %rdi
movq %rdi, -0x228(%rbp)
callq 0x67b0
movq -0x228(%rbp), %rdx
leaq 0x54ba3(%rip), %rsi     # 0xcbe3e
leaq -0x90(%rbp), %rdi
callq 0x65e0
jmp 0x772a9
leaq -0x91(%rbp), %rdi
callq 0x6470
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x230(%rbp)
callq 0x67b0
movq -0x230(%rbp), %rdx
leaq 0x54c36(%rip), %rsi     # 0xcbf0c
leaq -0xb8(%rbp), %rdi
callq 0x65e0
jmp 0x772e4
leaq -0xb9(%rbp), %rdi
callq 0x6470
leaq -0xe1(%rbp), %rdi
movq %rdi, -0x238(%rbp)
callq 0x67b0
movq -0x238(%rbp), %rdx
leaq 0x54427(%rip), %rsi     # 0xcb738
leaq -0xe0(%rbp), %rdi
callq 0x65e0
jmp 0x7731f
leaq -0xe1(%rbp), %rdi
callq 0x6470
leaq -0x109(%rbp), %rdi
movq %rdi, -0x240(%rbp)
callq 0x67b0
movq -0x240(%rbp), %rdx
leaq 0x5490c(%rip), %rsi     # 0xcbc58
leaq -0x108(%rbp), %rdi
callq 0x65e0
jmp 0x7735a
leaq -0x109(%rbp), %rdi
callq 0x6470
leaq -0x131(%rbp), %rdi
movq %rdi, -0x248(%rbp)
callq 0x67b0
movq -0x248(%rbp), %rdx
leaq 0x548de(%rip), %rsi     # 0xcbc65
leaq -0x130(%rbp), %rdi
callq 0x65e0
jmp 0x77395
leaq -0x131(%rbp), %rdi
callq 0x6470
leaq -0x159(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x67b0
movq -0x250(%rbp), %rdx
leaq 0x5489d(%rip), %rsi     # 0xcbc5f
leaq -0x158(%rbp), %rdi
callq 0x65e0
jmp 0x773d0
leaq -0x159(%rbp), %rdi
callq 0x6470
leaq -0x181(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x67b0
movq -0x258(%rbp), %rdx
leaq 0x5486d(%rip), %rsi     # 0xcbc6a
leaq -0x180(%rbp), %rdi
callq 0x65e0
jmp 0x7740b
leaq -0x181(%rbp), %rdi
callq 0x6470
leaq -0x1a9(%rbp), %rdi
movq %rdi, -0x260(%rbp)
callq 0x67b0
movq -0x260(%rbp), %rdx
leaq 0x54832(%rip), %rsi     # 0xcbc6a
leaq -0x1a8(%rbp), %rdi
callq 0x65e0
jmp 0x77446
leaq -0x1a9(%rbp), %rdi
callq 0x6470
leaq -0x1d1(%rbp), %rdi
movq %rdi, -0x268(%rbp)
callq 0x67b0
movq -0x268(%rbp), %rdx
leaq 0x547f7(%rip), %rsi     # 0xcbc6a
leaq -0x1d0(%rbp), %rdi
callq 0x65e0
jmp 0x77481
leaq -0x1d1(%rbp), %rdi
callq 0x6470
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4b030
movq %rax, -0x270(%rbp)
jmp 0x774a3
movq -0x270(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x4b030
movq %rax, -0x278(%rbp)
jmp 0x774d0
movq -0x278(%rbp), %rax
movabsq $-0x4000000000000000, %rcx # imm = 0xC000000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x4b030
movq %rax, -0x280(%rbp)
jmp 0x774fd
movq -0x280(%rbp), %rax
movabsq $-0x4008000000000000, %rcx # imm = 0xBFF8000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x4b030
movq %rax, -0x288(%rbp)
jmp 0x7752a
movq -0x288(%rbp), %rax
movabsq $-0x4000000000000000, %rcx # imm = 0xC000000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x4b030
movq %rax, -0x290(%rbp)
jmp 0x77557
movq -0x290(%rbp), %rax
movabsq $-0x3ff8000000000000, %rcx # imm = 0xC008000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x4b030
movq %rax, -0x298(%rbp)
jmp 0x77584
movq -0x298(%rbp), %rax
movabsq $-0x4000000000000000, %rcx # imm = 0xC000000000000000
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x4b030
movq %rax, -0x2a0(%rbp)
jmp 0x775b1
movq -0x2a0(%rbp), %rax
movabsq $-0x4010000000000000, %rcx # imm = 0xBFF0000000000000
movq %rcx, (%rax)
leaq -0x1f9(%rbp), %rdi
movq %rdi, -0x2a8(%rbp)
callq 0x67b0
movq -0x2a8(%rbp), %rdx
leaq 0x54679(%rip), %rsi     # 0xcbc5f
leaq -0x1f8(%rbp), %rdi
callq 0x65e0
jmp 0x775f4
leaq -0x1f9(%rbp), %rdi
callq 0x6470
movl $0x8, -0x200(%rbp)
leaq -0x218(%rbp), %rdi
movq %rdi, -0x2b0(%rbp)
callq 0xc7d0
movq -0x2b0(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0xd310
jmp 0x77632
movl -0x200(%rbp), %esi
leaq -0x38(%rbp), %rdi
leaq -0x1f8(%rbp), %rdx
leaq -0x218(%rbp), %rcx
movsd 0x544b6(%rip), %xmm0    # 0xcbb08
movl $0x1, %r8d
callq 0x72320
jmp 0x7765f
leaq -0x218(%rbp), %rdi
movq %rdi, -0x2b8(%rbp)
callq 0xdfd0
movq -0x2b8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0xd310
jmp 0x77687
leaq -0x218(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0xd310
jmp 0x7769c
leaq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x4b030
movq %rax, -0x2c0(%rbp)
jmp 0x776b5
movq -0x2c0(%rbp), %rax
movabsq $-0x3fe8000000000000, %rcx # imm = 0xC018000000000000
movq %rcx, (%rax)
movl -0x200(%rbp), %esi
leaq -0x38(%rbp), %rdi
leaq -0x1f8(%rbp), %rdx
leaq -0x218(%rbp), %rcx
movsd 0x54427(%rip), %xmm0    # 0xcbb10
movl $0x1, %r8d
callq 0x72320
jmp 0x776f6
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4b030
movq %rax, -0x2c8(%rbp)
jmp 0x7770c
movq -0x2c8(%rbp), %rax
movabsq $-0x4046666666666666, %rcx # imm = 0xBFB999999999999A
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x4b030
movq %rax, -0x2d0(%rbp)
jmp 0x77739
movq -0x2d0(%rbp), %rax
movabsq $-0x4046666666666666, %rcx # imm = 0xBFB999999999999A
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x4b030
movq %rax, -0x2d8(%rbp)
jmp 0x77766
movq -0x2d8(%rbp), %rax
movabsq $-0x4046666666666666, %rcx # imm = 0xBFB999999999999A
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x4b030
movq %rax, -0x2e0(%rbp)
jmp 0x77793
movq -0x2e0(%rbp), %rax
movabsq $-0x4046666666666666, %rcx # imm = 0xBFB999999999999A
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x4b030
movq %rax, -0x2e8(%rbp)
jmp 0x777c0
movq -0x2e8(%rbp), %rax
movabsq $-0x4046666666666666, %rcx # imm = 0xBFB999999999999A
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x4b030
movq %rax, -0x2f0(%rbp)
jmp 0x777ed
movq -0x2f0(%rbp), %rax
movabsq $-0x4046666666666666, %rcx # imm = 0xBFB999999999999A
movq %rcx, (%rax)
leaq -0x38(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x64400
jmp 0x77813
movl -0x200(%rbp), %esi
leaq -0x38(%rbp), %rdi
leaq -0x1f8(%rbp), %rdx
leaq -0x218(%rbp), %rcx
movsd 0x542dd(%rip), %xmm0    # 0xcbb10
movl $0x1, %r8d
callq 0x72320
jmp 0x77840
leaq -0x218(%rbp), %rdi
callq 0xcfc0
leaq -0x1f8(%rbp), %rdi
callq 0x6908
leaq -0x1d0(%rbp), %rdi
callq 0x6908
leaq -0x1a8(%rbp), %rdi
callq 0x6908
leaq -0x180(%rbp), %rdi
callq 0x6908
leaq -0x158(%rbp), %rdi
callq 0x6908
leaq -0x130(%rbp), %rdi
callq 0x6908
leaq -0x108(%rbp), %rdi
callq 0x6908
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 0x4cf70
addq $0x2f0, %rsp            # imm = 0x2F0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x59(%rbp), %rdi
callq 0x6470
jmp 0x77ab9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x91(%rbp), %rdi
callq 0x6470
jmp 0x77ab0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xb9(%rbp), %rdi
callq 0x6470
jmp 0x77aa4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xe1(%rbp), %rdi
callq 0x6470
jmp 0x77a98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x109(%rbp), %rdi
callq 0x6470
jmp 0x77a8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x131(%rbp), %rdi
callq 0x6470
jmp 0x77a80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x159(%rbp), %rdi
callq 0x6470
jmp 0x77a74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x181(%rbp), %rdi
callq 0x6470
jmp 0x77a68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x1a9(%rbp), %rdi
callq 0x6470
jmp 0x77a5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x1d1(%rbp), %rdi
callq 0x6470
jmp 0x77a50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x77a44
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x1f9(%rbp), %rdi
callq 0x6470
jmp 0x77a44
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x218(%rbp), %rdi
callq 0xcfc0
leaq -0x1f8(%rbp), %rdi
callq 0x6908
leaq -0x1d0(%rbp), %rdi
callq 0x6908
leaq -0x1a8(%rbp), %rdi
callq 0x6908
leaq -0x180(%rbp), %rdi
callq 0x6908
leaq -0x158(%rbp), %rdi
callq 0x6908
leaq -0x130(%rbp), %rdi
callq 0x6908
leaq -0x108(%rbp), %rdi
callq 0x6908
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 0x4cf70
movq -0x68(%rbp), %rdi
callq 0x67a0
nopl (%rax,%rax)