// File: /workspace/github_cpp_makefile_star2_O2/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 %rbx
subq $0x1c8, %rsp            # imm = 0x1C8
movl %esi, %ebp
movq %rdi, %rbx
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x2cc6
leaq 0xe8(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x2dbc
leaq 0xb0(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x319c
leaq 0x190(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x32e2
leaq 0x78(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x365e
leaq 0x40(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x3976
leaq 0x158(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x3d50
leaq 0x120(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x404e
leaq 0x8(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x22e0
testb %al, %al
jne 0x2476
movq 0x8bcb(%rip), %rdi      # 0xafd8
leaq 0x4bf0(%rip), %rsi      # 0x7004
callq 0x20d0
movq %rax, %rdi
callq 0x2070
movq %rbx, %rdi
callq 0x2c6f
movq 0x8ba8(%rip), %rdi      # 0xafd8
leaq 0x4bd4(%rip), %rsi      # 0x700b
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0x8(%rsp), %rdi
callq 0x2338
movq 0x8b83(%rip), %rdi      # 0xafd8
leaq 0x4bb9(%rip), %rsi      # 0x7015
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0x120(%rsp), %rdi
callq 0x2338
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x22e0
testb %al, %al
jne 0x24fc
movq 0x8b45(%rip), %rdi      # 0xafd8
leaq 0x4b6a(%rip), %rsi      # 0x7004
callq 0x20d0
movq %rax, %rdi
callq 0x2070
movq %rbx, %rdi
callq 0x2c6f
movq 0x8b22(%rip), %rdi      # 0xafd8
leaq 0x4b4e(%rip), %rsi      # 0x700b
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0x8(%rsp), %rdi
callq 0x2338
movq 0x8afd(%rip), %rdi      # 0xafd8
leaq 0x4b42(%rip), %rsi      # 0x7024
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0xb0(%rsp), %rdi
callq 0x2338
leaq 0x8(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x22e0
testb %al, %al
jne 0x257c
movq 0x8ac2(%rip), %rdi      # 0xafd8
leaq 0x4ae7(%rip), %rsi      # 0x7004
callq 0x20d0
movq %rax, %rdi
callq 0x2070
movq %rbx, %rdi
callq 0x2c6f
movq 0x8a9f(%rip), %rdi      # 0xafd8
leaq 0x4acb(%rip), %rsi      # 0x700b
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0x8(%rsp), %rdi
callq 0x2338
movq 0x8a7a(%rip), %rdi      # 0xafd8
leaq 0x4ac8(%rip), %rsi      # 0x702d
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0x78(%rsp), %rdi
callq 0x2338
leaq 0x8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x22e0
testb %al, %al
jne 0x2602
movq 0x8a3f(%rip), %rdi      # 0xafd8
leaq 0x4a64(%rip), %rsi      # 0x7004
callq 0x20d0
movq %rax, %rdi
callq 0x2070
movq %rbx, %rdi
callq 0x2c6f
movq 0x8a1c(%rip), %rdi      # 0xafd8
leaq 0x4a48(%rip), %rsi      # 0x700b
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0x8(%rsp), %rdi
callq 0x2338
movq 0x89f7(%rip), %rdi      # 0xafd8
leaq 0x4a45(%rip), %rsi      # 0x702d
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0xe8(%rsp), %rdi
callq 0x2338
leaq 0x8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x22e0
testb %al, %al
jne 0x2682
movq 0x89bc(%rip), %rdi      # 0xafd8
leaq 0x49e1(%rip), %rsi      # 0x7004
callq 0x20d0
movq %rax, %rdi
callq 0x2070
movq %rbx, %rdi
callq 0x2c6f
movq 0x8999(%rip), %rdi      # 0xafd8
leaq 0x49c5(%rip), %rsi      # 0x700b
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0x8(%rsp), %rdi
callq 0x2338
movq 0x8974(%rip), %rdi      # 0xafd8
leaq 0x49d0(%rip), %rsi      # 0x703b
callq 0x20d0
movq %rax, %rdi
callq 0x2070
leaq 0x40(%rsp), %rdi
callq 0x2338
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x22e0
testb %al, %al
je 0x2781
leaq 0x8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x22e0
testb %al, %al
je 0x279a
leaq 0x8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x22e0
testb %al, %al
je 0x27b3
leaq 0x8(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x22e0
testb %al, %al
je 0x27cc
leaq 0x8(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x22e0
testb %al, %al
je 0x27e5
leaq 0x8(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x22e0
testb %al, %al
je 0x27fe
leaq 0x120(%rsp), %rdi
callq 0x4252
leaq 0x158(%rsp), %rdi
callq 0x427a
leaq 0x40(%rsp), %rdi
callq 0x42a2
leaq 0x78(%rsp), %rdi
callq 0x42ca
leaq 0x190(%rsp), %rdi
callq 0x42f2
leaq 0xb0(%rsp), %rdi
callq 0x431a
leaq 0xe8(%rsp), %rdi
callq 0x4342
leaq 0x8(%rsp), %rdi
callq 0x436a
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %rbp
retq
leaq 0x48bc(%rip), %rdi      # 0x7044
leaq 0x48c4(%rip), %rsi      # 0x7053
leaq 0x48c6(%rip), %rcx      # 0x705c
pushq $0x4e
jmp 0x2815
leaq 0x48e3(%rip), %rdi      # 0x7084
leaq 0x48ab(%rip), %rsi      # 0x7053
leaq 0x48ad(%rip), %rcx      # 0x705c
pushq $0x50
jmp 0x2815
leaq 0x48d8(%rip), %rdi      # 0x7092
leaq 0x4892(%rip), %rsi      # 0x7053
leaq 0x4894(%rip), %rcx      # 0x705c
pushq $0x51
jmp 0x2815
leaq 0x48cd(%rip), %rdi      # 0x70a0
leaq 0x4879(%rip), %rsi      # 0x7053
leaq 0x487b(%rip), %rcx      # 0x705c
pushq $0x52
jmp 0x2815
leaq 0x48c2(%rip), %rdi      # 0x70ae
leaq 0x4860(%rip), %rsi      # 0x7053
leaq 0x4862(%rip), %rcx      # 0x705c
pushq $0x53
jmp 0x2815
leaq 0x48b7(%rip), %rdi      # 0x70bc
leaq 0x4847(%rip), %rsi      # 0x7053
leaq 0x4849(%rip), %rcx      # 0x705c
pushq $0x54
popq %rdx
callq 0x2090
movq %rax, %rbx
jmp 0x284e
movq %rax, %rbx
jmp 0x285b
movq %rax, %rbx
jmp 0x2865
movq %rax, %rbx
jmp 0x286f
movq %rax, %rbx
jmp 0x287c
movq %rax, %rbx
jmp 0x2889
movq %rax, %rbx
jmp 0x2896
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x4252
leaq 0x158(%rsp), %rdi
callq 0x427a
leaq 0x40(%rsp), %rdi
callq 0x42a2
leaq 0x78(%rsp), %rdi
callq 0x42ca
leaq 0x190(%rsp), %rdi
callq 0x42f2
leaq 0xb0(%rsp), %rdi
callq 0x431a
leaq 0xe8(%rsp), %rdi
callq 0x4342
leaq 0x8(%rsp), %rdi
callq 0x436a
movq %rbx, %rdi
callq 0x2160