#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ srand(int /*<<< orphan*/);
int /*<<< orphan*/ test_balance_after_removal();
int /*<<< orphan*/ test_find_min();
int /*<<< orphan*/ test_insert_complex_1();
int /*<<< orphan*/ test_insert_complex_2();
int /*<<< orphan*/ test_insert_random();
int /*<<< orphan*/ test_insert_rotate_left();
int /*<<< orphan*/ test_insert_rotate_left_right_simple();
int /*<<< orphan*/ test_insert_rotate_right();
int /*<<< orphan*/ test_insert_rotate_right_left_simple();
int /*<<< orphan*/ test_insert_sequential_ascending();
int /*<<< orphan*/ test_insert_sequential_descending();
int /*<<< orphan*/ test_remove_complex_1();
int /*<<< orphan*/ test_remove_complex_2();
int /*<<< orphan*/ test_remove_complex_3();
int /*<<< orphan*/ test_remove_complex_4();
int /*<<< orphan*/ test_remove_complex_5();
int /*<<< orphan*/ test_remove_complex_6();
int /*<<< orphan*/ test_remove_complex_7();
int /*<<< orphan*/ test_remove_complex_non_root();
int /*<<< orphan*/ test_remove_complex_root();
int /*<<< orphan*/ test_remove_leaf();
int /*<<< orphan*/ test_remove_leaf_with_rebalance();
int /*<<< orphan*/ test_remove_node_with_both_children_without_rebalance();
int /*<<< orphan*/ test_remove_node_with_left_child();
int /*<<< orphan*/ test_remove_node_with_right_child();
int /*<<< orphan*/ test_remove_random();
int /*<<< orphan*/ test_remove_single();
int /*<<< orphan*/ time(int /*<<< orphan*/ *);
int main() {
  srand(time(NULL));
  test_insert_rotate_left();
  test_insert_rotate_right();
  test_insert_rotate_left_right_simple();
  test_insert_rotate_right_left_simple();
  test_insert_sequential_ascending();
  test_insert_sequential_descending();
  test_insert_complex_1();
  test_insert_complex_2();
  test_insert_random();
  test_find_min();
  test_remove_single();
  test_remove_leaf();
  test_remove_node_with_left_child();
  test_remove_node_with_right_child();
  test_remove_node_with_both_children_without_rebalance();
  test_remove_leaf_with_rebalance();
  test_remove_complex_1();
  test_remove_complex_2();
  test_remove_complex_3();
  test_remove_complex_4();
  test_remove_complex_5();
  test_remove_complex_6();
  test_remove_complex_7();
  test_remove_complex_root();
  test_remove_complex_non_root();
  test_balance_after_removal();
  test_remove_random();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
xor    %eax,%eax
mov    %eax,%edi
call   1120 <time@plt>
mov    %eax,%edi
call   10e0 <srand@plt>
mov    $0x0,%al
call   1080 <test_insert_rotate_left@plt>
mov    $0x0,%al
call   1170 <test_insert_rotate_right@plt>
mov    $0x0,%al
call   1110 <test_insert_rotate_left_right_simple@plt>
mov    $0x0,%al
call   1030 <test_insert_rotate_right_left_simple@plt>
mov    $0x0,%al
call   1100 <test_insert_sequential_ascending@plt>
mov    $0x0,%al
call   1130 <test_insert_sequential_descending@plt>
mov    $0x0,%al
call   1040 <test_insert_complex_1@plt>
mov    $0x0,%al
call   1140 <test_insert_complex_2@plt>
mov    $0x0,%al
call   1070 <test_insert_random@plt>
mov    $0x0,%al
call   1060 <test_find_min@plt>
mov    $0x0,%al
call   1050 <test_remove_single@plt>
mov    $0x0,%al
call   1090 <test_remove_leaf@plt>
mov    $0x0,%al
call   10f0 <test_remove_node_with_left_child@plt>
mov    $0x0,%al
call   1160 <test_remove_node_with_right_child@plt>
mov    $0x0,%al
call   11b0 <test_remove_node_with_both_children_without_rebalance@plt>
mov    $0x0,%al
call   11a0 <test_remove_leaf_with_rebalance@plt>
mov    $0x0,%al
call   1150 <test_remove_complex_1@plt>
mov    $0x0,%al
call   10c0 <test_remove_complex_2@plt>
mov    $0x0,%al
call   11d0 <test_remove_complex_3@plt>
mov    $0x0,%al
call   10b0 <test_remove_complex_4@plt>
mov    $0x0,%al
call   11c0 <test_remove_complex_5@plt>
mov    $0x0,%al
call   10d0 <test_remove_complex_6@plt>
mov    $0x0,%al
call   11e0 <test_remove_complex_7@plt>
mov    $0x0,%al
call   10a0 <test_remove_complex_root@plt>
mov    $0x0,%al
call   1190 <test_remove_complex_non_root@plt>
mov    $0x0,%al
call   11f0 <test_balance_after_removal@plt>
mov    $0x0,%al
call   1180 <test_remove_random@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %edi,%edi
call   1120 <time@plt>
mov    %eax,%edi
call   10e0 <srand@plt>
xor    %eax,%eax
call   1080 <test_insert_rotate_left@plt>
xor    %eax,%eax
call   1170 <test_insert_rotate_right@plt>
xor    %eax,%eax
call   1110 <test_insert_rotate_left_right_simple@plt>
xor    %eax,%eax
call   1030 <test_insert_rotate_right_left_simple@plt>
xor    %eax,%eax
call   1100 <test_insert_sequential_ascending@plt>
xor    %eax,%eax
call   1130 <test_insert_sequential_descending@plt>
xor    %eax,%eax
call   1040 <test_insert_complex_1@plt>
xor    %eax,%eax
call   1140 <test_insert_complex_2@plt>
xor    %eax,%eax
call   1070 <test_insert_random@plt>
xor    %eax,%eax
call   1060 <test_find_min@plt>
xor    %eax,%eax
call   1050 <test_remove_single@plt>
xor    %eax,%eax
call   1090 <test_remove_leaf@plt>
xor    %eax,%eax
call   10f0 <test_remove_node_with_left_child@plt>
xor    %eax,%eax
call   1160 <test_remove_node_with_right_child@plt>
xor    %eax,%eax
call   11b0 <test_remove_node_with_both_children_without_rebalance@plt>
xor    %eax,%eax
call   11a0 <test_remove_leaf_with_rebalance@plt>
xor    %eax,%eax
call   1150 <test_remove_complex_1@plt>
xor    %eax,%eax
call   10c0 <test_remove_complex_2@plt>
xor    %eax,%eax
call   11d0 <test_remove_complex_3@plt>
xor    %eax,%eax
call   10b0 <test_remove_complex_4@plt>
xor    %eax,%eax
call   11c0 <test_remove_complex_5@plt>
xor    %eax,%eax
call   10d0 <test_remove_complex_6@plt>
xor    %eax,%eax
call   11e0 <test_remove_complex_7@plt>
xor    %eax,%eax
call   10a0 <test_remove_complex_root@plt>
xor    %eax,%eax
call   1190 <test_remove_complex_non_root@plt>
xor    %eax,%eax
call   11f0 <test_balance_after_removal@plt>
xor    %eax,%eax
call   1180 <test_remove_random@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = call i32 @time(i32* null)
%3 = call i32 @srand(i32 %2)
%4 = call i32 (...) @test_insert_rotate_left()
%5 = call i32 (...) @test_insert_rotate_right()
%6 = call i32 (...) @test_insert_rotate_left_right_simple()
%7 = call i32 (...) @test_insert_rotate_right_left_simple()
%8 = call i32 (...) @test_insert_sequential_ascending()
%9 = call i32 (...) @test_insert_sequential_descending()
%10 = call i32 (...) @test_insert_complex_1()
%11 = call i32 (...) @test_insert_complex_2()
%12 = call i32 (...) @test_insert_random()
%13 = call i32 (...) @test_find_min()
%14 = call i32 (...) @test_remove_single()
%15 = call i32 (...) @test_remove_leaf()
%16 = call i32 (...) @test_remove_node_with_left_child()
%17 = call i32 (...) @test_remove_node_with_right_child()
%18 = call i32 (...) @test_remove_node_with_both_children_without_rebalance()
%19 = call i32 (...) @test_remove_leaf_with_rebalance()
%20 = call i32 (...) @test_remove_complex_1()
%21 = call i32 (...) @test_remove_complex_2()
%22 = call i32 (...) @test_remove_complex_3()
%23 = call i32 (...) @test_remove_complex_4()
%24 = call i32 (...) @test_remove_complex_5()
%25 = call i32 (...) @test_remove_complex_6()
%26 = call i32 (...) @test_remove_complex_7()
%27 = call i32 (...) @test_remove_complex_root()
%28 = call i32 (...) @test_remove_complex_non_root()
%29 = call i32 (...) @test_balance_after_removal()
%30 = call i32 (...) @test_remove_random()
ret i32 0
}

LLVM IR (-O2):
define i32 @main() {
%1 = tail call i32 @time(i32* null)
%2 = tail call i32 @srand(i32 %1)
%3 = tail call i32 (...) @test_insert_rotate_left()
%4 = tail call i32 (...) @test_insert_rotate_right()
%5 = tail call i32 (...) @test_insert_rotate_left_right_simple()
%6 = tail call i32 (...) @test_insert_rotate_right_left_simple()
%7 = tail call i32 (...) @test_insert_sequential_ascending()
%8 = tail call i32 (...) @test_insert_sequential_descending()
%9 = tail call i32 (...) @test_insert_complex_1()
%10 = tail call i32 (...) @test_insert_complex_2()
%11 = tail call i32 (...) @test_insert_random()
%12 = tail call i32 (...) @test_find_min()
%13 = tail call i32 (...) @test_remove_single()
%14 = tail call i32 (...) @test_remove_leaf()
%15 = tail call i32 (...) @test_remove_node_with_left_child()
%16 = tail call i32 (...) @test_remove_node_with_right_child()
%17 = tail call i32 (...) @test_remove_node_with_both_children_without_rebalance()
%18 = tail call i32 (...) @test_remove_leaf_with_rebalance()
%19 = tail call i32 (...) @test_remove_complex_1()
%20 = tail call i32 (...) @test_remove_complex_2()
%21 = tail call i32 (...) @test_remove_complex_3()
%22 = tail call i32 (...) @test_remove_complex_4()
%23 = tail call i32 (...) @test_remove_complex_5()
%24 = tail call i32 (...) @test_remove_complex_6()
%25 = tail call i32 (...) @test_remove_complex_7()
%26 = tail call i32 (...) @test_remove_complex_root()
%27 = tail call i32 (...) @test_remove_complex_non_root()
%28 = tail call i32 (...) @test_balance_after_removal()
%29 = tail call i32 (...) @test_remove_random()
ret i32 0
}