// File: migueeelvargas[P]Auto-Complete/benchdict.cpp
// Function: main
int main(int argc, char* argv[]) {
  // Check for arguments
  if(argc != 5) {
    std::cout << "Invalid number of arguments." << std::endl;
    std::cout << "Usage: ./benchdict minSize stepSize iterations dictionary" << std::endl;
    return -1;
  }

  // Make a vector loaded with words not in the dictionary.
  std::vector<std::string> words;
  words.push_back("Hello");
  words.push_back("my");
  words.push_back("name");
  words.push_back("is");
  words.push_back("Miguel Angel");
  words.push_back("Vargas");
  words.push_back("Ok");
  words.push_back("Bye");

  // Calls the different dictionary tests.
  testTrie(argv[4],atoi(argv[1]),atoi(argv[2]), atoi(argv[3]), words);
  testBST(argv[4], atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), words);
  testHT(argv[4], atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), words);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2e0, %rsp            # imm = 0x2E0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x5, -0x8(%rbp)
je 0x375f
movq 0x118c2(%rip), %rdi     # 0x14fd8
leaq 0xa8e7(%rip), %rsi      # 0xe004
callq 0x3210
movq %rax, %rdi
movq 0x1189c(%rip), %rsi     # 0x14fc8
callq 0x3250
movq 0x118a0(%rip), %rdi     # 0x14fd8
leaq 0xa8e2(%rip), %rsi      # 0xe021
callq 0x3210
movq %rax, %rdi
movq 0x1187a(%rip), %rsi     # 0x14fc8
callq 0x3250
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x3c9d
leaq -0x28(%rbp), %rdi
callq 0x4b30
leaq -0x49(%rbp), %rdi
movq %rdi, -0x240(%rbp)
callq 0x33d0
movq -0x240(%rbp), %rdx
leaq 0xa8d5(%rip), %rsi      # 0xe05b
leaq -0x48(%rbp), %rdi
callq 0x4c60
jmp 0x3791
leaq -0x28(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4c30
jmp 0x37a0
leaq -0x48(%rbp), %rdi
callq 0x3170
leaq -0x49(%rbp), %rdi
callq 0x3280
leaq -0x81(%rbp), %rdi
movq %rdi, -0x248(%rbp)
callq 0x33d0
movq -0x248(%rbp), %rdx
leaq 0xa88e(%rip), %rsi      # 0xe061
leaq -0x80(%rbp), %rdi
callq 0x4c60
jmp 0x37de
leaq -0x28(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x4c30
jmp 0x37ed
leaq -0x80(%rbp), %rdi
callq 0x3170
leaq -0x81(%rbp), %rdi
callq 0x3280
leaq -0xa9(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x33d0
movq -0x250(%rbp), %rdx
leaq 0xa841(%rip), %rsi      # 0xe064
leaq -0xa8(%rbp), %rdi
callq 0x4c60
jmp 0x3831
leaq -0x28(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x4c30
jmp 0x3843
leaq -0xa8(%rbp), %rdi
callq 0x3170
leaq -0xa9(%rbp), %rdi
callq 0x3280
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x33d0
movq -0x258(%rbp), %rdx
leaq 0xa7ed(%rip), %rsi      # 0xe069
leaq -0xd0(%rbp), %rdi
callq 0x4c60
jmp 0x388a
leaq -0x28(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x4c30
jmp 0x389c
leaq -0xd0(%rbp), %rdi
callq 0x3170
leaq -0xd1(%rbp), %rdi
callq 0x3280
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x260(%rbp)
callq 0x33d0
movq -0x260(%rbp), %rdx
leaq 0xa797(%rip), %rsi      # 0xe06c
leaq -0xf8(%rbp), %rdi
callq 0x4c60
jmp 0x38e3
leaq -0x28(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x4c30
jmp 0x38f5
leaq -0xf8(%rbp), %rdi
callq 0x3170
leaq -0xf9(%rbp), %rdi
callq 0x3280
leaq -0x121(%rbp), %rdi
movq %rdi, -0x268(%rbp)
callq 0x33d0
movq -0x268(%rbp), %rdx
leaq 0xa74b(%rip), %rsi      # 0xe079
leaq -0x120(%rbp), %rdi
callq 0x4c60
jmp 0x393c
leaq -0x28(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x4c30
jmp 0x394e
leaq -0x120(%rbp), %rdi
callq 0x3170
leaq -0x121(%rbp), %rdi
callq 0x3280
leaq -0x149(%rbp), %rdi
movq %rdi, -0x270(%rbp)
callq 0x33d0
movq -0x270(%rbp), %rdx
leaq 0xa6f9(%rip), %rsi      # 0xe080
leaq -0x148(%rbp), %rdi
callq 0x4c60
jmp 0x3995
leaq -0x28(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x4c30
jmp 0x39a7
leaq -0x148(%rbp), %rdi
callq 0x3170
leaq -0x149(%rbp), %rdi
callq 0x3280
leaq -0x171(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x33d0
movq -0x278(%rbp), %rdx
leaq 0xa6a3(%rip), %rsi      # 0xe083
leaq -0x170(%rbp), %rdi
callq 0x4c60
jmp 0x39ee
leaq -0x28(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x4c30
jmp 0x3a00
leaq -0x170(%rbp), %rdi
callq 0x3170
leaq -0x171(%rbp), %rdi
callq 0x3280
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x288(%rbp)
leaq -0x199(%rbp), %rdi
movq %rdi, -0x280(%rbp)
callq 0x33d0
movq -0x288(%rbp), %rsi
movq -0x280(%rbp), %rdx
leaq -0x198(%rbp), %rdi
callq 0x4c60
jmp 0x3a56
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x3380
movl %eax, -0x294(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x3380
movl %eax, -0x290(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x3380
movl %eax, -0x28c(%rbp)
leaq -0x1b8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x4d10
jmp 0x3aa1
movl -0x28c(%rbp), %ecx
movl -0x290(%rbp), %edx
movl -0x294(%rbp), %esi
leaq -0x198(%rbp), %rdi
leaq -0x1b8(%rbp), %r8
callq 0x3f60
jmp 0x3ac8
leaq -0x1b8(%rbp), %rdi
callq 0x4b50
leaq -0x198(%rbp), %rdi
callq 0x3170
leaq -0x199(%rbp), %rdi
callq 0x3280
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x2a8(%rbp)
leaq -0x1d9(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
callq 0x33d0
movq -0x2a8(%rbp), %rsi
movq -0x2a0(%rbp), %rdx
leaq -0x1d8(%rbp), %rdi
callq 0x4c60
jmp 0x3b2a
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x3380
movl %eax, -0x2b4(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x3380
movl %eax, -0x2b0(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x3380
movl %eax, -0x2ac(%rbp)
leaq -0x1f8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x4d10
jmp 0x3b75
movl -0x2ac(%rbp), %ecx
movl -0x2b0(%rbp), %edx
movl -0x2b4(%rbp), %esi
leaq -0x1d8(%rbp), %rdi
leaq -0x1f8(%rbp), %r8
callq 0x4350
jmp 0x3b9c
leaq -0x1f8(%rbp), %rdi
callq 0x4b50
leaq -0x1d8(%rbp), %rdi
callq 0x3170
leaq -0x1d9(%rbp), %rdi
callq 0x3280
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x2c8(%rbp)
leaq -0x219(%rbp), %rdi
movq %rdi, -0x2c0(%rbp)
callq 0x33d0
movq -0x2c8(%rbp), %rsi
movq -0x2c0(%rbp), %rdx
leaq -0x218(%rbp), %rdi
callq 0x4c60
jmp 0x3bfe
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x3380
movl %eax, -0x2d4(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x3380
movl %eax, -0x2d0(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x3380
movl %eax, -0x2cc(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x4d10
jmp 0x3c49
movl -0x2cc(%rbp), %ecx
movl -0x2d0(%rbp), %edx
movl -0x2d4(%rbp), %esi
leaq -0x218(%rbp), %rdi
leaq -0x238(%rbp), %r8
callq 0x4740
jmp 0x3c70
leaq -0x238(%rbp), %rdi
callq 0x4b50
leaq -0x218(%rbp), %rdi
callq 0x3170
leaq -0x219(%rbp), %rdi
callq 0x3280
leaq -0x28(%rbp), %rdi
callq 0x4b50
movl -0x4(%rbp), %eax
addq $0x2e0, %rsp            # imm = 0x2E0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3ccc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x3170
leaq -0x49(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3cfd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x3170
leaq -0x81(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3d34
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x3170
leaq -0xa9(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3d6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x3170
leaq -0xd1(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3da2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x3170
leaq -0xf9(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3dd9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x3170
leaq -0x121(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3e10
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x3170
leaq -0x149(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3e47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x3170
leaq -0x171(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3e98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3e8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0x4b50
leaq -0x198(%rbp), %rdi
callq 0x3170
leaq -0x199(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3ee9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3edd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x4b50
leaq -0x1d8(%rbp), %rdi
callq 0x3170
leaq -0x1d9(%rbp), %rdi
callq 0x3280
jmp 0x3f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3f37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3f2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x4b50
leaq -0x218(%rbp), %rdi
callq 0x3170
leaq -0x219(%rbp), %rdi
callq 0x3280
leaq -0x28(%rbp), %rdi
callq 0x4b50
movq -0x58(%rbp), %rdi
callq 0x33c0
nopw %cs:(%rax,%rax)