#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*/ abs_test();
int /*<<< orphan*/ arithmetic_sequence_sum_test();
int /*<<< orphan*/ binomial_coefficient_test();
int /*<<< orphan*/ concatenate_test();
int /*<<< orphan*/ divisors_count_test();
int /*<<< orphan*/ egcd_test();
int /*<<< orphan*/ eratosthenes_sieve_test();
int /*<<< orphan*/ euclid_pythagorean_triple_test();
int /*<<< orphan*/ factorial_test();
int /*<<< orphan*/ factorise_test();
int /*<<< orphan*/ factors_count_test();
int /*<<< orphan*/ factors_to_totient_test();
int /*<<< orphan*/ factors_to_value_test();
int /*<<< orphan*/ gcd_test();
int /*<<< orphan*/ get_totients_under_test();
int /*<<< orphan*/ integer_log10_test();
int /*<<< orphan*/ integer_solve_quadratic_test();
int /*<<< orphan*/ integer_sqrt_test();
int /*<<< orphan*/ is_bouncy_test();
int /*<<< orphan*/ is_decreasing_test();
int /*<<< orphan*/ is_increasing_test();
int /*<<< orphan*/ is_palindrome_test();
int /*<<< orphan*/ is_pandigital_test();
int /*<<< orphan*/ is_pentagonal_test();
int /*<<< orphan*/ is_permutation_test();
int /*<<< orphan*/ is_prime_long_test();
int /*<<< orphan*/ is_prime_test();
int /*<<< orphan*/ is_triangle_test();
int /*<<< orphan*/ make_palindrome_test();
int /*<<< orphan*/ max_test();
int /*<<< orphan*/ miller_rabin_test();
int /*<<< orphan*/ min_test();
int /*<<< orphan*/ mod_pow_test();
int /*<<< orphan*/ modinv_test();
int /*<<< orphan*/ next_collatz_num_test();
int /*<<< orphan*/ next_digits_factorial_num_test();
int /*<<< orphan*/ next_fibonacci_num_test();
int /*<<< orphan*/ next_generalised_pentagonal_num_test();
int /*<<< orphan*/ next_heptagonal_num_test();
int /*<<< orphan*/ next_hexagonal_num_test();
int /*<<< orphan*/ next_number_non_decreasing_test();
int /*<<< orphan*/ next_number_test();
int /*<<< orphan*/ next_octagonal_num_test();
int /*<<< orphan*/ next_pentagonal_num_test();
int /*<<< orphan*/ next_permutation_test();
int /*<<< orphan*/ next_square_num_test();
int /*<<< orphan*/ next_triangle_num_test();
int /*<<< orphan*/ pandigital_test_and_set_digits_test();
int /*<<< orphan*/ pandigital_test_digits_test();
int /*<<< orphan*/ permutations_count_test();
int /*<<< orphan*/ power_test();
int /*<<< orphan*/ prev_permutation_test();
int /*<<< orphan*/ prime_count_inverse_test();
int /*<<< orphan*/ primes_under_test();
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ proper_divisors_sum_test();
int /*<<< orphan*/ reverse_test();
int /*<<< orphan*/ round_test();
int /*<<< orphan*/ totient_sum_test();
int /*<<< orphan*/ tribonacci_num_test();
int main(void) {
  max_test();
  min_test();
  abs_test();
  round_test();
  eratosthenes_sieve_test();
  primes_under_test();
  miller_rabin_test();
  is_prime_test();
  is_prime_long_test();
  prime_count_inverse_test();
  get_totients_under_test();
  totient_sum_test();
  factorise_test();
  factors_to_value_test();
  factors_to_totient_test();
  factors_count_test();
  proper_divisors_sum_test();
  divisors_count_test();
  gcd_test();
  egcd_test();
  modinv_test();
  make_palindrome_test();
  is_palindrome_test();
  is_permutation_test();
  is_increasing_test();
  is_decreasing_test();
  is_bouncy_test();
  concatenate_test();
  reverse_test();
  is_pandigital_test();
  pandigital_test_and_set_digits_test();
  pandigital_test_digits_test();
  next_number_test();
  next_number_non_decreasing_test();
  binomial_coefficient_test();
  permutations_count_test();
  next_permutation_test();
  prev_permutation_test();
  next_triangle_num_test();
  next_square_num_test();
  next_pentagonal_num_test();
  next_generalised_pentagonal_num_test();
  next_hexagonal_num_test();
  next_heptagonal_num_test();
  next_octagonal_num_test();
  next_collatz_num_test();
  next_fibonacci_num_test();
  tribonacci_num_test();
  next_digits_factorial_num_test();
  is_triangle_test();
  is_pentagonal_test();
  arithmetic_sequence_sum_test();
  mod_pow_test();
  power_test();
  euclid_pythagorean_triple_test();
  integer_solve_quadratic_test();
  integer_sqrt_test();
  integer_log10_test();
  factorial_test();
  printf("All math util tests passed\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   2030 <max_test@plt>
mov    $0x0,%al
call   2230 <min_test@plt>
mov    $0x0,%al
call   2380 <abs_test@plt>
mov    $0x0,%al
call   23b0 <round_test@plt>
mov    $0x0,%al
call   22f0 <eratosthenes_sieve_test@plt>
mov    $0x0,%al
call   2290 <primes_under_test@plt>
mov    $0x0,%al
call   23c0 <miller_rabin_test@plt>
mov    $0x0,%al
call   2270 <is_prime_test@plt>
mov    $0x0,%al
call   23a0 <is_prime_long_test@plt>
mov    $0x0,%al
call   22b0 <prime_count_inverse_test@plt>
mov    $0x0,%al
call   2350 <get_totients_under_test@plt>
mov    $0x0,%al
call   22c0 <totient_sum_test@plt>
mov    $0x0,%al
call   2370 <factorise_test@plt>
mov    $0x0,%al
call   2200 <factors_to_value_test@plt>
mov    $0x0,%al
call   2340 <factors_to_totient_test@plt>
mov    $0x0,%al
call   22e0 <factors_count_test@plt>
mov    $0x0,%al
call   2110 <proper_divisors_sum_test@plt>
mov    $0x0,%al
call   2390 <divisors_count_test@plt>
mov    $0x0,%al
call   2190 <gcd_test@plt>
mov    $0x0,%al
call   20a0 <egcd_test@plt>
mov    $0x0,%al
call   2210 <modinv_test@plt>
mov    $0x0,%al
call   23e0 <make_palindrome_test@plt>
mov    $0x0,%al
call   2120 <is_palindrome_test@plt>
mov    $0x0,%al
call   21a0 <is_permutation_test@plt>
mov    $0x0,%al
call   20e0 <is_increasing_test@plt>
mov    $0x0,%al
call   2260 <is_decreasing_test@plt>
mov    $0x0,%al
call   20b0 <is_bouncy_test@plt>
mov    $0x0,%al
call   2160 <concatenate_test@plt>
mov    $0x0,%al
call   2280 <reverse_test@plt>
mov    $0x0,%al
call   21d0 <is_pandigital_test@plt>
mov    $0x0,%al
call   2080 <pandigital_test_and_set_digits_test@plt>
mov    $0x0,%al
call   2100 <pandigital_test_digits_test@plt>
mov    $0x0,%al
call   2060 <next_number_test@plt>
mov    $0x0,%al
call   22d0 <next_number_non_decreasing_test@plt>
mov    $0x0,%al
call   20c0 <binomial_coefficient_test@plt>
mov    $0x0,%al
call   2360 <permutations_count_test@plt>
mov    $0x0,%al
call   2180 <next_permutation_test@plt>
mov    $0x0,%al
call   21e0 <prev_permutation_test@plt>
mov    $0x0,%al
call   2240 <next_triangle_num_test@plt>
mov    $0x0,%al
call   2050 <next_square_num_test@plt>
mov    $0x0,%al
call   23d0 <next_pentagonal_num_test@plt>
mov    $0x0,%al
call   2220 <next_generalised_pentagonal_num_test@plt>
mov    $0x0,%al
call   2140 <next_hexagonal_num_test@plt>
mov    $0x0,%al
call   2250 <next_heptagonal_num_test@plt>
mov    $0x0,%al
call   2150 <next_octagonal_num_test@plt>
mov    $0x0,%al
call   2070 <next_collatz_num_test@plt>
mov    $0x0,%al
call   2170 <next_fibonacci_num_test@plt>
mov    $0x0,%al
call   2130 <tribonacci_num_test@plt>
mov    $0x0,%al
call   21f0 <next_digits_factorial_num_test@plt>
mov    $0x0,%al
call   2310 <is_triangle_test@plt>
mov    $0x0,%al
call   2330 <is_pentagonal_test@plt>
mov    $0x0,%al
call   2320 <arithmetic_sequence_sum_test@plt>
mov    $0x0,%al
call   21b0 <mod_pow_test@plt>
mov    $0x0,%al
call   2040 <power_test@plt>
mov    $0x0,%al
call   22a0 <euclid_pythagorean_triple_test@plt>
mov    $0x0,%al
call   21c0 <integer_solve_quadratic_test@plt>
mov    $0x0,%al
call   2300 <integer_sqrt_test@plt>
mov    $0x0,%al
call   20d0 <integer_log10_test@plt>
mov    $0x0,%al
call   2090 <factorial_test@plt>
lea    0x98d(%rip),%rdi
call   20f0 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %eax,%eax
call   2030 <max_test@plt>
xor    %eax,%eax
call   2230 <min_test@plt>
xor    %eax,%eax
call   2380 <abs_test@plt>
xor    %eax,%eax
call   23b0 <round_test@plt>
xor    %eax,%eax
call   22f0 <eratosthenes_sieve_test@plt>
xor    %eax,%eax
call   2290 <primes_under_test@plt>
xor    %eax,%eax
call   23c0 <miller_rabin_test@plt>
xor    %eax,%eax
call   2270 <is_prime_test@plt>
xor    %eax,%eax
call   23a0 <is_prime_long_test@plt>
xor    %eax,%eax
call   22b0 <prime_count_inverse_test@plt>
xor    %eax,%eax
call   2350 <get_totients_under_test@plt>
xor    %eax,%eax
call   22c0 <totient_sum_test@plt>
xor    %eax,%eax
call   2370 <factorise_test@plt>
xor    %eax,%eax
call   2200 <factors_to_value_test@plt>
xor    %eax,%eax
call   2340 <factors_to_totient_test@plt>
xor    %eax,%eax
call   22e0 <factors_count_test@plt>
xor    %eax,%eax
call   2110 <proper_divisors_sum_test@plt>
xor    %eax,%eax
call   2390 <divisors_count_test@plt>
xor    %eax,%eax
call   2190 <gcd_test@plt>
xor    %eax,%eax
call   20b0 <egcd_test@plt>
xor    %eax,%eax
call   2210 <modinv_test@plt>
xor    %eax,%eax
call   23e0 <make_palindrome_test@plt>
xor    %eax,%eax
call   2120 <is_palindrome_test@plt>
xor    %eax,%eax
call   21a0 <is_permutation_test@plt>
xor    %eax,%eax
call   20f0 <is_increasing_test@plt>
xor    %eax,%eax
call   2260 <is_decreasing_test@plt>
xor    %eax,%eax
call   20c0 <is_bouncy_test@plt>
xor    %eax,%eax
call   2160 <concatenate_test@plt>
xor    %eax,%eax
call   2280 <reverse_test@plt>
xor    %eax,%eax
call   21d0 <is_pandigital_test@plt>
xor    %eax,%eax
call   2090 <pandigital_test_and_set_digits_test@plt>
xor    %eax,%eax
call   2100 <pandigital_test_digits_test@plt>
xor    %eax,%eax
call   2060 <next_number_test@plt>
xor    %eax,%eax
call   22d0 <next_number_non_decreasing_test@plt>
xor    %eax,%eax
call   20d0 <binomial_coefficient_test@plt>
xor    %eax,%eax
call   2360 <permutations_count_test@plt>
xor    %eax,%eax
call   2180 <next_permutation_test@plt>
xor    %eax,%eax
call   21e0 <prev_permutation_test@plt>
xor    %eax,%eax
call   2240 <next_triangle_num_test@plt>
xor    %eax,%eax
call   2050 <next_square_num_test@plt>
xor    %eax,%eax
call   23d0 <next_pentagonal_num_test@plt>
xor    %eax,%eax
call   2220 <next_generalised_pentagonal_num_test@plt>
xor    %eax,%eax
call   2140 <next_hexagonal_num_test@plt>
xor    %eax,%eax
call   2250 <next_heptagonal_num_test@plt>
xor    %eax,%eax
call   2150 <next_octagonal_num_test@plt>
xor    %eax,%eax
call   2070 <next_collatz_num_test@plt>
xor    %eax,%eax
call   2170 <next_fibonacci_num_test@plt>
xor    %eax,%eax
call   2130 <tribonacci_num_test@plt>
xor    %eax,%eax
call   21f0 <next_digits_factorial_num_test@plt>
xor    %eax,%eax
call   2310 <is_triangle_test@plt>
xor    %eax,%eax
call   2330 <is_pentagonal_test@plt>
xor    %eax,%eax
call   2320 <arithmetic_sequence_sum_test@plt>
xor    %eax,%eax
call   21b0 <mod_pow_test@plt>
xor    %eax,%eax
call   2040 <power_test@plt>
xor    %eax,%eax
call   22a0 <euclid_pythagorean_triple_test@plt>
xor    %eax,%eax
call   21c0 <integer_solve_quadratic_test@plt>
xor    %eax,%eax
call   2300 <integer_sqrt_test@plt>
xor    %eax,%eax
call   20e0 <integer_log10_test@plt>
xor    %eax,%eax
call   20a0 <factorial_test@plt>
lea    0x99b(%rip),%rdi
call   2080 <puts@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [28 x i8] c"All math util tests passed\0A\00"
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = call i32 (...) @max_test()
%3 = call i32 (...) @min_test()
%4 = call i32 (...) @abs_test()
%5 = call i32 (...) @round_test()
%6 = call i32 (...) @eratosthenes_sieve_test()
%7 = call i32 (...) @primes_under_test()
%8 = call i32 (...) @miller_rabin_test()
%9 = call i32 (...) @is_prime_test()
%10 = call i32 (...) @is_prime_long_test()
%11 = call i32 (...) @prime_count_inverse_test()
%12 = call i32 (...) @get_totients_under_test()
%13 = call i32 (...) @totient_sum_test()
%14 = call i32 (...) @factorise_test()
%15 = call i32 (...) @factors_to_value_test()
%16 = call i32 (...) @factors_to_totient_test()
%17 = call i32 (...) @factors_count_test()
%18 = call i32 (...) @proper_divisors_sum_test()
%19 = call i32 (...) @divisors_count_test()
%20 = call i32 (...) @gcd_test()
%21 = call i32 (...) @egcd_test()
%22 = call i32 (...) @modinv_test()
%23 = call i32 (...) @make_palindrome_test()
%24 = call i32 (...) @is_palindrome_test()
%25 = call i32 (...) @is_permutation_test()
%26 = call i32 (...) @is_increasing_test()
%27 = call i32 (...) @is_decreasing_test()
%28 = call i32 (...) @is_bouncy_test()
%29 = call i32 (...) @concatenate_test()
%30 = call i32 (...) @reverse_test()
%31 = call i32 (...) @is_pandigital_test()
%32 = call i32 (...) @pandigital_test_and_set_digits_test()
%33 = call i32 (...) @pandigital_test_digits_test()
%34 = call i32 (...) @next_number_test()
%35 = call i32 (...) @next_number_non_decreasing_test()
%36 = call i32 (...) @binomial_coefficient_test()
%37 = call i32 (...) @permutations_count_test()
%38 = call i32 (...) @next_permutation_test()
%39 = call i32 (...) @prev_permutation_test()
%40 = call i32 (...) @next_triangle_num_test()
%41 = call i32 (...) @next_square_num_test()
%42 = call i32 (...) @next_pentagonal_num_test()
%43 = call i32 (...) @next_generalised_pentagonal_num_test()
%44 = call i32 (...) @next_hexagonal_num_test()
%45 = call i32 (...) @next_heptagonal_num_test()
%46 = call i32 (...) @next_octagonal_num_test()
%47 = call i32 (...) @next_collatz_num_test()
%48 = call i32 (...) @next_fibonacci_num_test()
%49 = call i32 (...) @tribonacci_num_test()
%50 = call i32 (...) @next_digits_factorial_num_test()
%51 = call i32 (...) @is_triangle_test()
%52 = call i32 (...) @is_pentagonal_test()
%53 = call i32 (...) @arithmetic_sequence_sum_test()
%54 = call i32 (...) @mod_pow_test()
%55 = call i32 (...) @power_test()
%56 = call i32 (...) @euclid_pythagorean_triple_test()
%57 = call i32 (...) @integer_solve_quadratic_test()
%58 = call i32 (...) @integer_sqrt_test()
%59 = call i32 (...) @integer_log10_test()
%60 = call i32 (...) @factorial_test()
%61 = call i32 @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@str = [27 x i8] c"All math util tests passed\00"
define i32 @main() {
%1 = tail call i32 (...) @max_test()
%2 = tail call i32 (...) @min_test()
%3 = tail call i32 (...) @abs_test()
%4 = tail call i32 (...) @round_test()
%5 = tail call i32 (...) @eratosthenes_sieve_test()
%6 = tail call i32 (...) @primes_under_test()
%7 = tail call i32 (...) @miller_rabin_test()
%8 = tail call i32 (...) @is_prime_test()
%9 = tail call i32 (...) @is_prime_long_test()
%10 = tail call i32 (...) @prime_count_inverse_test()
%11 = tail call i32 (...) @get_totients_under_test()
%12 = tail call i32 (...) @totient_sum_test()
%13 = tail call i32 (...) @factorise_test()
%14 = tail call i32 (...) @factors_to_value_test()
%15 = tail call i32 (...) @factors_to_totient_test()
%16 = tail call i32 (...) @factors_count_test()
%17 = tail call i32 (...) @proper_divisors_sum_test()
%18 = tail call i32 (...) @divisors_count_test()
%19 = tail call i32 (...) @gcd_test()
%20 = tail call i32 (...) @egcd_test()
%21 = tail call i32 (...) @modinv_test()
%22 = tail call i32 (...) @make_palindrome_test()
%23 = tail call i32 (...) @is_palindrome_test()
%24 = tail call i32 (...) @is_permutation_test()
%25 = tail call i32 (...) @is_increasing_test()
%26 = tail call i32 (...) @is_decreasing_test()
%27 = tail call i32 (...) @is_bouncy_test()
%28 = tail call i32 (...) @concatenate_test()
%29 = tail call i32 (...) @reverse_test()
%30 = tail call i32 (...) @is_pandigital_test()
%31 = tail call i32 (...) @pandigital_test_and_set_digits_test()
%32 = tail call i32 (...) @pandigital_test_digits_test()
%33 = tail call i32 (...) @next_number_test()
%34 = tail call i32 (...) @next_number_non_decreasing_test()
%35 = tail call i32 (...) @binomial_coefficient_test()
%36 = tail call i32 (...) @permutations_count_test()
%37 = tail call i32 (...) @next_permutation_test()
%38 = tail call i32 (...) @prev_permutation_test()
%39 = tail call i32 (...) @next_triangle_num_test()
%40 = tail call i32 (...) @next_square_num_test()
%41 = tail call i32 (...) @next_pentagonal_num_test()
%42 = tail call i32 (...) @next_generalised_pentagonal_num_test()
%43 = tail call i32 (...) @next_hexagonal_num_test()
%44 = tail call i32 (...) @next_heptagonal_num_test()
%45 = tail call i32 (...) @next_octagonal_num_test()
%46 = tail call i32 (...) @next_collatz_num_test()
%47 = tail call i32 (...) @next_fibonacci_num_test()
%48 = tail call i32 (...) @tribonacci_num_test()
%49 = tail call i32 (...) @next_digits_factorial_num_test()
%50 = tail call i32 (...) @is_triangle_test()
%51 = tail call i32 (...) @is_pentagonal_test()
%52 = tail call i32 (...) @arithmetic_sequence_sum_test()
%53 = tail call i32 (...) @mod_pow_test()
%54 = tail call i32 (...) @power_test()
%55 = tail call i32 (...) @euclid_pythagorean_triple_test()
%56 = tail call i32 (...) @integer_solve_quadratic_test()
%57 = tail call i32 (...) @integer_sqrt_test()
%58 = tail call i32 (...) @integer_log10_test()
%59 = tail call i32 (...) @factorial_test()
%60 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str, i64 0, i64 0))
ret i32 0
}