// File: /workspace/github_cpp_makefile_star2_O1/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 0x5866(%rip), %rsi      # 0xa24d
leaq 0x5871(%rip), %rdx      # 0xa25f
leaq -0x58(%rbp), %rdi
callq 0x8f44
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x3f2a
leaq 0x5855(%rip), %rsi      # 0xa260
leaq -0x38(%rbp), %rdi
callq 0x30a0
testl %eax, %eax
jne 0x4e31
leaq -0x28(%rbp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x4a2e
callq 0x3230
movq -0x58(%rbp), %rdi
cmpq %r15, %rdi
je 0x4a3c
callq 0x3230
movq $0x0, 0x98c1(%rip) # 0xe308
movq $0x3ff, 0x98be(%rip) # imm = 0x3FF
movl $0x5, 0x98a8(%rip)      # 0xe304
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x583c(%rip), %rsi      # 0xa2a6
leaq 0x583a(%rip), %rdx      # 0xa2ab
callq 0x8f44
leaq -0xb8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x570a
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4a94
callq 0x3230
movq -0xb8(%rbp), %rax
xorl %ecx, %ecx
leaq 0x5c2c(%rip), %rdx      # 0xa6d0
movsbl (%rax), %esi
cmpl %esi, (%rcx,%rdx)
jne 0x4df3
addq $0x4, %rcx
incq %rax
cmpq $0x14, %rcx
jne 0x4aa4
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x57f2(%rip), %rsi      # 0xa2bd
leaq 0x57f0(%rip), %rdx      # 0xa2c2
callq 0x8f44
leaq -0xa0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x570a
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4af5
callq 0x3230
movq -0xa0(%rbp), %rax
xorl %ecx, %ecx
leaq 0x5beb(%rip), %rdx      # 0xa6f0
movsbl (%rax), %esi
cmpl %esi, (%rcx,%rdx)
jne 0x4e12
addq $0x4, %rcx
incq %rax
cmpq $0x14, %rcx
jne 0x4b05
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x577a(%rip), %rsi      # 0xa2a6
leaq 0x5778(%rip), %rdx      # 0xa2ab
callq 0x8f44
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x570a
leaq -0x58(%rbp), %rdi
callq 0x563a
cmpq $0xd9, %rdx
jne 0x4e50
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4b69
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4b77
callq 0x3230
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x5721(%rip), %rsi      # 0xa2a6
leaq 0x571f(%rip), %rdx      # 0xa2ab
callq 0x8f44
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x570a
leaq -0x58(%rbp), %rdi
callq 0x563a
testq %rax, %rax
jne 0x4e6f
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4bbe
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4bcc
callq 0x3230
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x56e3(%rip), %rsi      # 0xa2bd
leaq 0x56e1(%rip), %rdx      # 0xa2c2
callq 0x8f44
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x570a
leaq -0x58(%rbp), %rdi
callq 0x563a
cmpq $0xd9, %rdx
jne 0x4e8e
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4c17
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4c25
callq 0x3230
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x568a(%rip), %rsi      # 0xa2bd
leaq 0x5688(%rip), %rdx      # 0xa2c2
callq 0x8f44
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x570a
leaq -0x58(%rbp), %rdi
callq 0x563a
testq %rax, %rax
jne 0x4ead
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4c6c
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4c7a
callq 0x3230
leaq -0x38(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x5730(%rip), %rsi      # 0xa3b8
leaq 0x572f(%rip), %rdx      # 0xa3be
callq 0x8f44
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x570a
leaq -0x70(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x5d84
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4cbc
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4cca
callq 0x3230
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rax
subq %rsi, %rax
cmpq $0x20, %rax
jne 0x4ecc
cmpq $0x0, (%rsi)
jne 0x4eeb
cmpq $0xd9, 0x8(%rsi)
jne 0x4f0a
cmpq $0x0, 0x10(%rsi)
jne 0x4f29
cmpq $0xd8, 0x18(%rsi)
jne 0x4f48
leaq -0x58(%rbp), %rdi
callq 0x60d4
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x6028
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4d34
callq 0x3230
movq -0x70(%rbp), %rsi
addq $0x10, %rsi
leaq -0x88(%rbp), %rdi
callq 0x60d4
leaq -0x58(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x6028
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0x4d69
callq 0x3230
leaq 0x5536(%rip), %rsi      # 0xa2a6
leaq -0x38(%rbp), %rdi
callq 0x30a0
testl %eax, %eax
jne 0x4f67
leaq 0x5631(%rip), %rsi      # 0xa3b9
leaq -0x58(%rbp), %rdi
callq 0x30a0
testl %eax, %eax
jne 0x4f86
movq -0x58(%rbp), %rdi
cmpq %r15, %rdi
je 0x4da7
callq 0x3230
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x4db5
callq 0x3230
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x4dc3
callq 0x3230
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x4dd4
callq 0x3230
movq -0xb8(%rbp), %rdi
testq %rdi, %rdi
je 0x4de5
callq 0x3230
addq $0xa8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x54b2(%rip), %rdi      # 0xa2ac
leaq 0x521b(%rip), %rsi      # 0xa01c
leaq 0x548f(%rip), %rcx      # 0xa297
movl $0x151, %edx            # imm = 0x151
callq 0x3180
leaq 0x54aa(%rip), %rdi      # 0xa2c3
leaq 0x51fc(%rip), %rsi      # 0xa01c
leaq 0x5470(%rip), %rcx      # 0xa297
movl $0x154, %edx            # imm = 0x154
callq 0x3180
leaq 0x5432(%rip), %rdi      # 0xa26a
leaq 0x51dd(%rip), %rsi      # 0xa01c
leaq 0x5451(%rip), %rcx      # 0xa297
movl $0x14d, %edx            # imm = 0x14D
callq 0x3180
leaq 0x547d(%rip), %rdi      # 0xa2d4
leaq 0x51be(%rip), %rsi      # 0xa01c
leaq 0x5432(%rip), %rcx      # 0xa297
movl $0x156, %edx            # imm = 0x156
callq 0x3180
leaq 0x5498(%rip), %rdi      # 0xa30e
leaq 0x519f(%rip), %rsi      # 0xa01c
leaq 0x5413(%rip), %rcx      # 0xa297
movl $0x157, %edx            # imm = 0x157
callq 0x3180
leaq 0x54b1(%rip), %rdi      # 0xa346
leaq 0x5180(%rip), %rsi      # 0xa01c
leaq 0x53f4(%rip), %rcx      # 0xa297
movl $0x158, %edx            # imm = 0x158
callq 0x3180
leaq 0x54cc(%rip), %rdi      # 0xa380
leaq 0x5161(%rip), %rsi      # 0xa01c
leaq 0x53d5(%rip), %rcx      # 0xa297
movl $0x159, %edx            # imm = 0x159
callq 0x3180
leaq 0x54ec(%rip), %rdi      # 0xa3bf
leaq 0x5142(%rip), %rsi      # 0xa01c
leaq 0x53b6(%rip), %rcx      # 0xa297
movl $0x15b, %edx            # imm = 0x15B
callq 0x3180
leaq 0x54df(%rip), %rdi      # 0xa3d1
leaq 0x5123(%rip), %rsi      # 0xa01c
leaq 0x5397(%rip), %rcx      # 0xa297
movl $0x15e, %edx            # imm = 0x15E
callq 0x3180
leaq 0x54d3(%rip), %rdi      # 0xa3e4
leaq 0x5104(%rip), %rsi      # 0xa01c
leaq 0x5378(%rip), %rcx      # 0xa297
movl $0x15f, %edx            # imm = 0x15F
callq 0x3180
leaq 0x54c9(%rip), %rdi      # 0xa3f9
leaq 0x50e5(%rip), %rsi      # 0xa01c
leaq 0x5359(%rip), %rcx      # 0xa297
movl $0x160, %edx            # imm = 0x160
callq 0x3180
leaq 0x54bd(%rip), %rdi      # 0xa40c
leaq 0x50c6(%rip), %rsi      # 0xa01c
leaq 0x533a(%rip), %rcx      # 0xa297
movl $0x161, %edx            # imm = 0x161
callq 0x3180
leaq 0x54b3(%rip), %rdi      # 0xa421
leaq 0x50a7(%rip), %rsi      # 0xa01c
leaq 0x531b(%rip), %rcx      # 0xa297
movl $0x164, %edx            # imm = 0x164
callq 0x3180
leaq 0x54a2(%rip), %rdi      # 0xa42f
leaq 0x5088(%rip), %rsi      # 0xa01c
leaq 0x52fc(%rip), %rcx      # 0xa297
movl $0x165, %edx            # imm = 0x165
callq 0x3180
movq %rax, %rbx
movq -0x88(%rbp), %rdi
testq %rdi, %rdi
je 0x4fbe
callq 0x3230
jmp 0x4fbe
movq %rax, %rbx
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
jne 0x4fd5
jmp 0x4fdf
movq %rax, %rbx
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x4fdf
callq 0x3230
jmp 0x4fdf
movq %rax, %rbx
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
jne 0x5021
jmp 0x502b
jmp 0x5002
jmp 0x5015
jmp 0x5028
jmp 0x5002
jmp 0x5015
jmp 0x5028
jmp 0x5002
jmp 0x5015
jmp 0x5028
jmp 0x5002
jmp 0x5015
jmp 0x5028
movq %rax, %rbx
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x5018
callq 0x3230
jmp 0x5018
movq %rax, %rbx
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
je 0x502b
callq 0x3230
jmp 0x502b
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x503c
callq 0x3230
movq -0xb8(%rbp), %rdi
testq %rdi, %rdi
je 0x504d
callq 0x3230
movq %rbx, %rdi
callq 0x3400
movq %rax, %rbx
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
jne 0x5037
jmp 0x503c
movq %rax, %rbx
jmp 0x503c
movq %rax, %rbx
movq -0x38(%rbp), %rdi
cmpq %r14, %rdi
jne 0x5048
jmp 0x504d
jmp 0x5086
movq %rax, %rbx
movq -0x58(%rbp), %rdi
cmpq %r15, %rdi
jne 0x5048
jmp 0x504d
movq %rax, %rbx
jmp 0x504d