// File: shreyas-gopalakrishna[P]Concurrent-Skip-list/unit_test_3.cpp
// Function: skiplist_combined_operations()
void skiplist_combined_operations(){

    int start = (rand() % static_cast<int>(numbers_insert.size() + 1));
    int end = start + (rand() % static_cast<int>(numbers_insert.size() - start + 1));
    // cout << "Add Index: " << start << " " << end << endl;
    skiplist_add(start, end);

    start = (rand() % static_cast<int>(numbers_delete.size() + 1));
    end = start + (rand() % static_cast<int>(numbers_delete.size() - start + 1));
    // cout << "Remove Index: " << start << " " << end << endl;
    skiplist_remove(start, end);

    start = (rand() % static_cast<int>(numbers_get.size() + 1));
    end = start + (rand() % static_cast<int>(numbers_get.size() - start + 1));
    // cout << "Searching Index: " << start << " " << end << endl;
    skiplist_search(start, end);

    start = (rand() % static_cast<int>(numbers_insert.size() + 1));
    end = start + (rand() % static_cast<int>(numbers_insert.size() - start + 1));
    // cout << "Range: " << start << " " << end << endl;
    skiplist_range(start, end);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
callq 0x2070
movl %eax, -0x38(%rbp)
leaq 0x11719(%rip), %rdi     # 0x14220
callq 0x3b80
movq %rax, %rcx
movl -0x38(%rbp), %eax
addq $0x1, %rcx
cltd
idivl %ecx
movl %edx, -0x4(%rbp)
movl -0x4(%rbp), %eax
movl %eax, -0x30(%rbp)
callq 0x2070
movl %eax, -0x34(%rbp)
leaq 0x116ef(%rip), %rdi     # 0x14220
callq 0x3b80
movq %rax, %rcx
movl -0x34(%rbp), %eax
movslq -0x4(%rbp), %rdx
subq %rdx, %rcx
addq $0x1, %rcx
cltd
idivl %ecx
movl -0x30(%rbp), %eax
addl %edx, %eax
movl %eax, -0x8(%rbp)
movslq -0x4(%rbp), %rdi
movslq -0x8(%rbp), %rsi
callq 0x27d0
callq 0x2070
movl %eax, -0x2c(%rbp)
leaq 0x116ca(%rip), %rdi     # 0x14238
callq 0x3b80
movq %rax, %rcx
movl -0x2c(%rbp), %eax
addq $0x1, %rcx
cltd
idivl %ecx
movl %edx, -0x4(%rbp)
movl -0x4(%rbp), %eax
movl %eax, -0x24(%rbp)
callq 0x2070
movl %eax, -0x28(%rbp)
leaq 0x116a0(%rip), %rdi     # 0x14238
callq 0x3b80
movq %rax, %rcx
movl -0x28(%rbp), %eax
movslq -0x4(%rbp), %rdx
subq %rdx, %rcx
addq $0x1, %rcx
cltd
idivl %ecx
movl -0x24(%rbp), %eax
addl %edx, %eax
movl %eax, -0x8(%rbp)
movslq -0x4(%rbp), %rdi
movslq -0x8(%rbp), %rsi
callq 0x2950
callq 0x2070
movl %eax, -0x20(%rbp)
leaq 0x1167b(%rip), %rdi     # 0x14250
callq 0x3b80
movq %rax, %rcx
movl -0x20(%rbp), %eax
addq $0x1, %rcx
cltd
idivl %ecx
movl %edx, -0x4(%rbp)
movl -0x4(%rbp), %eax
movl %eax, -0x18(%rbp)
callq 0x2070
movl %eax, -0x1c(%rbp)
leaq 0x11651(%rip), %rdi     # 0x14250
callq 0x3b80
movq %rax, %rcx
movl -0x1c(%rbp), %eax
movslq -0x4(%rbp), %rdx
subq %rdx, %rcx
addq $0x1, %rcx
cltd
idivl %ecx
movl -0x18(%rbp), %eax
addl %edx, %eax
movl %eax, -0x8(%rbp)
movslq -0x4(%rbp), %rdi
movslq -0x8(%rbp), %rsi
callq 0x2a00
callq 0x2070
movl %eax, -0x14(%rbp)
leaq 0x115e4(%rip), %rdi     # 0x14220
callq 0x3b80
movq %rax, %rcx
movl -0x14(%rbp), %eax
addq $0x1, %rcx
cltd
idivl %ecx
movl %edx, -0x4(%rbp)
movl -0x4(%rbp), %eax
movl %eax, -0xc(%rbp)
callq 0x2070
movl %eax, -0x10(%rbp)
leaq 0x115ba(%rip), %rdi     # 0x14220
callq 0x3b80
movq %rax, %rcx
movl -0x10(%rbp), %eax
movslq -0x4(%rbp), %rdx
subq %rdx, %rcx
addq $0x1, %rcx
cltd
idivl %ecx
movl -0xc(%rbp), %eax
addl %edx, %eax
movl %eax, -0x8(%rbp)
movl -0x4(%rbp), %edi
movl -0x8(%rbp), %esi
callq 0x2ab0
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax,%rax)