// File: /workspace/github_cpp_makefile_star2_O3/lemire[P]runningmaxmin/unit.cpp
// Function: test(std::vector<double, std::allocator<double>>, unsigned int)
void test(std::vector<floattype> data, uint width = 3) {

    slowmaxmin A(data, width);
    lemiremaxmin C(data, width);
    lemiremaxminwrap Cw(data, width);
    simplelemiremaxmin G(data, width);
    GilKimmel D(data, width);
    vanHerkGilWermanmaxmin B(data, width);
    lemirebitmapmaxmin E(data, width);
    monowedgewrap M(data,width);
    if (!compare(A, M)) {
        std::cout << "array " << std::endl;
        display(data);
        std::cout << "solution " << std::endl;
        display(A);
        std::cout << "monowedgewrap " << std::endl;
        display(M);
    }
    if (!compare(A, Cw)) {
        std::cout << "array " << std::endl;
        display(data);
        std::cout << "solution " << std::endl;
        display(A);
        std::cout << "lemirew " << std::endl;
        display(Cw);
    }

    if (!compare(A, D)) {
        std::cout << "array " << std::endl;
        display(data);
        std::cout << "solution " << std::endl;
        display(A);
        std::cout << "lemiremaxmin " << std::endl;
        display(D);
    }
    if (!compare(A, C)) {
        std::cout << "array " << std::endl;
        display(data);
        std::cout << "solution " << std::endl;
        display(A);
        std::cout << "lemiremaxmin " << std::endl;
        display(C);
    }
    if (!compare(A, B)) {
        std::cout << "array " << std::endl;
        display(data);
        std::cout << "solution " << std::endl;
        display(A);
        std::cout << "vanHerk " << std::endl;
        display(B);
    }
    assert(compare(A, Cw));

    assert(compare(A, C));
    assert(compare(A, B));
    assert(compare(A, D));
    assert(compare(A, G));
    assert(compare(A, E));
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1c8, %rsp            # imm = 0x1C8
movl %esi, %ebp
movq %rdi, %rbx
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x3506
leaq 0xe8(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x361a
leaq 0xb0(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x3e2c
leaq 0x190(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x3fc6
leaq 0x78(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x479c
leaq 0x40(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x4b22
leaq 0x158(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x4f26
leaq 0x120(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x5244
leaq 0x8(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x235b
testb %al, %al
jne 0x26bc
movq 0x8a6d(%rip), %r14      # 0xafd8
leaq 0x5aee(%rip), %rsi      # 0x8060
movl $0x6, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x8a3b(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r13
movq 0x8(%rbx), %rbp
cmpq %rbp, %r13
je 0x25ee
movq 0x8a18(%rip), %r15      # 0xafd8
leaq 0x5ad7(%rip), %r12      # 0x809e
vmovsd (%r13), %xmm0
movq %r15, %rdi
callq 0x2160
movl $0x1, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x2110
addq $0x8, %r13
cmpq %rbp, %r13
jne 0x25c7
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x89cc(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x89b8(%rip), %r14      # 0xafd8
leaq 0x5a40(%rip), %rsi      # 0x8067
movl $0x9, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x8986(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b3
movq 0x8968(%rip), %r14      # 0xafd8
leaq 0x59fa(%rip), %rsi      # 0x8071
movl $0xe, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x8936(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x120(%rsp), %rdi
callq 0x23b3
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x235b
testb %al, %al
jne 0x282e
movq 0x88fb(%rip), %r14      # 0xafd8
leaq 0x597c(%rip), %rsi      # 0x8060
movl $0x6, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x88c9(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r13
movq 0x8(%rbx), %rbp
cmpq %rbp, %r13
je 0x2760
movq 0x88a6(%rip), %r15      # 0xafd8
leaq 0x5965(%rip), %r12      # 0x809e
vmovsd (%r13), %xmm0
movq %r15, %rdi
callq 0x2160
movl $0x1, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x2110
addq $0x8, %r13
cmpq %rbp, %r13
jne 0x2739
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x885a(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x8846(%rip), %r14      # 0xafd8
leaq 0x58ce(%rip), %rsi      # 0x8067
movl $0x9, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x8814(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b3
movq 0x87f6(%rip), %r14      # 0xafd8
leaq 0x5897(%rip), %rsi      # 0x8080
movl $0x8, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x87c4(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0xb0(%rsp), %rdi
callq 0x23b3
leaq 0x8(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x235b
testb %al, %al
jne 0x299a
movq 0x878c(%rip), %r14      # 0xafd8
leaq 0x580d(%rip), %rsi      # 0x8060
movl $0x6, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x875a(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r13
movq 0x8(%rbx), %rbp
cmpq %rbp, %r13
je 0x28cf
movq 0x8737(%rip), %r15      # 0xafd8
leaq 0x57f6(%rip), %r12      # 0x809e
vmovsd (%r13), %xmm0
movq %r15, %rdi
callq 0x2160
movl $0x1, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x2110
addq $0x8, %r13
cmpq %rbp, %r13
jne 0x28a8
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x86eb(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x86d7(%rip), %r14      # 0xafd8
leaq 0x575f(%rip), %rsi      # 0x8067
movl $0x9, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x86a5(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b3
movq 0x8687(%rip), %r14      # 0xafd8
leaq 0x5731(%rip), %rsi      # 0x8089
movl $0xd, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x8655(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x78(%rsp), %rdi
callq 0x23b3
leaq 0x8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x235b
testb %al, %al
jne 0x2b0c
movq 0x861d(%rip), %r14      # 0xafd8
leaq 0x569e(%rip), %rsi      # 0x8060
movl $0x6, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x85eb(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r13
movq 0x8(%rbx), %rbp
cmpq %rbp, %r13
je 0x2a3e
movq 0x85c8(%rip), %r15      # 0xafd8
leaq 0x5687(%rip), %r12      # 0x809e
vmovsd (%r13), %xmm0
movq %r15, %rdi
callq 0x2160
movl $0x1, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x2110
addq $0x8, %r13
cmpq %rbp, %r13
jne 0x2a17
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x857c(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x8568(%rip), %r14      # 0xafd8
leaq 0x55f0(%rip), %rsi      # 0x8067
movl $0x9, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x8536(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b3
movq 0x8518(%rip), %r14      # 0xafd8
leaq 0x55c2(%rip), %rsi      # 0x8089
movl $0xd, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x84e6(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0xe8(%rsp), %rdi
callq 0x23b3
leaq 0x8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x235b
testb %al, %al
jne 0x2c78
movq 0x84ae(%rip), %r14      # 0xafd8
leaq 0x552f(%rip), %rsi      # 0x8060
movl $0x6, %edx
movq %r14, %rdi
callq 0x2110
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x847c(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r12
movq 0x8(%rbx), %r13
cmpq %r13, %r12
je 0x2bad
movq 0x8459(%rip), %rbx      # 0xafd8
leaq 0x5518(%rip), %r15      # 0x809e
vmovsd (%r12), %xmm0
movq %rbx, %rdi
callq 0x2160
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x2110
addq $0x8, %r12
cmpq %r13, %r12
jne 0x2b86
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x840d(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x83f9(%rip), %rbx      # 0xafd8
leaq 0x5481(%rip), %rsi      # 0x8067
movl $0x9, %edx
movq %rbx, %rdi
callq 0x2110
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x83c7(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b3
movq 0x83a9(%rip), %rbx      # 0xafd8
leaq 0x5461(%rip), %rsi      # 0x8097
movl $0x8, %edx
movq %rbx, %rdi
callq 0x2110
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x8377(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x40(%rsp), %rdi
callq 0x23b3
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x235b
testb %al, %al
je 0x2ec3
leaq 0x8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x235b
testb %al, %al
je 0x2ee2
leaq 0x8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x235b
testb %al, %al
je 0x2f01
leaq 0x8(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x235b
testb %al, %al
je 0x2f20
leaq 0x8(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x235b
testb %al, %al
je 0x2f3f
leaq 0x8(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x235b
testb %al, %al
je 0x2f5e
leaq 0x805b(%rip), %rax      # 0xad70
addq $0x10, %rax
movq %rax, 0x120(%rsp)
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x2d33
callq 0x20e0
movq 0x128(%rsp), %rdi
testq %rdi, %rdi
je 0x2d45
callq 0x20e0
leaq 0x7fdc(%rip), %rax      # 0xad28
addq $0x10, %rax
movq %rax, 0x158(%rsp)
movq 0x178(%rsp), %rdi
testq %rdi, %rdi
je 0x2d6a
callq 0x20e0
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0x2d7c
callq 0x20e0
leaq 0x7f5d(%rip), %rax      # 0xace0
addq $0x10, %rax
movq %rax, 0x40(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x2d9b
callq 0x20e0
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x2daa
callq 0x20e0
leaq 0x7ee7(%rip), %rax      # 0xac98
addq $0x10, %rax
movq %rax, 0x78(%rsp)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x2dcc
callq 0x20e0
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x2dde
callq 0x20e0
leaq 0x7e6b(%rip), %rax      # 0xac50
addq $0x10, %rax
movq %rax, 0x190(%rsp)
movq 0x1b0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e03
callq 0x20e0
movq 0x198(%rsp), %rdi
testq %rdi, %rdi
je 0x2e15
callq 0x20e0
leaq 0x7dec(%rip), %rax      # 0xac08
addq $0x10, %rax
movq %rax, 0xb0(%rsp)
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e3a
callq 0x20e0
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e4c
callq 0x20e0
leaq 0x7d6d(%rip), %rax      # 0xabc0
addq $0x10, %rax
movq %rax, 0xe8(%rsp)
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x2e71
callq 0x20e0
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e83
callq 0x20e0
leaq 0x7cde(%rip), %rax      # 0xab68
addq $0x10, %rax
movq %rax, 0x8(%rsp)
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x2ea2
callq 0x20e0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x2eb1
callq 0x20e0
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x51d6(%rip), %rdi      # 0x80a0
leaq 0x51de(%rip), %rsi      # 0x80af
leaq 0x51e0(%rip), %rcx      # 0x80b8
movl $0x4e, %edx
callq 0x20a0
leaq 0x51f7(%rip), %rdi      # 0x80e0
leaq 0x51bf(%rip), %rsi      # 0x80af
leaq 0x51c1(%rip), %rcx      # 0x80b8
movl $0x50, %edx
callq 0x20a0
leaq 0x51e6(%rip), %rdi      # 0x80ee
leaq 0x51a0(%rip), %rsi      # 0x80af
leaq 0x51a2(%rip), %rcx      # 0x80b8
movl $0x51, %edx
callq 0x20a0
leaq 0x51d5(%rip), %rdi      # 0x80fc
leaq 0x5181(%rip), %rsi      # 0x80af
leaq 0x5183(%rip), %rcx      # 0x80b8
movl $0x52, %edx
callq 0x20a0
leaq 0x51c4(%rip), %rdi      # 0x810a
leaq 0x5162(%rip), %rsi      # 0x80af
leaq 0x5164(%rip), %rcx      # 0x80b8
movl $0x53, %edx
callq 0x20a0
leaq 0x51b3(%rip), %rdi      # 0x8118
leaq 0x5143(%rip), %rsi      # 0x80af
leaq 0x5145(%rip), %rcx      # 0x80b8
movl $0x54, %edx
callq 0x20a0
movq %rax, %rbx
jmp 0x2fba
movq %rax, %rbx
jmp 0x2fc7
movq %rax, %rbx
jmp 0x2fd1
movq %rax, %rbx
jmp 0x2fdb
movq %rax, %rbx
jmp 0x2fe8
movq %rax, %rbx
jmp 0x2ff5
movq %rax, %rbx
jmp 0x3002
jmp 0x2faa
jmp 0x2faa
jmp 0x2faa
jmp 0x2faa
jmp 0x2faa
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x552e
leaq 0x158(%rsp), %rdi
callq 0x5560
leaq 0x40(%rsp), %rdi
callq 0x5592
leaq 0x78(%rsp), %rdi
callq 0x55c4
leaq 0x190(%rsp), %rdi
callq 0x55f6
leaq 0xb0(%rsp), %rdi
callq 0x5628
leaq 0xe8(%rsp), %rdi
callq 0x565a
leaq 0x8(%rsp), %rdi
callq 0x568c
movq %rbx, %rdi
callq 0x2190