// File: /workspace/github_cpp_makefile_star2_O3/BGI-Qingdao[P]metaSLR/classify.cpp
// Function: TestAll()
void TestAll(){
    assert(parseName("VSDSDS#XXX_xxx_s/1")=="XXX_xxx_s");
    Kmer::InitFilter(5);
    auto str1=BaseStr::str2BaseStr("AGCTC");
    int  t1[] = { '\000','\003','\001','\002','\001'};
    for( int i = 0 ; i <5 ; i++ ) assert(str1[i] == t1[i]);
    auto str2 = BaseStr::str2BaseStr("GAGCT");
    int  t2[] = {'\003','\000','\003','\001','\002'};
    for( int i = 0 ; i <5 ; i++ ) assert(str2[i] == t2[i]);
                         // 00 1101 1001
    assert(Kmer::str2Kmer(BaseStr::str2BaseStr("AGCTC")).low == 0xD9);
    assert(Kmer::str2Kmer(BaseStr::str2BaseStr("AGCTC")).high == 0);
    assert(Kmer::str2Kmer(BaseStr::str2BaseStr("GAGCT")).low == 0xD9);
    assert(Kmer::str2Kmer(BaseStr::str2BaseStr("GAGCT")).high == 0);
    auto kmers = Kmer::chopRead2Kmer(BaseStr::str2BaseStr("GAGCTA"));
    assert(kmers.size() == 2 );
    // GAGCT->AGCTC 00 1101 1001 -> 0xD9
    // AGCTA        00 1101 1000 -> 0xD8
    assert(kmers[0].high == 0 );
    assert(kmers[0].low == 0xD9 );
    assert(kmers[1].high == 0 );
    assert(kmers[1].low == 0xD8 );
    std::string k1 = BaseStr::BaseStr2Str(Kmer::ToBaseStr(kmers[0]));
    std::string k2 = BaseStr::BaseStr2Str(Kmer::ToBaseStr(kmers[1]));
    assert(k1 == "AGCTC");
    assert(k2 == "AGCTA");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0xa8, %rsp
leaq -0x48(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x58b4(%rip), %rsi      # 0xa24d
leaq 0x58bf(%rip), %rdx      # 0xa25f
leaq -0x58(%rbp), %rdi
callq 0x8ef4
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x3ed8
leaq 0x58a3(%rip), %rsi      # 0xa260
leaq -0x38(%rbp), %rdi
callq 0x30a0
testl %eax, %eax
jne 0x4de3
leaq -0x28(%rbp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x49e0
callq 0x3230
movq -0x58(%rbp), %rdi
cmpq %r15, %rdi
je 0x49ee
callq 0x3230
movq $0x0, 0x990f(%rip) # 0xe308
movq $0x3ff, 0x990c(%rip) # imm = 0x3FF
movl $0x5, 0x98f6(%rip)      # 0xe304
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x588a(%rip), %rsi      # 0xa2a6
leaq 0x5888(%rip), %rdx      # 0xa2ab
callq 0x8ef4
leaq -0xb8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x56ac
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4a46
callq 0x3230
movq -0xb8(%rbp), %rax
xorl %ecx, %ecx
leaq 0x5c7a(%rip), %rdx      # 0xa6d0
movsbl (%rax), %esi
cmpl %esi, (%rcx,%rdx)
jne 0x4da5
addq $0x4, %rcx
incq %rax
cmpq $0x14, %rcx
jne 0x4a56
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x5840(%rip), %rsi      # 0xa2bd
leaq 0x583e(%rip), %rdx      # 0xa2c2
callq 0x8ef4
leaq -0xa0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x56ac
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4aa7
callq 0x3230
movq -0xa0(%rbp), %rax
xorl %ecx, %ecx
leaq 0x5c39(%rip), %rdx      # 0xa6f0
movsbl (%rax), %esi
cmpl %esi, (%rcx,%rdx)
jne 0x4dc4
addq $0x4, %rcx
incq %rax
cmpq $0x14, %rcx
jne 0x4ab7
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x57c8(%rip), %rsi      # 0xa2a6
leaq 0x57c6(%rip), %rdx      # 0xa2ab
callq 0x8ef4
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x56ac
leaq -0x58(%rbp), %rdi
callq 0x55ea
cmpq $0xd9, %rdx
jne 0x4e02
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4b1b
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4b29
callq 0x3230
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x576f(%rip), %rsi      # 0xa2a6
leaq 0x576d(%rip), %rdx      # 0xa2ab
callq 0x8ef4
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x56ac
leaq -0x58(%rbp), %rdi
callq 0x55ea
testq %rax, %rax
jne 0x4e21
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4b70
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4b7e
callq 0x3230
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x5731(%rip), %rsi      # 0xa2bd
leaq 0x572f(%rip), %rdx      # 0xa2c2
callq 0x8ef4
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x56ac
leaq -0x58(%rbp), %rdi
callq 0x55ea
cmpq $0xd9, %rdx
jne 0x4e40
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4bc9
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4bd7
callq 0x3230
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x56d8(%rip), %rsi      # 0xa2bd
leaq 0x56d6(%rip), %rdx      # 0xa2c2
callq 0x8ef4
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x56ac
leaq -0x58(%rbp), %rdi
callq 0x55ea
testq %rax, %rax
jne 0x4e5f
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4c1e
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4c2c
callq 0x3230
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x577e(%rip), %rsi      # 0xa3b8
leaq 0x577d(%rip), %rdx      # 0xa3be
callq 0x8ef4
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x56ac
leaq -0x70(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x5d1e
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4c6e
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4c7c
callq 0x3230
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rax
subq %rsi, %rax
cmpq $0x20, %rax
jne 0x4e7e
cmpq $0x0, (%rsi)
jne 0x4e9d
cmpq $0xd9, 0x8(%rsi)
jne 0x4ebc
cmpq $0x0, 0x10(%rsi)
jne 0x4edb
cmpq $0xd8, 0x18(%rsi)
jne 0x4efa
leaq -0x58(%rbp), %rdi
callq 0x607e
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x5fd2
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4ce6
callq 0x3230
movq -0x70(%rbp), %rsi
addq $0x10, %rsi
leaq -0x88(%rbp), %rdi
callq 0x607e
leaq -0x58(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x5fd2
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0x4d1b
callq 0x3230
leaq 0x5584(%rip), %rsi      # 0xa2a6
leaq -0x38(%rbp), %rdi
callq 0x30a0
testl %eax, %eax
jne 0x4f19
leaq 0x567f(%rip), %rsi      # 0xa3b9
leaq -0x58(%rbp), %rdi
callq 0x30a0
testl %eax, %eax
jne 0x4f38
movq -0x58(%rbp), %rdi
cmpq %r15, %rdi
je 0x4d59
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4d67
callq 0x3230
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x4d75
callq 0x3230
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x4d86
callq 0x3230
movq -0xb8(%rbp), %rdi
testq %rdi, %rdi
je 0x4d97
callq 0x3230
addq $0xa8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x5500(%rip), %rdi      # 0xa2ac
leaq 0x5269(%rip), %rsi      # 0xa01c
leaq 0x54dd(%rip), %rcx      # 0xa297
movl $0x151, %edx            # imm = 0x151
callq 0x3180
leaq 0x54f8(%rip), %rdi      # 0xa2c3
leaq 0x524a(%rip), %rsi      # 0xa01c
leaq 0x54be(%rip), %rcx      # 0xa297
movl $0x154, %edx            # imm = 0x154
callq 0x3180
leaq 0x5480(%rip), %rdi      # 0xa26a
leaq 0x522b(%rip), %rsi      # 0xa01c
leaq 0x549f(%rip), %rcx      # 0xa297
movl $0x14d, %edx            # imm = 0x14D
callq 0x3180
leaq 0x54cb(%rip), %rdi      # 0xa2d4
leaq 0x520c(%rip), %rsi      # 0xa01c
leaq 0x5480(%rip), %rcx      # 0xa297
movl $0x156, %edx            # imm = 0x156
callq 0x3180
leaq 0x54e6(%rip), %rdi      # 0xa30e
leaq 0x51ed(%rip), %rsi      # 0xa01c
leaq 0x5461(%rip), %rcx      # 0xa297
movl $0x157, %edx            # imm = 0x157
callq 0x3180
leaq 0x54ff(%rip), %rdi      # 0xa346
leaq 0x51ce(%rip), %rsi      # 0xa01c
leaq 0x5442(%rip), %rcx      # 0xa297
movl $0x158, %edx            # imm = 0x158
callq 0x3180
leaq 0x551a(%rip), %rdi      # 0xa380
leaq 0x51af(%rip), %rsi      # 0xa01c
leaq 0x5423(%rip), %rcx      # 0xa297
movl $0x159, %edx            # imm = 0x159
callq 0x3180
leaq 0x553a(%rip), %rdi      # 0xa3bf
leaq 0x5190(%rip), %rsi      # 0xa01c
leaq 0x5404(%rip), %rcx      # 0xa297
movl $0x15b, %edx            # imm = 0x15B
callq 0x3180
leaq 0x552d(%rip), %rdi      # 0xa3d1
leaq 0x5171(%rip), %rsi      # 0xa01c
leaq 0x53e5(%rip), %rcx      # 0xa297
movl $0x15e, %edx            # imm = 0x15E
callq 0x3180
leaq 0x5521(%rip), %rdi      # 0xa3e4
leaq 0x5152(%rip), %rsi      # 0xa01c
leaq 0x53c6(%rip), %rcx      # 0xa297
movl $0x15f, %edx            # imm = 0x15F
callq 0x3180
leaq 0x5517(%rip), %rdi      # 0xa3f9
leaq 0x5133(%rip), %rsi      # 0xa01c
leaq 0x53a7(%rip), %rcx      # 0xa297
movl $0x160, %edx            # imm = 0x160
callq 0x3180
leaq 0x550b(%rip), %rdi      # 0xa40c
leaq 0x5114(%rip), %rsi      # 0xa01c
leaq 0x5388(%rip), %rcx      # 0xa297
movl $0x161, %edx            # imm = 0x161
callq 0x3180
leaq 0x5501(%rip), %rdi      # 0xa421
leaq 0x50f5(%rip), %rsi      # 0xa01c
leaq 0x5369(%rip), %rcx      # 0xa297
movl $0x164, %edx            # imm = 0x164
callq 0x3180
leaq 0x54f0(%rip), %rdi      # 0xa42f
leaq 0x50d6(%rip), %rsi      # 0xa01c
leaq 0x534a(%rip), %rcx      # 0xa297
movl $0x165, %edx            # imm = 0x165
callq 0x3180
movq %rax, %rbx
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0x4f70
callq 0x3230
jmp 0x4f70
movq %rax, %rbx
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
jne 0x4f87
jmp 0x4f91
movq %rax, %rbx
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4f91
callq 0x3230
jmp 0x4f91
movq %rax, %rbx
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
jne 0x4fd3
jmp 0x4fdd
jmp 0x4fb4
jmp 0x4fc7
jmp 0x4fda
jmp 0x4fb4
jmp 0x4fc7
jmp 0x4fda
jmp 0x4fb4
jmp 0x4fc7
jmp 0x4fda
jmp 0x4fb4
jmp 0x4fc7
jmp 0x4fda
movq %rax, %rbx
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4fca
callq 0x3230
jmp 0x4fca
movq %rax, %rbx
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4fdd
callq 0x3230
jmp 0x4fdd
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x4fee
callq 0x3230
movq -0xb8(%rbp), %rdi
testq %rdi, %rdi
je 0x4fff
callq 0x3230
movq %rbx, %rdi
callq 0x3400
movq %rax, %rbx
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
jne 0x4fe9
jmp 0x4fee
movq %rax, %rbx
jmp 0x4fee
movq %rax, %rbx
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
jne 0x4ffa
jmp 0x4fff
jmp 0x5038
movq %rax, %rbx
movq -0x58(%rbp), %rdi
cmpq %r15, %rdi
jne 0x4ffa
jmp 0x4fff
movq %rax, %rbx
jmp 0x4fff