// File: /workspace/github_cpp_makefile_star2_O1/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 0x3504
leaq 0xe8(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x3618
leaq 0xb0(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x3df0
leaq 0x190(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x3f84
leaq 0x78(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x4628
leaq 0x40(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x49a6
leaq 0x158(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x4da8
leaq 0x120(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x50e0
leaq 0x8(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x235a
testb %al, %al
jne 0x26bb
movq 0x8a6e(%rip), %r14      # 0xafd8
leaq 0x5aef(%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 0x8a3c(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r13
movq 0x8(%rbx), %rbp
cmpq %rbp, %r13
je 0x25ed
movq 0x8a19(%rip), %r15      # 0xafd8
leaq 0x5ad8(%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 0x25c6
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x89cd(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x89b9(%rip), %r14      # 0xafd8
leaq 0x5a41(%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 0x8987(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b2
movq 0x8969(%rip), %r14      # 0xafd8
leaq 0x59fb(%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 0x8937(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x120(%rsp), %rdi
callq 0x23b2
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x235a
testb %al, %al
jne 0x282d
movq 0x88fc(%rip), %r14      # 0xafd8
leaq 0x597d(%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 0x88ca(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r13
movq 0x8(%rbx), %rbp
cmpq %rbp, %r13
je 0x275f
movq 0x88a7(%rip), %r15      # 0xafd8
leaq 0x5966(%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 0x2738
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x885b(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x8847(%rip), %r14      # 0xafd8
leaq 0x58cf(%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 0x8815(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b2
movq 0x87f7(%rip), %r14      # 0xafd8
leaq 0x5898(%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 0x87c5(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0xb0(%rsp), %rdi
callq 0x23b2
leaq 0x8(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x235a
testb %al, %al
jne 0x2999
movq 0x878d(%rip), %r14      # 0xafd8
leaq 0x580e(%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 0x875b(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r13
movq 0x8(%rbx), %rbp
cmpq %rbp, %r13
je 0x28ce
movq 0x8738(%rip), %r15      # 0xafd8
leaq 0x57f7(%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 0x28a7
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x86ec(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x86d8(%rip), %r14      # 0xafd8
leaq 0x5760(%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 0x86a6(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b2
movq 0x8688(%rip), %r14      # 0xafd8
leaq 0x5732(%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 0x8656(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x78(%rsp), %rdi
callq 0x23b2
leaq 0x8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x235a
testb %al, %al
jne 0x2b0b
movq 0x861e(%rip), %r14      # 0xafd8
leaq 0x569f(%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 0x85ec(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r13
movq 0x8(%rbx), %rbp
cmpq %rbp, %r13
je 0x2a3d
movq 0x85c9(%rip), %r15      # 0xafd8
leaq 0x5688(%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 0x2a16
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x857d(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x8569(%rip), %r14      # 0xafd8
leaq 0x55f1(%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 0x8537(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b2
movq 0x8519(%rip), %r14      # 0xafd8
leaq 0x55c3(%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 0x84e7(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0xe8(%rsp), %rdi
callq 0x23b2
leaq 0x8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x235a
testb %al, %al
jne 0x2c77
movq 0x84af(%rip), %r14      # 0xafd8
leaq 0x5530(%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 0x847d(%rip), %r14      # 0xafd8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq (%rbx), %r12
movq 0x8(%rbx), %r13
cmpq %r13, %r12
je 0x2bac
movq 0x845a(%rip), %rbx      # 0xafd8
leaq 0x5519(%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 0x2b85
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x840e(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq 0x83fa(%rip), %rbx      # 0xafd8
leaq 0x5482(%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 0x83c8(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x23b2
movq 0x83aa(%rip), %rbx      # 0xafd8
leaq 0x5462(%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 0x8378(%rip), %rdi      # 0xafd8
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x40(%rsp), %rdi
callq 0x23b2
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x235a
testb %al, %al
je 0x2ec2
leaq 0x8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x235a
testb %al, %al
je 0x2ee1
leaq 0x8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x235a
testb %al, %al
je 0x2f00
leaq 0x8(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x235a
testb %al, %al
je 0x2f1f
leaq 0x8(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x235a
testb %al, %al
je 0x2f3e
leaq 0x8(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x235a
testb %al, %al
je 0x2f5d
leaq 0x805c(%rip), %rax      # 0xad70
addq $0x10, %rax
movq %rax, 0x120(%rsp)
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x2d32
callq 0x20e0
movq 0x128(%rsp), %rdi
testq %rdi, %rdi
je 0x2d44
callq 0x20e0
leaq 0x7fdd(%rip), %rax      # 0xad28
addq $0x10, %rax
movq %rax, 0x158(%rsp)
movq 0x178(%rsp), %rdi
testq %rdi, %rdi
je 0x2d69
callq 0x20e0
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0x2d7b
callq 0x20e0
leaq 0x7f5e(%rip), %rax      # 0xace0
addq $0x10, %rax
movq %rax, 0x40(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x2d9a
callq 0x20e0
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x2da9
callq 0x20e0
leaq 0x7ee8(%rip), %rax      # 0xac98
addq $0x10, %rax
movq %rax, 0x78(%rsp)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x2dcb
callq 0x20e0
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x2ddd
callq 0x20e0
leaq 0x7e6c(%rip), %rax      # 0xac50
addq $0x10, %rax
movq %rax, 0x190(%rsp)
movq 0x1b0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e02
callq 0x20e0
movq 0x198(%rsp), %rdi
testq %rdi, %rdi
je 0x2e14
callq 0x20e0
leaq 0x7ded(%rip), %rax      # 0xac08
addq $0x10, %rax
movq %rax, 0xb0(%rsp)
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e39
callq 0x20e0
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e4b
callq 0x20e0
leaq 0x7d6e(%rip), %rax      # 0xabc0
addq $0x10, %rax
movq %rax, 0xe8(%rsp)
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x2e70
callq 0x20e0
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e82
callq 0x20e0
leaq 0x7cdf(%rip), %rax      # 0xab68
addq $0x10, %rax
movq %rax, 0x8(%rsp)
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x2ea1
callq 0x20e0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x2eb0
callq 0x20e0
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x51d7(%rip), %rdi      # 0x80a0
leaq 0x51df(%rip), %rsi      # 0x80af
leaq 0x51e1(%rip), %rcx      # 0x80b8
movl $0x4e, %edx
callq 0x20a0
leaq 0x51f8(%rip), %rdi      # 0x80e0
leaq 0x51c0(%rip), %rsi      # 0x80af
leaq 0x51c2(%rip), %rcx      # 0x80b8
movl $0x50, %edx
callq 0x20a0
leaq 0x51e7(%rip), %rdi      # 0x80ee
leaq 0x51a1(%rip), %rsi      # 0x80af
leaq 0x51a3(%rip), %rcx      # 0x80b8
movl $0x51, %edx
callq 0x20a0
leaq 0x51d6(%rip), %rdi      # 0x80fc
leaq 0x5182(%rip), %rsi      # 0x80af
leaq 0x5184(%rip), %rcx      # 0x80b8
movl $0x52, %edx
callq 0x20a0
leaq 0x51c5(%rip), %rdi      # 0x810a
leaq 0x5163(%rip), %rsi      # 0x80af
leaq 0x5165(%rip), %rcx      # 0x80b8
movl $0x53, %edx
callq 0x20a0
leaq 0x51b4(%rip), %rdi      # 0x8118
leaq 0x5144(%rip), %rsi      # 0x80af
leaq 0x5146(%rip), %rcx      # 0x80b8
movl $0x54, %edx
callq 0x20a0
movq %rax, %rbx
jmp 0x2fb9
movq %rax, %rbx
jmp 0x2fc6
movq %rax, %rbx
jmp 0x2fd0
movq %rax, %rbx
jmp 0x2fda
movq %rax, %rbx
jmp 0x2fe7
movq %rax, %rbx
jmp 0x2ff4
movq %rax, %rbx
jmp 0x3001
jmp 0x2fa9
jmp 0x2fa9
jmp 0x2fa9
jmp 0x2fa9
jmp 0x2fa9
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x53cc
leaq 0x158(%rsp), %rdi
callq 0x53fe
leaq 0x40(%rsp), %rdi
callq 0x5430
leaq 0x78(%rsp), %rdi
callq 0x5462
leaq 0x190(%rsp), %rdi
callq 0x5494
leaq 0xb0(%rsp), %rdi
callq 0x54c6
leaq 0xe8(%rsp), %rdi
callq 0x54f8
leaq 0x8(%rsp), %rdi
callq 0x552a
movq %rbx, %rdi
callq 0x2190