// File: narula[P]skiplists/skiplist-extra.cc
// Function: perfect_insert_test(SkipList*)
int perfect_insert_test(SkipList* sk) {
  assert(sk->lookup(99) <= 0);
  assert(sk->fastFindTest(99) < 0);
  assert(sk->fastFindNode(99) < 0);
  assert(sk->insert(99) > 0);
  assert(sk->lookup(99) > 0);
  assert(sk->fastFindNode(99) >= 0);
  assert(sk->fastFindTest(99) >= 0);
  assert(sk->insert(99) <= 0);

  assert(sk->lookup(98) <= 0);
  assert(sk->fastFindTest(98) < 0);
  assert(sk->fastFindNode(98) < 0);
  assert(sk->insert(98) > 0);
  assert(sk->lookup(98) > 0);
  assert(sk->fastFindTest(98) >= 0);
  assert(sk->fastFindNode(98) >= 0);
  assert(sk->insert(98) <= 0);

  assert(sk->insert(90) > 0);
  assert(sk->lookup(90) > 0);
  assert(sk->fastFindTest(90) >= 0);
  assert(sk->fastFindNode(90) >= 0);

  assert(sk->insert(97) > 0);
  assert(sk->lookup(97) > 0);
  assert(sk->fastFindTest(97) >= 0);
  assert(sk->fastFindNode(97) >= 0);
}

// Assembly:
pushq %rax
movq %rdi, (%rsp)
movq (%rsp), %rdi
movl $0x63, %esi
callq 0x14e0
cmpl $0x0, %eax
jg 0x337a
jmp 0x3399
leaq 0x1d5b(%rip), %rdi      # 0x50dc
leaq 0x1d68(%rip), %rsi      # 0x50f0
movl $0x1e8, %edx            # imm = 0x1E8
leaq 0x1d6e(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x63, %esi
callq 0x1780
cmpl $0x0, %eax
jge 0x33ae
jmp 0x33cd
leaq 0x1d71(%rip), %rdi      # 0x5126
leaq 0x1d34(%rip), %rsi      # 0x50f0
movl $0x1e9, %edx            # imm = 0x1E9
leaq 0x1d3a(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x63, %esi
callq 0x1550
cmpl $0x0, %eax
jge 0x33e2
jmp 0x3401
leaq 0x1d56(%rip), %rdi      # 0x513f
leaq 0x1d00(%rip), %rsi      # 0x50f0
movl $0x1ea, %edx            # imm = 0x1EA
leaq 0x1d06(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x63, %esi
callq 0x1fa0
cmpl $0x0, %eax
jle 0x3416
jmp 0x3435
leaq 0x1d3b(%rip), %rdi      # 0x5158
leaq 0x1ccc(%rip), %rsi      # 0x50f0
movl $0x1eb, %edx            # imm = 0x1EB
leaq 0x1cd2(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x63, %esi
callq 0x14e0
cmpl $0x0, %eax
jle 0x344a
jmp 0x3469
leaq 0x1d1a(%rip), %rdi      # 0x516b
leaq 0x1c98(%rip), %rsi      # 0x50f0
movl $0x1ec, %edx            # imm = 0x1EC
leaq 0x1c9e(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x63, %esi
callq 0x1550
cmpl $0x0, %eax
jl 0x347e
jmp 0x349d
leaq 0x1cf9(%rip), %rdi      # 0x517e
leaq 0x1c64(%rip), %rsi      # 0x50f0
movl $0x1ed, %edx            # imm = 0x1ED
leaq 0x1c6a(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x63, %esi
callq 0x1780
cmpl $0x0, %eax
jl 0x34b2
jmp 0x34d1
leaq 0x1cdf(%rip), %rdi      # 0x5198
leaq 0x1c30(%rip), %rsi      # 0x50f0
movl $0x1ee, %edx            # imm = 0x1EE
leaq 0x1c36(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x63, %esi
callq 0x1fa0
cmpl $0x0, %eax
jg 0x34e6
jmp 0x3505
leaq 0x1cc5(%rip), %rdi      # 0x51b2
leaq 0x1bfc(%rip), %rsi      # 0x50f0
movl $0x1ef, %edx            # imm = 0x1EF
leaq 0x1c02(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x62, %esi
callq 0x14e0
cmpl $0x0, %eax
jg 0x351a
jmp 0x3539
leaq 0x1ca5(%rip), %rdi      # 0x51c6
leaq 0x1bc8(%rip), %rsi      # 0x50f0
movl $0x1f1, %edx            # imm = 0x1F1
leaq 0x1bce(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x62, %esi
callq 0x1780
cmpl $0x0, %eax
jge 0x354e
jmp 0x356d
leaq 0x1c85(%rip), %rdi      # 0x51da
leaq 0x1b94(%rip), %rsi      # 0x50f0
movl $0x1f2, %edx            # imm = 0x1F2
leaq 0x1b9a(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x62, %esi
callq 0x1550
cmpl $0x0, %eax
jge 0x3582
jmp 0x35a1
leaq 0x1c6a(%rip), %rdi      # 0x51f3
leaq 0x1b60(%rip), %rsi      # 0x50f0
movl $0x1f3, %edx            # imm = 0x1F3
leaq 0x1b66(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x62, %esi
callq 0x1fa0
cmpl $0x0, %eax
jle 0x35b6
jmp 0x35d5
leaq 0x1c4f(%rip), %rdi      # 0x520c
leaq 0x1b2c(%rip), %rsi      # 0x50f0
movl $0x1f4, %edx            # imm = 0x1F4
leaq 0x1b32(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x62, %esi
callq 0x14e0
cmpl $0x0, %eax
jle 0x35ea
jmp 0x3609
leaq 0x1c2e(%rip), %rdi      # 0x521f
leaq 0x1af8(%rip), %rsi      # 0x50f0
movl $0x1f5, %edx            # imm = 0x1F5
leaq 0x1afe(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x62, %esi
callq 0x1780
cmpl $0x0, %eax
jl 0x361e
jmp 0x363d
leaq 0x1c0d(%rip), %rdi      # 0x5232
leaq 0x1ac4(%rip), %rsi      # 0x50f0
movl $0x1f6, %edx            # imm = 0x1F6
leaq 0x1aca(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x62, %esi
callq 0x1550
cmpl $0x0, %eax
jl 0x3652
jmp 0x3671
leaq 0x1bf3(%rip), %rdi      # 0x524c
leaq 0x1a90(%rip), %rsi      # 0x50f0
movl $0x1f7, %edx            # imm = 0x1F7
leaq 0x1a96(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x62, %esi
callq 0x1fa0
cmpl $0x0, %eax
jg 0x3686
jmp 0x36a5
leaq 0x1bd9(%rip), %rdi      # 0x5266
leaq 0x1a5c(%rip), %rsi      # 0x50f0
movl $0x1f8, %edx            # imm = 0x1F8
leaq 0x1a62(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x5a, %esi
callq 0x1fa0
cmpl $0x0, %eax
jle 0x36ba
jmp 0x36d9
leaq 0x1bb9(%rip), %rdi      # 0x527a
leaq 0x1a28(%rip), %rsi      # 0x50f0
movl $0x1fa, %edx            # imm = 0x1FA
leaq 0x1a2e(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x5a, %esi
callq 0x14e0
cmpl $0x0, %eax
jle 0x36ee
jmp 0x370d
leaq 0x1b98(%rip), %rdi      # 0x528d
leaq 0x19f4(%rip), %rsi      # 0x50f0
movl $0x1fb, %edx            # imm = 0x1FB
leaq 0x19fa(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x5a, %esi
callq 0x1780
cmpl $0x0, %eax
jl 0x3722
jmp 0x3741
leaq 0x1b77(%rip), %rdi      # 0x52a0
leaq 0x19c0(%rip), %rsi      # 0x50f0
movl $0x1fc, %edx            # imm = 0x1FC
leaq 0x19c6(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x5a, %esi
callq 0x1550
cmpl $0x0, %eax
jl 0x3756
jmp 0x3775
leaq 0x1b5d(%rip), %rdi      # 0x52ba
leaq 0x198c(%rip), %rsi      # 0x50f0
movl $0x1fd, %edx            # imm = 0x1FD
leaq 0x1992(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x61, %esi
callq 0x1fa0
cmpl $0x0, %eax
jle 0x378a
jmp 0x37a9
leaq 0x1b43(%rip), %rdi      # 0x52d4
leaq 0x1958(%rip), %rsi      # 0x50f0
movl $0x1ff, %edx            # imm = 0x1FF
leaq 0x195e(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x61, %esi
callq 0x14e0
cmpl $0x0, %eax
jle 0x37be
jmp 0x37dd
leaq 0x1b22(%rip), %rdi      # 0x52e7
leaq 0x1924(%rip), %rsi      # 0x50f0
movl $0x200, %edx            # imm = 0x200
leaq 0x192a(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x61, %esi
callq 0x1780
cmpl $0x0, %eax
jl 0x37f2
jmp 0x3811
leaq 0x1b01(%rip), %rdi      # 0x52fa
leaq 0x18f0(%rip), %rsi      # 0x50f0
movl $0x201, %edx            # imm = 0x201
leaq 0x18f6(%rip), %rcx      # 0x5102
callq 0x1070
movq (%rsp), %rdi
movl $0x61, %esi
callq 0x1550
cmpl $0x0, %eax
jl 0x3826
jmp 0x3845
leaq 0x1ae7(%rip), %rdi      # 0x5314
leaq 0x18bc(%rip), %rsi      # 0x50f0
movl $0x202, %edx            # imm = 0x202
leaq 0x18c2(%rip), %rcx      # 0x5102
callq 0x1070
ud2
nopw (%rax,%rax)