// File: 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:
subq $0x2d8, %rsp            # imm = 0x2D8
movl $0x0, 0x2d4(%rsp)
movl %edi, 0x2d0(%rsp)
movq %rsi, 0x2c8(%rsp)
xorl %eax, %eax
movl %eax, %edi
callq 0x20e0
movl %eax, %edi
callq 0x2100
leaq 0xb53c(%rip), %rsi      # 0xe184
leaq 0xc8(%rsp), %rdi
movq %rdi, 0x50(%rsp)
movl $0x10, %edx
callq 0x2150
movq 0x50(%rsp), %rdi
leaq 0xb52b(%rip), %rsi      # 0xe196
callq 0x2110
jmp 0x2c72
movq 0x1035f(%rip), %rdi     # 0x12fd8
leaq 0xb546(%rip), %rsi      # 0xe1c6
callq 0x2110
movq %rax, 0x48(%rsp)
jmp 0x2c8c
movq 0x48(%rsp), %rdi
movq 0x10330(%rip), %rsi     # 0x12fc8
callq 0x2130
jmp 0x2c9f
leaq 0xb535(%rip), %rsi      # 0xe1db
leaq 0xc8(%rsp), %rdi
callq 0x2110
movq %rax, 0x40(%rsp)
jmp 0x2cba
movq 0x40(%rsp), %rdi
leaq 0xb51f(%rip), %rsi      # 0xe1e5
callq 0x2110
movq %rax, 0x38(%rsp)
jmp 0x2cd2
leaq 0x98(%rsp), %rdi
callq 0x5690
jmp 0x2ce1
movq 0x38(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x20d0
jmp 0x2cf5
leaq 0x98(%rsp), %rdi
callq 0x2070
movq 0x102cf(%rip), %rdi     # 0x12fd8
leaq 0xb4d7(%rip), %rsi      # 0xe1e7
callq 0x2110
movq %rax, 0x30(%rsp)
jmp 0x2d1c
movq 0x30(%rsp), %rdi
movq 0x102a0(%rip), %rsi     # 0x12fc8
callq 0x2130
jmp 0x2d2f
leaq 0xb4c4(%rip), %rsi      # 0xe1fa
leaq 0xc8(%rsp), %rdi
callq 0x2110
movq %rax, 0x28(%rsp)
jmp 0x2d4a
movq 0x28(%rsp), %rdi
leaq 0xb48f(%rip), %rsi      # 0xe1e5
callq 0x2110
movq %rax, 0x20(%rsp)
jmp 0x2d62
leaq 0x78(%rsp), %rdi
callq 0x5aa0
jmp 0x2d6e
movq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x20d0
jmp 0x2d7f
leaq 0x78(%rsp), %rdi
callq 0x2070
movq 0x10248(%rip), %rdi     # 0x12fd8
leaq 0xb46b(%rip), %rsi      # 0xe202
callq 0x2110
movq %rax, 0x18(%rsp)
jmp 0x2da3
movq 0x18(%rsp), %rdi
movq 0x10219(%rip), %rsi     # 0x12fc8
callq 0x2130
jmp 0x2db6
leaq 0xb458(%rip), %rsi      # 0xe215
leaq 0xc8(%rsp), %rdi
callq 0x2110
movq %rax, 0x10(%rsp)
jmp 0x2dd1
movq 0x10(%rsp), %rdi
leaq 0xb408(%rip), %rsi      # 0xe1e5
callq 0x2110
movq %rax, 0x8(%rsp)
jmp 0x2de9
leaq 0x58(%rsp), %rdi
callq 0x5eb0
jmp 0x2df5
movq 0x8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x20d0
jmp 0x2e06
leaq 0x58(%rsp), %rdi
callq 0x2070
movl $0x0, 0x2d4(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0x2170
movl 0x2d4(%rsp), %eax
addq $0x2d8, %rsp            # imm = 0x2D8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc0(%rsp)
movl %eax, 0xbc(%rsp)
jmp 0x2eae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc0(%rsp)
movl %eax, 0xbc(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x2070
jmp 0x2eae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc0(%rsp)
movl %eax, 0xbc(%rsp)
leaq 0x78(%rsp), %rdi
callq 0x2070
jmp 0x2eae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc0(%rsp)
movl %eax, 0xbc(%rsp)
leaq 0x58(%rsp), %rdi
callq 0x2070
leaq 0xc8(%rsp), %rdi
callq 0x2170
movq 0xc0(%rsp), %rdi
callq 0x21a0
nopl (%rax,%rax)