// File: /workspace/github_cpp_makefile_star2_O1/moya-lang[P]Allocator/Measure.cpp
// Function: main
int main()
{
    typedef size_t DataType;
    typedef Moya::Allocator<DataType, growSize> MemoryPoolAllocator;
    typedef Moya::Allocator<std::map<DataType, DataType>::value_type, growSize> MapMemoryPoolAllocator;

    std::cout << "Allocator performance measurement example" << std::endl;
    std::cout << "Version: 1.0" << std::endl << std::endl;

    PushFrontTest<std::forward_list<DataType>> pushFrontForwardListTestStl;
    PushFrontTest<std::forward_list<DataType, MemoryPoolAllocator>> pushFrontForwardListTestFast;
    printTestStatus("ForwardList PushFront", pushFrontForwardListTestStl, pushFrontForwardListTestFast);

    PushFrontTest<std::list<DataType>> pushFrontListTestStl;
    PushFrontTest<std::list<DataType, MemoryPoolAllocator>> pushFrontListTestFast;
    printTestStatus("List PushFront", pushFrontListTestStl, pushFrontListTestFast);

    PushBackTest<std::list<DataType>> pushBackListTestStl;
    PushBackTest<std::list<DataType, MemoryPoolAllocator>> pushBackListTestFast;
    printTestStatus("List PushBack", pushBackListTestStl, pushBackListTestFast);

    MapTest<std::map<DataType, DataType, std::less<DataType>>> mapTestStl;
    MapTest<std::map<DataType, DataType, std::less<DataType>, MapMemoryPoolAllocator>> mapTestFast;
    printTestStatus("Map", mapTestStl, mapTestFast);

    SetTest<std::set<DataType, std::less<DataType>>> setTestStl;
    SetTest<std::set<DataType, std::less<DataType>, MemoryPoolAllocator>> setTestFast;
    printTestStatus("Set", setTestStl, setTestFast);

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2e8, %rsp            # imm = 0x2E8
movq 0x5d14(%rip), %rbx      # 0x7fd8
leaq 0x2d5d(%rip), %rsi      # 0x5028
movl $0x29, %edx
movq %rbx, %rdi
callq 0x2110
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x20d0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
leaq 0x2d4c(%rip), %rsi      # 0x5052
movl $0xc, %edx
movq %rbx, %rdi
callq 0x2110
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x20d0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x20d0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20b0
xorl %eax, %eax
movq %rsp, %rsi
movq %rax, 0x8(%rsi)
movl $0x1, %ebx
movq %rbx, 0x10(%rsi)
movq %rax, 0x18(%rsi)
movl $0x400, %r14d           # imm = 0x400
movq %r14, 0x20(%rsi)
leaq 0x55fd(%rip), %rcx      # 0x7988
movq %rcx, (%rsi)
leaq 0xa0(%rsp), %rcx
xorps %xmm0, %xmm0
movups %xmm0, (%rcx)
movq %r14, 0x10(%rcx)
movq %rax, 0x18(%rcx)
movq %rbx, 0x20(%rcx)
movq %rax, 0x28(%rcx)
movq %r14, 0x30(%rcx)
leaq 0x5649(%rip), %rax      # 0x7a00
movq %rax, -0x8(%rcx)
leaq 0x2c9d(%rip), %rdi      # 0x505f
leaq 0x98(%rsp), %rdx
callq 0x2895
leaq 0x68(%rsp), %r12
movq %r12, 0x8(%r12)
movq %r12, (%r12)
xorl %eax, %eax
movq %rax, 0x10(%r12)
movq %rbx, 0x18(%r12)
movq %rax, 0x20(%r12)
movq %r14, 0x28(%r12)
leaq 0x567e(%rip), %rcx      # 0x7a78
movq %rcx, -0x8(%r12)
leaq 0x130(%rsp), %rcx
xorps %xmm0, %xmm0
movups %xmm0, (%rcx)
movq %r14, 0x10(%rcx)
leaq 0x148(%rsp), %rcx
movq %rcx, 0x8(%rcx)
movq %rcx, (%rcx)
movq %rax, 0x10(%rcx)
movq %rbx, 0x18(%rcx)
movq %rax, 0x20(%rcx)
movq %r14, 0x28(%rcx)
leaq 0x56b9(%rip), %rax      # 0x7af0
movq %rax, -0x20(%rcx)
leaq 0x2c24(%rip), %rdi      # 0x5066
leaq 0x60(%rsp), %rsi
leaq 0x128(%rsp), %rdx
callq 0x2ae6
leaq 0x30(%rsp), %r14
movq %r14, 0x8(%r14)
movq %r14, (%r14)
xorl %ebp, %ebp
movq %rbp, 0x10(%r14)
movl $0x1, %r15d
movq %r15, 0x18(%r14)
movq %rbp, 0x20(%r14)
movl $0x400, %ebx            # imm = 0x400
movq %rbx, 0x28(%r14)
leaq 0x56e4(%rip), %rax      # 0x7b68
movq %rax, -0x8(%r14)
leaq 0xe0(%rsp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %rbx, 0x10(%rax)
leaq 0xf8(%rsp), %rax
movq %rax, 0x8(%rax)
movq %rax, (%rax)
movq %rbp, 0x10(%rax)
movq %r15, 0x18(%rax)
movq %rbp, 0x20(%rax)
movq %rbx, 0x28(%rax)
leaq 0x56e8(%rip), %rcx      # 0x7ba8
movq %rcx, -0x20(%rax)
leaq 0x2baa(%rip), %rdi      # 0x5075
leaq 0x28(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x2d37
leaq 0x1d8(%rsp), %rax
movl %ebp, (%rax)
movq %rbp, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rbp, 0x20(%rax)
movq %r15, 0x28(%rax)
movq %rbp, 0x30(%rax)
movq %rbx, 0x38(%rax)
leaq 0x56de(%rip), %rcx      # 0x7be8
movq %rcx, -0x10(%rax)
leaq 0x288(%rsp), %r13
xorps %xmm0, %xmm0
movups %xmm0, (%r13)
movq %rbx, 0x10(%r13)
leaq 0x2a8(%rsp), %rax
movl %ebp, (%rax)
movq %rbp, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rbp, 0x20(%rax)
movq %r15, 0x28(%rax)
movq %rbp, 0x30(%rax)
movq %rbx, 0x38(%rax)
leaq 0x5711(%rip), %rcx      # 0x7c60
movq %rcx, -0x28(%rax)
leaq 0x2b29(%rip), %rdi      # 0x5083
leaq 0x1c8(%rsp), %rsi
leaq 0x280(%rsp), %rdx
callq 0x2f88
leaq 0x188(%rsp), %rax
xorl %ecx, %ecx
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
movl $0x1, %edx
movq %rdx, 0x28(%rax)
movq %rcx, 0x30(%rax)
movl $0x400, %esi            # imm = 0x400
movq %rsi, 0x38(%rax)
leaq 0x5730(%rip), %rdi      # 0x7cd8
movq %rdi, -0x10(%rax)
leaq 0x220(%rsp), %rbp
xorps %xmm0, %xmm0
movups %xmm0, (%rbp)
movq %rsi, 0x10(%rbp)
leaq 0x240(%rsp), %rax
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
movq %rdx, 0x28(%rax)
movq %rcx, 0x30(%rax)
movq %rsi, 0x38(%rax)
leaq 0x5764(%rip), %rcx      # 0x7d50
movq %rcx, -0x28(%rax)
leaq 0x2a90(%rip), %rdi      # 0x5087
leaq 0x178(%rsp), %rsi
leaq 0x218(%rsp), %rdx
callq 0x31d9
leaq 0x578d(%rip), %rax      # 0x7da0
movq %rax, 0x218(%rsp)
movq %rbp, %rdi
callq 0x448c
leaq 0x56fe(%rip), %rax      # 0x7d28
leaq 0x180(%rsp), %rdi
movq %rax, -0x8(%rdi)
callq 0x414e
leaq 0x566e(%rip), %rax      # 0x7cb0
movq %rax, 0x280(%rsp)
movq %r13, %rdi
callq 0x3d9a
leaq 0x55df(%rip), %rax      # 0x7c38
leaq 0x1d0(%rsp), %rdi
movq %rax, -0x8(%rdi)
callq 0x3a5e
leaq 0x54cf(%rip), %rbx      # 0x7b40
movq %rbx, 0xd8(%rsp)
leaq 0xe0(%rsp), %rdi
callq 0x37f0
leaq 0x543b(%rip), %r15      # 0x7ac8
movq %r15, 0x28(%rsp)
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x26b1
movq (%rdi), %r13
movl $0x18, %esi
callq 0x20f0
movq %r13, %rdi
cmpq %r14, %r13
jne 0x269c
movq %rbx, 0x128(%rsp)
leaq 0x130(%rsp), %rdi
callq 0x37f0
movq %r15, 0x60(%rsp)
movq 0x68(%rsp), %rdi
cmpq %r12, %rdi
je 0x26ea
movq (%rdi), %rbx
movl $0x18, %esi
callq 0x20f0
movq %rbx, %rdi
cmpq %r12, %rbx
jne 0x26d5
leaq 0x535f(%rip), %rax      # 0x7a50
movq %rax, 0x98(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x3638
leaq 0x52cb(%rip), %rax      # 0x79d8
movq %rax, (%rsp)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x2730
movq (%rdi), %rbx
movl $0x10, %esi
callq 0x20f0
movq %rbx, %rdi
testq %rbx, %rbx
jne 0x271b
xorl %eax, %eax
addq $0x2e8, %rsp            # imm = 0x2E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r15
leaq 0x5652(%rip), %rax      # 0x7da0
movq %rax, 0x218(%rsp)
movq %rbp, %rdi
callq 0x448c
leaq 0x55c3(%rip), %rax      # 0x7d28
leaq 0x180(%rsp), %rdi
movq %rax, -0x8(%rdi)
callq 0x414e
jmp 0x277b
movq %rax, %r15
leaq 0x552e(%rip), %rax      # 0x7cb0
movq %rax, 0x280(%rsp)
movq %r13, %rdi
callq 0x3d9a
leaq 0x549f(%rip), %rax      # 0x7c38
leaq 0x1d0(%rsp), %rdi
movq %rax, -0x8(%rdi)
callq 0x3a5e
jmp 0x27af
movq %rax, %r15
leaq 0x538a(%rip), %rax      # 0x7b40
movq %rax, 0xd8(%rsp)
leaq 0xe0(%rsp), %rdi
callq 0x37f0
leaq 0x52f6(%rip), %rax      # 0x7ac8
movq %rax, 0x28(%rsp)
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x27fb
movq (%rdi), %rbx
movl $0x18, %esi
callq 0x20f0
movq %rbx, %rdi
cmpq %r14, %rbx
jne 0x27e1
jmp 0x27fb
movq %rax, %r15
leaq 0x533e(%rip), %rax      # 0x7b40
movq %rax, 0x128(%rsp)
leaq 0x130(%rsp), %rdi
callq 0x37f0
leaq 0x52aa(%rip), %rax      # 0x7ac8
movq %rax, 0x60(%rsp)
movq 0x68(%rsp), %rdi
cmpq %r12, %rdi
je 0x2847
movq (%rdi), %rbx
movl $0x18, %esi
callq 0x20f0
movq %rbx, %rdi
cmpq %r12, %rbx
jne 0x282d
jmp 0x2847
movq %rax, %r15
leaq 0x5202(%rip), %rax      # 0x7a50
movq %rax, 0x98(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x3638
leaq 0x516e(%rip), %rax      # 0x79d8
movq %rax, (%rsp)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x288d
movq (%rdi), %rbx
movl $0x10, %esi
callq 0x20f0
movq %rbx, %rdi
testq %rbx, %rbx
jne 0x2878
movq %r15, %rdi
callq 0x2160