#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*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ test_keyboard_clear();
int /*<<< orphan*/ test_keyboard_keypress_key_not_found();
int /*<<< orphan*/ test_keyboard_keypress_multiple_keys();
int /*<<< orphan*/ test_keyboard_keypress_single_key();
int /*<<< orphan*/ test_keyboard_keypress_symbol_on_physical_keyboard();
int /*<<< orphan*/ test_keyboard_keyrelease_from_single_key();
int /*<<< orphan*/
test_keyboard_keyrelease_from_single_key_with_multiple_pressed();
int main() {
  test_keyboard_clear();
  test_keyboard_keypress_single_key();
  test_keyboard_keypress_multiple_keys();
  test_keyboard_keypress_symbol_on_physical_keyboard();
  test_keyboard_keypress_key_not_found();
  test_keyboard_keyrelease_from_single_key();
  test_keyboard_keyrelease_from_single_key_with_multiple_pressed();
  exit(0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   1050 <test_keyboard_clear@plt>
mov    $0x0,%al
call   1040 <test_keyboard_keypress_single_key@plt>
mov    $0x0,%al
call   1030 <test_keyboard_keypress_multiple_keys@plt>
mov    $0x0,%al
call   1070 <test_keyboard_keypress_symbol_on_physical_keyboard@plt>
mov    $0x0,%al
call   1060 <test_keyboard_keypress_key_not_found@plt>
mov    $0x0,%al
call   10a0 <test_keyboard_keyrelease_from_single_key@plt>
mov    $0x0,%al
call   1080 <test_keyboard_keyrelease_from_single_key_with_multiple_pressed@plt>
xor    %edi,%edi
call   1090 <exit@plt>

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %eax,%eax
call   1050 <test_keyboard_clear@plt>
xor    %eax,%eax
call   1040 <test_keyboard_keypress_single_key@plt>
xor    %eax,%eax
call   1030 <test_keyboard_keypress_multiple_keys@plt>
xor    %eax,%eax
call   1070 <test_keyboard_keypress_symbol_on_physical_keyboard@plt>
xor    %eax,%eax
call   1060 <test_keyboard_keypress_key_not_found@plt>
xor    %eax,%eax
call   10a0 <test_keyboard_keyrelease_from_single_key@plt>
xor    %eax,%eax
call   1080 <test_keyboard_keyrelease_from_single_key_with_multiple_pressed@plt>
xor    %edi,%edi
call   1090 <exit@plt>

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = call i32 (...) @test_keyboard_clear()
%3 = call i32 (...) @test_keyboard_keypress_single_key()
%4 = call i32 (...) @test_keyboard_keypress_multiple_keys()
%5 = call i32 (...) @test_keyboard_keypress_symbol_on_physical_keyboard()
%6 = call i32 (...) @test_keyboard_keypress_key_not_found()
%7 = call i32 (...) @test_keyboard_keyrelease_from_single_key()
%8 = call i32 (...) @test_keyboard_keyrelease_from_single_key_with_multiple_pressed()
%9 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
define i32 @main() {
%1 = tail call i32 (...) @test_keyboard_clear()
%2 = tail call i32 (...) @test_keyboard_keypress_single_key()
%3 = tail call i32 (...) @test_keyboard_keypress_multiple_keys()
%4 = tail call i32 (...) @test_keyboard_keypress_symbol_on_physical_keyboard()
%5 = tail call i32 (...) @test_keyboard_keypress_key_not_found()
%6 = tail call i32 (...) @test_keyboard_keyrelease_from_single_key()
%7 = tail call i32 (...) @test_keyboard_keyrelease_from_single_key_with_multiple_pressed()
%8 = tail call i32 @exit(i32 0)
unreachable
}