// File: /workspace/github_cpp_makefile_star2_O3/sgalkina[P]data_structures/src/main.cpp
// Function: main
int main(int argc, char* argv[]) {
  std::srand(std::time(0));
  // test_vector();
  // test_vector_map();
  // test_hash_map();
  // test_tree_map();
  // map_comparison();

  std::ofstream f("bin/benchmark.dat");
  f << "Map Addition Search Search+Add+Delete Deletion\n";
  std::cout << "benchmark vector map" << std::endl;
  f << "VectorMap" << " " << gtl::benchmark<gtl::vector_map<int, int>>();
  std::cout << "benchmark hash map" << std::endl;
  f << "HashMap" << " " << gtl::benchmark<gtl::hash_map<int, int, std::hash<int>>>();
  std::cout << "benchmark tree map" << std::endl;
  f << "TreeMap" << " " << gtl::benchmark<gtl::tree_map<int, int>>();
  return 0;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x228, %rsp            # imm = 0x228
xorl %edi, %edi
callq 0x10d0
movl %eax, %edi
callq 0x10f0
leaq 0x6700(%rip), %rsi      # 0x816d
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
movl $0x10, %edx
callq 0x1120
leaq 0x66f9(%rip), %rsi      # 0x817f
movl $0x2f, %edx
movq %rbx, %rdi
callq 0x1140
movq 0xb53e(%rip), %rbx      # 0xcfd8
leaq 0x670e(%rip), %rsi      # 0x81af
movl $0x14, %edx
movq %rbx, %rdi
callq 0x1140
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x1100
movsbl %al, %esi
movq 0xb50c(%rip), %rdi      # 0xcfd8
callq 0x1040
movq %rax, %rdi
callq 0x10a0
leaq 0x66e4(%rip), %rsi      # 0x81c4
leaq 0x28(%rsp), %rdi
movl $0x9, %edx
callq 0x1140
leaq 0x66d8(%rip), %rsi      # 0x81ce
leaq 0x28(%rsp), %rdi
movl $0x1, %edx
callq 0x1140
leaq 0x8(%rsp), %rdi
callq 0x34d2
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
leaq 0x28(%rsp), %rdi
callq 0x1140
leaq 0x18(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x1b36
callq 0x10e0
movq 0xb49b(%rip), %rbx      # 0xcfd8
leaq 0x668c(%rip), %rsi      # 0x81d0
movl $0x12, %edx
movq %rbx, %rdi
callq 0x1140
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x1100
movsbl %al, %esi
movq 0xb469(%rip), %rdi      # 0xcfd8
callq 0x1040
movq %rax, %rdi
callq 0x10a0
leaq 0x6660(%rip), %rsi      # 0x81e3
leaq 0x28(%rsp), %rdi
movl $0x7, %edx
callq 0x1140
leaq 0x6635(%rip), %rsi      # 0x81ce
leaq 0x28(%rsp), %rdi
movl $0x1, %edx
callq 0x1140
leaq 0x8(%rsp), %rdi
callq 0x3de6
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
leaq 0x28(%rsp), %rdi
callq 0x1140
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x1bd5
callq 0x10e0
movq 0xb3fc(%rip), %rbx      # 0xcfd8
leaq 0x6608(%rip), %rsi      # 0x81eb
movl $0x12, %edx
movq %rbx, %rdi
callq 0x1140
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x1100
movsbl %al, %esi
movq 0xb3ca(%rip), %rdi      # 0xcfd8
callq 0x1040
movq %rax, %rdi
callq 0x10a0
leaq 0x65dc(%rip), %rsi      # 0x81fe
leaq 0x28(%rsp), %rdi
movl $0x7, %edx
callq 0x1140
leaq 0x6596(%rip), %rsi      # 0x81ce
leaq 0x28(%rsp), %rdi
movl $0x1, %edx
callq 0x1140
leaq 0x8(%rsp), %rdi
callq 0x46f7
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
leaq 0x28(%rsp), %rdi
callq 0x1140
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x1c74
callq 0x10e0
movq 0xb355(%rip), %rax      # 0xcfd0
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq 0x30(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, 0x28(%rsp,%rcx)
callq 0x10b0
leaq 0x120(%rsp), %rdi
callq 0x1070
xorl %eax, %eax
addq $0x228, %rsp            # imm = 0x228
popq %rbx
popq %r14
retq
jmp 0x1cb7
jmp 0x1ce2
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
jne 0x1cd9
jmp 0x1ce5
jmp 0x1ce2
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1ce5
callq 0x10e0
jmp 0x1ce5
jmp 0x1ce2
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x1170
movq %rbx, %rdi
callq 0x1190
nop