// File: /workspace/github_c_makefile_star2_O0/aremmell[P]libsir/tests/tests.c
// Function: sirtest_threadpool
bool sirtest_threadpool(void) {
    INIT(si, SIRL_ALL, SIRO_NOTIME | SIRO_NOHOST | SIRO_NONAME, 0, 0);
    bool pass = si_init;

    static const size_t num_jobs = 30;
    sir_threadpool* pool         = NULL;

    _sir_eqland(pass, _sir_threadpool_create(&pool, NUM_THREADS));
    if (pass) {
        /* dispatch a whole bunch of jobs. */
        for (size_t n = 0; n < num_jobs; n++) {
            sir_threadpool_job* job = calloc(1, sizeof(sir_threadpool_job));
            _sir_eqland(pass, NULL != job);
            if (job) {
                job->fn = &threadpool_pseudojob;
                job->data = (void*)(n + 1);
                _sir_eqland(pass, _sir_threadpool_add_job(pool, job));
                _sir_eqland(pass, sir_info("dispatched job (fn: %"PRIxPTR", data: %p)",
                    (uintptr_t)job->fn, job->data));
            }
        }

        sir_sleep_msec(1000);

        _sir_eqland(pass, sir_info("destroying thread pool..."));
        _sir_eqland(pass, _sir_threadpool_destroy(&pool));
    }

    _sir_eqland(pass, sir_cleanup());
    return PRINT_RESULT_RETURN(pass);
}

// Assembly:
subq $0x138, %rsp            # imm = 0x138
leaq 0x30(%rsp), %rdi
xorl %esi, %esi
movl $0x108, %edx            # imm = 0x108
callq 0x4210
movl $0x1500, 0x34(%rsp)     # imm = 0x1500
movw $0xff, 0x30(%rsp)
movl $0x100000, 0x3c(%rsp)   # imm = 0x100000
movw $0x0, 0x38(%rsp)
leaq 0xe88a(%rip), %rdi      # 0x1d2c7
xorl %esi, %esi
leaq 0x11ace(%rip), %rdx     # 0x20514
leaq 0xeae0(%rip), %rcx      # 0x1d52d
movl $0x86f, %r8d            # imm = 0x86F
callq 0x5ce0
testb $0x1, %al
jne 0xea5e
jmp 0xea7e
leaq 0x30(%rsp), %rdi
addq $0xe8, %rdi
movl $0x20, %ecx
leaq 0xe851(%rip), %rdx      # 0x1d2c7
movq %rcx, %rsi
callq 0x14f50
movb $0x0, 0x2f(%rsp)
leaq 0x30(%rsp), %rdi
callq 0xf560
andb $0x1, %al
movb %al, 0x2f(%rsp)
movb 0x2f(%rsp), %al
andb $0x1, %al
movb %al, 0x2e(%rsp)
movq $0x0, 0x20(%rsp)
leaq 0x20(%rsp), %rdi
movl $0x4, %esi
callq 0x1bcf0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0xf(%rsp)
jne 0xeac4
jmp 0xeacc
movb 0x2e(%rsp), %al
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %al
andb $0x1, %al
movb %al, 0x2e(%rsp)
testb $0x1, 0x2e(%rsp)
je 0xec41
movq $0x0, 0x18(%rsp)
cmpq $0x1e, 0x18(%rsp)
jae 0xebdd
movl $0x1, %edi
movl $0x10, %esi
callq 0x42d0
movq %rax, 0x10(%rsp)
xorl %eax, %eax
xorl %ecx, %ecx
cmpq 0x10(%rsp), %rcx
movb %al, 0xe(%rsp)
je 0xeb21
movb 0x2e(%rsp), %al
movb %al, 0xe(%rsp)
movb 0xe(%rsp), %al
andb $0x1, %al
movb %al, 0x2e(%rsp)
cmpq $0x0, 0x10(%rsp)
je 0xebc8
movq 0x10(%rsp), %rax
leaq 0x14d(%rip), %rcx       # 0xec90
movq %rcx, (%rax)
movq 0x18(%rsp), %rcx
addq $0x1, %rcx
movq 0x10(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x20(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0x1c340
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0xd(%rsp)
jne 0xeb76
jmp 0xeb7e
movb 0x2e(%rsp), %al
movb %al, 0xd(%rsp)
movb 0xd(%rsp), %al
andb $0x1, %al
movb %al, 0x2e(%rsp)
movq 0x10(%rsp), %rax
movq (%rax), %rsi
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdx
leaq 0x11987(%rip), %rdi     # 0x20527
movb $0x0, %al
callq 0xf770
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0xc(%rsp)
jne 0xebb6
jmp 0xebbe
movb 0x2e(%rsp), %al
movb %al, 0xc(%rsp)
movb 0xc(%rsp), %al
andb $0x1, %al
movb %al, 0x2e(%rsp)
jmp 0xebca
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
jmp 0xeaea
movl $0x3e8, %edi            # imm = 0x3E8
callq 0x53e0
leaq 0x1195c(%rip), %rdi     # 0x2054a
movb $0x0, %al
callq 0xf770
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0xb(%rsp)
jne 0xec04
jmp 0xec0c
movb 0x2e(%rsp), %al
movb %al, 0xb(%rsp)
movb 0xb(%rsp), %al
andb $0x1, %al
movb %al, 0x2e(%rsp)
leaq 0x20(%rsp), %rdi
callq 0x1bfd0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0xa(%rsp)
jne 0xec2f
jmp 0xec37
movb 0x2e(%rsp), %al
movb %al, 0xa(%rsp)
movb 0xa(%rsp), %al
andb $0x1, %al
movb %al, 0x2e(%rsp)
callq 0xf580
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x9(%rsp)
jne 0xec55
jmp 0xec5d
movb 0x2e(%rsp), %al
movb %al, 0x9(%rsp)
movb 0x9(%rsp), %al
andb $0x1, %al
movb %al, 0x2e(%rsp)
movb 0x2e(%rsp), %al
xorl %esi, %esi
andb $0x1, %al
movzbl %al, %edi
callq 0x4da0
andb $0x1, %al
addq $0x138, %rsp            # imm = 0x138
retq
nopw %cs:(%rax,%rax)