// File: /workspace/github_cpp_makefile_star2_O2/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 %rbx
subq $0x2f0, %rsp            # imm = 0x2F0
movq 0x6d25(%rip), %rbx      # 0x8fd0
leaq 0x2d5e(%rip), %rsi      # 0x5010
movq %rbx, %rdi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq 0x2d71(%rip), %rsi      # 0x503a
movq %rbx, %rdi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
movq %rax, %rdi
callq 0x2090
leaq 0x8(%rsp), %rsi
andq $0x0, 0x8(%rsi)
pushq $0x1
popq %rax
movq %rax, 0x10(%rsi)
andq $0x0, 0x18(%rsi)
movl $0x400, %ecx            # imm = 0x400
movq %rcx, 0x20(%rsi)
xorps %xmm0, %xmm0
leaq 0x1e0(%rsp), %rdx
movups %xmm0, 0x8(%rdx)
movq %rcx, 0x18(%rdx)
andq $0x0, 0x20(%rdx)
movq %rax, 0x28(%rdx)
leaq 0x664d(%rip), %rax      # 0x8970
andq $0x0, 0x30(%rdx)
movq %rax, (%rsi)
movq %rcx, 0x38(%rdx)
leaq 0x66b2(%rip), %rax      # 0x89e8
movq %rax, (%rdx)
leaq 0x2d07(%rip), %rdi      # 0x5047
callq 0x2593
leaq 0x70(%rsp), %rax
movq %rax, 0x8(%rax)
movq %rax, (%rax)
andq $0x0, 0x10(%rax)
movq $0x1, 0x18(%rax)
andq $0x0, 0x20(%rax)
movq $0x400, 0x28(%rax)      # imm = 0x400
leaq 0x66ee(%rip), %rcx      # 0x8a60
movq %rcx, -0x8(%rax)
leaq 0x190(%rsp), %rdi
callq 0x26ac
leaq 0x2cc4(%rip), %rdi      # 0x504e
leaq 0x68(%rsp), %rsi
leaq 0x190(%rsp), %rdx
callq 0x26c1
leaq 0x38(%rsp), %rax
movq %rax, 0x8(%rax)
movq %rax, (%rax)
andq $0x0, 0x10(%rax)
movq $0x1, 0x18(%rax)
andq $0x0, 0x20(%rax)
movq $0x400, 0x28(%rax)      # imm = 0x400
leaq 0x6787(%rip), %rcx      # 0x8b50
movq %rcx, -0x8(%rax)
leaq 0x140(%rsp), %rdi
callq 0x27da
leaq 0x2c7c(%rip), %rdi      # 0x505d
leaq 0x30(%rsp), %rsi
leaq 0x140(%rsp), %rdx
callq 0x27ef
leaq 0xf0(%rsp), %rdi
callq 0x2908
leaq 0x288(%rsp), %rdi
callq 0x291e
leaq 0x2c57(%rip), %rdi      # 0x506b
leaq 0xf0(%rsp), %rsi
leaq 0x288(%rsp), %rdx
callq 0x2933
leaq 0xa0(%rsp), %rdi
callq 0x2a4c
leaq 0x220(%rsp), %rdi
callq 0x2a62
leaq 0x2c25(%rip), %rdi      # 0x506f
leaq 0xa0(%rsp), %rsi
leaq 0x220(%rsp), %rdx
callq 0x2a77
leaq 0x220(%rsp), %rdi
callq 0x2b90
leaq 0xa0(%rsp), %rdi
callq 0x2ba4
leaq 0x288(%rsp), %rdi
callq 0x2bb8
leaq 0xf0(%rsp), %rdi
callq 0x2bcc
leaq 0x140(%rsp), %rdi
callq 0x2be0
leaq 0x30(%rsp), %rdi
callq 0x2bf4
leaq 0x190(%rsp), %rdi
callq 0x2be0
leaq 0x68(%rsp), %rdi
callq 0x2bf4
leaq 0x1e0(%rsp), %rdi
callq 0x2c08
leaq 0x8(%rsp), %rdi
callq 0x2c1c
xorl %eax, %eax
addq $0x2f0, %rsp            # imm = 0x2F0
popq %rbx
retq
movq %rax, %rbx
leaq 0x220(%rsp), %rdi
callq 0x2b90
jmp 0x24f8
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x2ba4
jmp 0x250c
jmp 0x2509
movq %rax, %rbx
leaq 0x288(%rsp), %rdi
callq 0x2bb8
jmp 0x251e
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x2bcc
jmp 0x2532
jmp 0x252f
movq %rax, %rbx
leaq 0x140(%rsp), %rdi
callq 0x2be0
leaq 0x30(%rsp), %rdi
callq 0x2bf4
leaq 0x190(%rsp), %rdi
callq 0x2be0
leaq 0x68(%rsp), %rdi
callq 0x2bf4
leaq 0x1e0(%rsp), %rdi
callq 0x2c08
leaq 0x8(%rsp), %rdi
callq 0x2c1c
movq %rbx, %rdi
callq 0x2160
movq %rax, %rbx
jmp 0x253f
movq %rax, %rbx
jmp 0x2549
movq %rax, %rbx
jmp 0x2556
movq %rax, %rbx
jmp 0x2560