#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*/ test_string_concat();
int /*<<< orphan*/ test_string_copy_cptr_sptr();
int /*<<< orphan*/ test_string_copy_range();
int /*<<< orphan*/ test_string_copy_sptr();
int /*<<< orphan*/ test_string_equal();
int /*<<< orphan*/ test_string_equal_cstring();
int /*<<< orphan*/ test_string_fgets();
int /*<<< orphan*/ test_string_find_cstr();
int /*<<< orphan*/ test_string_get_slice();
int /*<<< orphan*/ test_string_in();
int /*<<< orphan*/ test_string_is_int();
int /*<<< orphan*/ test_string_isalphanum();
int /*<<< orphan*/ test_string_isnonalpha();
int /*<<< orphan*/ test_string_remove_nonalpha();
int /*<<< orphan*/ test_string_replace();
int /*<<< orphan*/ test_string_set_range();
int /*<<< orphan*/ test_string_toint();
int /*<<< orphan*/ test_string_tolower();
int /*<<< orphan*/ test_string_toupper();
void start_testing(void) {
  test_string_equal();
  test_string_copy_cptr_sptr();
  test_string_copy_sptr();
  test_string_concat();
  test_string_tolower();
  test_string_toupper();
  test_string_equal_cstring();
  test_string_is_int();
  test_string_remove_nonalpha();
  test_string_toint();
  test_string_isnonalpha();
  test_string_isalphanum();
  test_string_get_slice();
  test_string_copy_range();
  test_string_fgets();
  test_string_find_cstr();
  test_string_in();
  test_string_set_range();
  test_string_replace();
}


x86 assembly (clang, -O0):
<start_testing>:
push   %rbp
mov    %rsp,%rbp
mov    $0x0,%al
call   1070 <test_string_equal@plt>
mov    $0x0,%al
call   10a0 <test_string_copy_cptr_sptr@plt>
mov    $0x0,%al
call   1120 <test_string_copy_sptr@plt>
mov    $0x0,%al
call   1030 <test_string_concat@plt>
mov    $0x0,%al
call   1080 <test_string_tolower@plt>
mov    $0x0,%al
call   10b0 <test_string_toupper@plt>
mov    $0x0,%al
call   1110 <test_string_equal_cstring@plt>
mov    $0x0,%al
call   1040 <test_string_is_int@plt>
mov    $0x0,%al
call   1090 <test_string_remove_nonalpha@plt>
mov    $0x0,%al
call   1060 <test_string_toint@plt>
mov    $0x0,%al
call   10e0 <test_string_isnonalpha@plt>
mov    $0x0,%al
call   1100 <test_string_isalphanum@plt>
mov    $0x0,%al
call   1130 <test_string_get_slice@plt>
mov    $0x0,%al
call   1150 <test_string_copy_range@plt>
mov    $0x0,%al
call   10d0 <test_string_fgets@plt>
mov    $0x0,%al
call   10f0 <test_string_find_cstr@plt>
mov    $0x0,%al
call   1140 <test_string_in@plt>
mov    $0x0,%al
call   10c0 <test_string_set_range@plt>
mov    $0x0,%al
call   1050 <test_string_replace@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<start_testing>:
push   %rax
xor    %eax,%eax
call   1070 <test_string_equal@plt>
xor    %eax,%eax
call   10a0 <test_string_copy_cptr_sptr@plt>
xor    %eax,%eax
call   1120 <test_string_copy_sptr@plt>
xor    %eax,%eax
call   1030 <test_string_concat@plt>
xor    %eax,%eax
call   1080 <test_string_tolower@plt>
xor    %eax,%eax
call   10b0 <test_string_toupper@plt>
xor    %eax,%eax
call   1110 <test_string_equal_cstring@plt>
xor    %eax,%eax
call   1040 <test_string_is_int@plt>
xor    %eax,%eax
call   1090 <test_string_remove_nonalpha@plt>
xor    %eax,%eax
call   1060 <test_string_toint@plt>
xor    %eax,%eax
call   10e0 <test_string_isnonalpha@plt>
xor    %eax,%eax
call   1100 <test_string_isalphanum@plt>
xor    %eax,%eax
call   1130 <test_string_get_slice@plt>
xor    %eax,%eax
call   1150 <test_string_copy_range@plt>
xor    %eax,%eax
call   10d0 <test_string_fgets@plt>
xor    %eax,%eax
call   10f0 <test_string_find_cstr@plt>
xor    %eax,%eax
call   1140 <test_string_in@plt>
xor    %eax,%eax
call   10c0 <test_string_set_range@plt>
xor    %eax,%eax
pop    %rcx
jmp    1050 <test_string_replace@plt>

LLVM IR (-O0):
define void @start_testing() {
%1 = call i32 (...) @test_string_equal()
%2 = call i32 (...) @test_string_copy_cptr_sptr()
%3 = call i32 (...) @test_string_copy_sptr()
%4 = call i32 (...) @test_string_concat()
%5 = call i32 (...) @test_string_tolower()
%6 = call i32 (...) @test_string_toupper()
%7 = call i32 (...) @test_string_equal_cstring()
%8 = call i32 (...) @test_string_is_int()
%9 = call i32 (...) @test_string_remove_nonalpha()
%10 = call i32 (...) @test_string_toint()
%11 = call i32 (...) @test_string_isnonalpha()
%12 = call i32 (...) @test_string_isalphanum()
%13 = call i32 (...) @test_string_get_slice()
%14 = call i32 (...) @test_string_copy_range()
%15 = call i32 (...) @test_string_fgets()
%16 = call i32 (...) @test_string_find_cstr()
%17 = call i32 (...) @test_string_in()
%18 = call i32 (...) @test_string_set_range()
%19 = call i32 (...) @test_string_replace()
ret void
}

LLVM IR (-O2):
define void @start_testing() {
%1 = tail call i32 (...) @test_string_equal()
%2 = tail call i32 (...) @test_string_copy_cptr_sptr()
%3 = tail call i32 (...) @test_string_copy_sptr()
%4 = tail call i32 (...) @test_string_concat()
%5 = tail call i32 (...) @test_string_tolower()
%6 = tail call i32 (...) @test_string_toupper()
%7 = tail call i32 (...) @test_string_equal_cstring()
%8 = tail call i32 (...) @test_string_is_int()
%9 = tail call i32 (...) @test_string_remove_nonalpha()
%10 = tail call i32 (...) @test_string_toint()
%11 = tail call i32 (...) @test_string_isnonalpha()
%12 = tail call i32 (...) @test_string_isalphanum()
%13 = tail call i32 (...) @test_string_get_slice()
%14 = tail call i32 (...) @test_string_copy_range()
%15 = tail call i32 (...) @test_string_fgets()
%16 = tail call i32 (...) @test_string_find_cstr()
%17 = tail call i32 (...) @test_string_in()
%18 = tail call i32 (...) @test_string_set_range()
%19 = tail call i32 (...) @test_string_replace()
ret void
}