user: Demonstrate the C code that generates the assembly output below:

```asm
<salloc_test>:
  endbr64
  sub    $0x8,%rsp
  lea    D103(%rip),%rdi
  call   <test_begin@plt>
  xor    %eax,%eax
  call   <salloc_init_test@plt>
  lea    D97(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_basic_alloc@plt>
  lea    D101(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_full_alloc@plt>
  lea    D110(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_overflow_alloc@plt>
  lea    D112(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_multiple_alloc@plt>
  lea    D46(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_alloc_not_enough@plt>
  lea    D68(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_basic_free@plt>
  lea    D88(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_full_free@plt>
  lea    D92(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_multiple_free@plt>
  lea    D81(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_free_join_tail@plt>
  lea    D39(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_free_join_head@plt>
  lea    D6(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_free_join_mid@plt>
  lea    D20(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_free_join_consecutive@plt>
  lea    D48(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  call   <salloc_free_all@plt>
  lea    D30(%rip),%rdi
  mov    %eax,%esi
  call   <run_case@plt>
  xor    %eax,%eax
  add    $0x8,%rsp
  jmp    1220 <test_end@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D103
data_type: string
name: extract_symbolic_data
arguments: label: D97
data_type: string
name: extract_symbolic_data
arguments: label: D101
data_type: string
name: extract_symbolic_data
arguments: label: D110
data_type: string
name: extract_symbolic_data
arguments: label: D112
data_type: string
name: extract_symbolic_data
arguments: label: D46
data_type: string
name: extract_symbolic_data
arguments: label: D68
data_type: string
name: extract_symbolic_data
arguments: label: D88
data_type: string
name: extract_symbolic_data
arguments: label: D92
data_type: string
name: extract_symbolic_data
arguments: label: D81
data_type: string
name: extract_symbolic_data
arguments: label: D39
data_type: string
name: extract_symbolic_data
arguments: label: D6
data_type: string
name: extract_symbolic_data
arguments: label: D20
data_type: string
name: extract_symbolic_data
arguments: label: D48
data_type: string
name: extract_symbolic_data
arguments: label: D30
data_type: string

tool: D103: salloc test

tool: D97: salloc_init_test

tool: D101: salloc_basic_alloc

tool: D110: salloc_full_alloc

tool: D112: salloc_overflow_alloc

tool: D46: salloc_multiple_alloc

tool: D68: salloc_alloc_not_enough

tool: D88: salloc_basic_free

tool: D92: salloc_full_free

tool: D81: salloc_multiple_free

tool: D39: salloc_free_join_tail

tool: D6: salloc_free_join_head

tool: D20: salloc_free_join_mid

tool: D48: salloc_free_join_consecutive

tool: D30: salloc_free_all

assistant: ```c
void salloc_test(void) {
  test_begin("salloc test");
  run_case("salloc_init_test", salloc_init_test());
  run_case("salloc_basic_alloc", salloc_basic_alloc());
  run_case("salloc_full_alloc", salloc_full_alloc());
  run_case("salloc_overflow_alloc", salloc_overflow_alloc());
  run_case("salloc_multiple_alloc", salloc_multiple_alloc());
  run_case("salloc_alloc_not_enough", salloc_alloc_not_enough());
  run_case("salloc_basic_free", salloc_basic_free());
  run_case("salloc_full_free", salloc_full_free());
  run_case("salloc_multiple_free", salloc_multiple_free());
  run_case("salloc_free_join_tail", salloc_free_join_tail());
  run_case("salloc_free_join_head", salloc_free_join_head());
  run_case("salloc_free_join_mid", salloc_free_join_mid());
  run_case("salloc_free_join_consecutive", salloc_free_join_consecutive());
  run_case("salloc_free_all", salloc_free_all());
  test_end();
}
```