// File: Baobaobear[P]sort/sorttest.cpp
// Function: init_test_func_map(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, void (*)(baobao::TestClass*, unsigned long), std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, void (*)(baobao::TestClass*, unsigned long)>>>&)
void init_test_func_map(std::map<std::string, arrar_function_t> &test_func_map)
{
    // Baobaobear's function
    {
        //test_func_map["bao_insert"] = baobao_warp::baobao_insert_sort;
        test_func_map["bao_heap"] = baobao_warp::baobao_heap_sort;
        test_func_map["bao_shell"] = baobao_warp::baobao_shell_sort;
        test_func_map["bao_merge"] = baobao_warp::baobao_merge_sort;
        test_func_map["bao_mer_buf"] = baobao_warp::baobao_merge_sort_buffer;
        test_func_map["bao_mer_in"] = baobao_warp::baobao_merge_sort_in_place;
        test_func_map["bao_qsort"] = baobao_warp::baobao_quick_sort;
        test_func_map["bao_indir"] = baobao_warp::baobao_indirect_qsort;
        test_func_map["bao_tim"] = baobao_warp::baobao_tim_sort;
        test_func_map["bao_tim_buf"] = baobao_warp::baobao_tim_sort_buffer;
#if TEST_TYPE_SIMPLE < 2
        test_func_map["bao_radix_in"] = baobao_warp::baobao_radix_sort_in_place;
#endif
    }
    // https://github.com/Mrrl/GrailSort
    {
        //test_func_map["grail_in"] = baobao_warp::grail_sort_in_place;
        //test_func_map["grail_buf"] = baobao_warp::grail_sort_buf;
        test_func_map["grail_sort"] = baobao_warp::grail_sort_dynbuf;
    }
    // https://github.com/BonzaiThePenguin/WikiSort
    {
        test_func_map["wiki_sort"] = baobao_warp::wiki_sort;
    }
    // std function
    {
#ifdef BAOBAO_UNIX_STDLIB_SORT
        test_func_map["unix_heap"] = stdsort::c_heap_sort;
        test_func_map["unix_merge"] = stdsort::c_merge_sort;
#endif
        test_func_map["std::heap"] = stdsort::std_heap_sort;
        test_func_map["std::stable"] = stdsort::std_stable_sort;
        test_func_map["std_qsort"] = stdsort::c_quick_sort;
        test_func_map["std::sort"] = stdsort::std_sort;
    }
}

// Assembly:
subq $0x418, %rsp            # imm = 0x418
movq %rdi, 0x410(%rsp)
movq 0x410(%rsp), %rax
movq %rax, 0x170(%rsp)
leaq 0x3ef(%rsp), %rdi
movq %rdi, 0x178(%rsp)
callq 0x2290
movq 0x178(%rsp), %rdx
leaq 0x2461d(%rip), %rsi     # 0x27060
leaq 0x3f0(%rsp), %rdi
callq 0x2220
jmp 0x2a52
movq 0x170(%rsp), %rdi
leaq 0x3f0(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x168(%rsp)
jmp 0x2a71
movq 0x168(%rsp), %rax
leaq -0x450(%rip), %rcx      # 0x2630
movq %rcx, (%rax)
leaq 0x3f0(%rsp), %rdi
callq 0x2100
jmp 0x2a92
leaq 0x3ef(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x158(%rsp)
leaq 0x3b7(%rsp), %rdi
movq %rdi, 0x160(%rsp)
callq 0x2290
movq 0x160(%rsp), %rdx
leaq 0x24596(%rip), %rsi     # 0x27069
leaq 0x3b8(%rsp), %rdi
callq 0x2220
jmp 0x2ae2
movq 0x158(%rsp), %rdi
leaq 0x3b8(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x150(%rsp)
jmp 0x2b01
movq 0x150(%rsp), %rax
leaq -0x4b0(%rip), %rcx      # 0x2660
movq %rcx, (%rax)
leaq 0x3b8(%rsp), %rdi
callq 0x2100
jmp 0x2b22
leaq 0x3b7(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x140(%rsp)
leaq 0x38f(%rsp), %rdi
movq %rdi, 0x148(%rsp)
callq 0x2290
movq 0x148(%rsp), %rdx
leaq 0x24510(%rip), %rsi     # 0x27073
leaq 0x390(%rsp), %rdi
callq 0x2220
jmp 0x2b72
movq 0x140(%rsp), %rdi
leaq 0x390(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x138(%rsp)
jmp 0x2b91
movq 0x138(%rsp), %rax
leaq -0x510(%rip), %rcx      # 0x2690
movq %rcx, (%rax)
leaq 0x390(%rsp), %rdi
callq 0x2100
jmp 0x2bb2
leaq 0x38f(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x128(%rsp)
leaq 0x367(%rsp), %rdi
movq %rdi, 0x130(%rsp)
callq 0x2290
movq 0x130(%rsp), %rdx
leaq 0x2448a(%rip), %rsi     # 0x2707d
leaq 0x368(%rsp), %rdi
callq 0x2220
jmp 0x2c02
movq 0x128(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x120(%rsp)
jmp 0x2c21
movq 0x120(%rsp), %rax
leaq -0x540(%rip), %rcx      # 0x26f0
movq %rcx, (%rax)
leaq 0x368(%rsp), %rdi
callq 0x2100
jmp 0x2c42
leaq 0x367(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x110(%rsp)
leaq 0x33f(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0x2290
movq 0x118(%rsp), %rdx
leaq 0x24406(%rip), %rsi     # 0x27089
leaq 0x340(%rsp), %rdi
callq 0x2220
jmp 0x2c92
movq 0x110(%rsp), %rdi
leaq 0x340(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x108(%rsp)
jmp 0x2cb1
movq 0x108(%rsp), %rax
leaq -0x570(%rip), %rcx      # 0x2750
movq %rcx, (%rax)
leaq 0x340(%rsp), %rdi
callq 0x2100
jmp 0x2cd2
leaq 0x33f(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0xf8(%rsp)
leaq 0x317(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x2290
movq 0x100(%rsp), %rdx
leaq 0x24381(%rip), %rsi     # 0x27094
leaq 0x318(%rsp), %rdi
callq 0x2220
jmp 0x2d22
movq 0xf8(%rsp), %rdi
leaq 0x318(%rsp), %rsi
callq 0x5ff0
movq %rax, 0xf0(%rsp)
jmp 0x2d41
movq 0xf0(%rsp), %rax
leaq -0x5d0(%rip), %rcx      # 0x2780
movq %rcx, (%rax)
leaq 0x318(%rsp), %rdi
callq 0x2100
jmp 0x2d62
leaq 0x317(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0xe0(%rsp)
leaq 0x2ef(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x2290
movq 0xe8(%rsp), %rdx
leaq 0x242fb(%rip), %rsi     # 0x2709e
leaq 0x2f0(%rsp), %rdi
callq 0x2220
jmp 0x2db2
movq 0xe0(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0x5ff0
movq %rax, 0xd8(%rsp)
jmp 0x2dd1
movq 0xd8(%rsp), %rax
leaq -0x570(%rip), %rcx      # 0x2870
movq %rcx, (%rax)
leaq 0x2f0(%rsp), %rdi
callq 0x2100
jmp 0x2df2
leaq 0x2ef(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0xc8(%rsp)
leaq 0x2c7(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x2290
movq 0xd0(%rsp), %rdx
leaq 0x24275(%rip), %rsi     # 0x270a8
leaq 0x2c8(%rsp), %rdi
callq 0x2220
jmp 0x2e42
movq 0xc8(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
callq 0x5ff0
movq %rax, 0xc0(%rsp)
jmp 0x2e61
movq 0xc0(%rsp), %rax
leaq -0x6c0(%rip), %rcx      # 0x27b0
movq %rcx, (%rax)
leaq 0x2c8(%rsp), %rdi
callq 0x2100
jmp 0x2e82
leaq 0x2c7(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0xb0(%rsp)
leaq 0x29f(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x2290
movq 0xb8(%rsp), %rdx
leaq 0x241ed(%rip), %rsi     # 0x270b0
leaq 0x2a0(%rsp), %rdi
callq 0x2220
jmp 0x2ed2
movq 0xb0(%rsp), %rdi
leaq 0x2a0(%rsp), %rsi
callq 0x5ff0
movq %rax, 0xa8(%rsp)
jmp 0x2ef1
movq 0xa8(%rsp), %rax
leaq -0x720(%rip), %rcx      # 0x27e0
movq %rcx, (%rax)
leaq 0x2a0(%rsp), %rdi
callq 0x2100
jmp 0x2f12
leaq 0x29f(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x98(%rsp)
leaq 0x277(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x2290
movq 0xa0(%rsp), %rdx
leaq 0x24169(%rip), %rsi     # 0x270bc
leaq 0x278(%rsp), %rdi
callq 0x2220
jmp 0x2f62
movq 0x98(%rsp), %rdi
leaq 0x278(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x90(%rsp)
jmp 0x2f81
movq 0x90(%rsp), %rax
leaq -0x6f0(%rip), %rcx      # 0x28a0
movq %rcx, (%rax)
leaq 0x278(%rsp), %rdi
callq 0x2100
jmp 0x2fa2
leaq 0x277(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x80(%rsp)
leaq 0x24f(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x2290
movq 0x88(%rsp), %rdx
leaq 0x240e6(%rip), %rsi     # 0x270c9
leaq 0x250(%rsp), %rdi
callq 0x2220
jmp 0x2ff2
movq 0x80(%rsp), %rdi
leaq 0x250(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x78(%rsp)
jmp 0x300e
movq 0x78(%rsp), %rax
leaq -0x6ea(%rip), %rcx      # 0x2930
movq %rcx, (%rax)
leaq 0x250(%rsp), %rdi
callq 0x2100
jmp 0x302c
leaq 0x24f(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x68(%rsp)
leaq 0x227(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x2290
movq 0x70(%rsp), %rdx
leaq 0x24070(%rip), %rsi     # 0x270d4
leaq 0x228(%rsp), %rdi
callq 0x2220
jmp 0x3073
movq 0x68(%rsp), %rdi
leaq 0x228(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x60(%rsp)
jmp 0x308c
movq 0x60(%rsp), %rax
leaq -0x738(%rip), %rcx      # 0x2960
movq %rcx, (%rax)
leaq 0x228(%rsp), %rdi
callq 0x2100
jmp 0x30aa
leaq 0x227(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x50(%rsp)
leaq 0x1ff(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x2290
movq 0x58(%rsp), %rdx
leaq 0x23ffc(%rip), %rsi     # 0x270de
leaq 0x200(%rsp), %rdi
callq 0x2220
jmp 0x30f1
movq 0x50(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x48(%rsp)
jmp 0x310a
movq 0x48(%rsp), %rax
leaq -0xb76(%rip), %rcx      # 0x25a0
movq %rcx, (%rax)
leaq 0x200(%rsp), %rdi
callq 0x2100
jmp 0x3128
leaq 0x1ff(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x1d7(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x2290
movq 0x40(%rsp), %rdx
leaq 0x23f88(%rip), %rsi     # 0x270e8
leaq 0x1d8(%rsp), %rdi
callq 0x2220
jmp 0x316f
movq 0x38(%rsp), %rdi
leaq 0x1d8(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x30(%rsp)
jmp 0x3188
movq 0x30(%rsp), %rax
leaq -0xc24(%rip), %rcx      # 0x2570
movq %rcx, (%rax)
leaq 0x1d8(%rsp), %rdi
callq 0x2100
jmp 0x31a6
leaq 0x1d7(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x1af(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x2290
movq 0x28(%rsp), %rdx
leaq 0x23f16(%rip), %rsi     # 0x270f4
leaq 0x1b0(%rsp), %rdi
callq 0x2220
jmp 0x31ed
movq 0x20(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x5ff0
movq %rax, 0x18(%rsp)
jmp 0x3206
movq 0x18(%rsp), %rax
leaq -0xd02(%rip), %rcx      # 0x2510
movq %rcx, (%rax)
leaq 0x1b0(%rsp), %rdi
callq 0x2100
jmp 0x3224
leaq 0x1af(%rsp), %rdi
callq 0x21d0
movq 0x410(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x187(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x2290
movq 0x10(%rsp), %rdx
leaq 0x23ea2(%rip), %rsi     # 0x270fe
leaq 0x188(%rsp), %rdi
callq 0x2220
jmp 0x326b
movq 0x8(%rsp), %rdi
leaq 0x188(%rsp), %rsi
callq 0x5ff0
movq %rax, (%rsp)
jmp 0x3283
movq (%rsp), %rax
leaq -0xd4e(%rip), %rcx      # 0x2540
movq %rcx, (%rax)
leaq 0x188(%rsp), %rdi
callq 0x2100
jmp 0x32a0
leaq 0x187(%rsp), %rdi
callq 0x21d0
addq $0x418, %rsp            # imm = 0x418
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x32f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x3f0(%rsp), %rdi
callq 0x2100
jmp 0x32ee
jmp 0x32f0
leaq 0x3ef(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x333d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x3b8(%rsp), %rdi
callq 0x2100
jmp 0x333b
jmp 0x333d
leaq 0x3b7(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x338a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x390(%rsp), %rdi
callq 0x2100
jmp 0x3388
jmp 0x338a
leaq 0x38f(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x33d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x368(%rsp), %rdi
callq 0x2100
jmp 0x33d5
jmp 0x33d7
leaq 0x367(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x3424
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x2100
jmp 0x3422
jmp 0x3424
leaq 0x33f(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x3471
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x318(%rsp), %rdi
callq 0x2100
jmp 0x346f
jmp 0x3471
leaq 0x317(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x34be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0x2100
jmp 0x34bc
jmp 0x34be
leaq 0x2ef(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x350b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x2c8(%rsp), %rdi
callq 0x2100
jmp 0x3509
jmp 0x350b
leaq 0x2c7(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x3558
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x2a0(%rsp), %rdi
callq 0x2100
jmp 0x3556
jmp 0x3558
leaq 0x29f(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x35a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x278(%rsp), %rdi
callq 0x2100
jmp 0x35a3
jmp 0x35a5
leaq 0x277(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x35f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x2100
jmp 0x35f0
jmp 0x35f2
leaq 0x24f(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x363f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x228(%rsp), %rdi
callq 0x2100
jmp 0x363d
jmp 0x363f
leaq 0x227(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x368c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x200(%rsp), %rdi
callq 0x2100
jmp 0x368a
jmp 0x368c
leaq 0x1ff(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x36d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x1d8(%rsp), %rdi
callq 0x2100
jmp 0x36d7
jmp 0x36d9
leaq 0x1d7(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x3726
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x1b0(%rsp), %rdi
callq 0x2100
jmp 0x3724
jmp 0x3726
leaq 0x1af(%rsp), %rdi
callq 0x21d0
jmp 0x377d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
jmp 0x3770
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3e0(%rsp)
movl %eax, 0x3dc(%rsp)
leaq 0x188(%rsp), %rdi
callq 0x2100
jmp 0x376e
jmp 0x3770
leaq 0x187(%rsp), %rdi
callq 0x21d0
movq 0x3e0(%rsp), %rdi
callq 0x2280
movq %rax, %rdi
callq 0x6160
nopw %cs:(%rax,%rax)