user: What would the C source look like for the assembly code provided here:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  movl   $0x0,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  jne    L37
  mov    $0x0,%ecx
  lea    D196(%rip),%rax
  mov    %rax,%rdx
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L37:
  cmpl   $0x0,-0x4(%rbp)
  jne    L127
  mov    $0x0,%ecx
  lea    D345(%rip),%rax
  mov    %rax,%rdx
  mov    $0x2,%esi
  mov    $0x1,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L127:
  cmpl   $0x0,-0x4(%rbp)
  jne    L444
  mov    $0x0,%ecx
  lea    D170(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x1,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L444:
  cmpl   $0x0,-0x4(%rbp)
  jne    L612
  mov    $0x0,%ecx
  lea    D90(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0xa,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L612:
  cmpl   $0x0,-0x4(%rbp)
  jne    L439
  mov    $0x0,%ecx
  lea    D450(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x64,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L439:
  cmpl   $0x0,-0x4(%rbp)
  jne    L348
  mov    $0x1,%ecx
  lea    D170(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x3e8,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L348:
  cmpl   $0x0,-0x4(%rbp)
  jne    L202
  mov    $0x1,%ecx
  lea    D90(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x2710,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L202:
  cmpl   $0x0,-0x4(%rbp)
  jne    L503
  mov    $0x1,%ecx
  lea    D450(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x186a0,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L503:
  cmpl   $0x0,-0x4(%rbp)
  jne    L544
  mov    $0x2,%ecx
  lea    D170(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0xf4240,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L544:
  cmpl   $0x0,-0x4(%rbp)
  jne    L415
  mov    $0x2,%ecx
  lea    D90(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x989680,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L415:
  cmpl   $0x0,-0x4(%rbp)
  jne    L426
  mov    $0x2,%ecx
  lea    D450(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x5f5e100,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L426:
  cmpl   $0x0,-0x4(%rbp)
  jne    L118
  mov    $0x3,%ecx
  lea    D170(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x3b9aca00,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L118:
  cmpl   $0x0,-0x4(%rbp)
  jne    L626
  mov    $0x0,%ecx
  lea    D563(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0xfa,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L626:
  cmpl   $0x0,-0x4(%rbp)
  jne    L208
  mov    $0x0,%ecx
  lea    D404(%rip),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    $0x3e7,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L208:
  cmpl   $0x0,-0x4(%rbp)
  jne    L456
  mov    $0x0,%ecx
  lea    D398(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0x1,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L456:
  cmpl   $0x0,-0x4(%rbp)
  jne    L243
  mov    $0x0,%ecx
  lea    D147(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0xa,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L243:
  cmpl   $0x0,-0x4(%rbp)
  jne    L3
  mov    $0x0,%ecx
  lea    D420(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0x64,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L3:
  cmpl   $0x0,-0x4(%rbp)
  jne    L390
  mov    $0x1,%ecx
  lea    D398(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0x3e8,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L390:
  cmpl   $0x0,-0x4(%rbp)
  jne    L111
  mov    $0x1,%ecx
  lea    D147(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0x2710,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L111:
  cmpl   $0x0,-0x4(%rbp)
  jne    L401
  mov    $0x1,%ecx
  lea    D420(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0x186a0,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L401:
  cmpl   $0x0,-0x4(%rbp)
  jne    L107
  mov    $0x2,%ecx
  lea    D398(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0xf4240,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L107:
  cmpl   $0x0,-0x4(%rbp)
  jne    L380
  mov    $0x2,%ecx
  lea    D147(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0x989680,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L380:
  cmpl   $0x0,-0x4(%rbp)
  jne    L303
  mov    $0x2,%ecx
  lea    D420(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0x5f5e100,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L303:
  cmpl   $0x0,-0x4(%rbp)
  jne    L139
  mov    $0x3,%ecx
  lea    D398(%rip),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    $0x3b9aca00,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L139:
  cmpl   $0x0,-0x4(%rbp)
  jne    L357
  mov    $0x0,%ecx
  lea    D298(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0x1,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L357:
  cmpl   $0x0,-0x4(%rbp)
  jne    L490
  mov    $0x0,%ecx
  lea    D573(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0xa,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L490:
  cmpl   $0x0,-0x4(%rbp)
  jne    L166
  mov    $0x0,%ecx
  lea    D381(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0x64,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L166:
  cmpl   $0x0,-0x4(%rbp)
  jne    L10
  mov    $0x1,%ecx
  lea    D298(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0x3e8,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L10:
  cmpl   $0x0,-0x4(%rbp)
  jne    L1
  mov    $0x1,%ecx
  lea    D573(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0x2710,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L1:
  cmpl   $0x0,-0x4(%rbp)
  jne    L389
  mov    $0x1,%ecx
  lea    D381(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0x186a0,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L389:
  cmpl   $0x0,-0x4(%rbp)
  jne    L330
  mov    $0x2,%ecx
  lea    D298(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0xf4240,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L330:
  cmpl   $0x0,-0x4(%rbp)
  jne    L314
  mov    $0x2,%ecx
  lea    D573(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0x989680,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L314:
  cmpl   $0x0,-0x4(%rbp)
  jne    L416
  mov    $0x2,%ecx
  lea    D381(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0x5f5e100,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L416:
  cmpl   $0x0,-0x4(%rbp)
  jne    L551
  mov    $0x3,%ecx
  lea    D298(%rip),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0x3b9aca00,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L551:
  cmpl   $0x0,-0x4(%rbp)
  jne    L555
  mov    $0x0,%ecx
  lea    D627(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0x1,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L555:
  cmpl   $0x0,-0x4(%rbp)
  jne    L252
  mov    $0x0,%ecx
  lea    D18(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0xa,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L252:
  cmpl   $0x0,-0x4(%rbp)
  jne    L593
  mov    $0x0,%ecx
  lea    D258(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0x64,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L593:
  cmpl   $0x0,-0x4(%rbp)
  jne    L72
  mov    $0x1,%ecx
  lea    D627(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0x3e8,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L72:
  cmpl   $0x0,-0x4(%rbp)
  jne    L515
  mov    $0x1,%ecx
  lea    D18(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0x2710,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L515:
  cmpl   $0x0,-0x4(%rbp)
  jne    L633
  mov    $0x1,%ecx
  lea    D258(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0x186a0,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L633:
  cmpl   $0x0,-0x4(%rbp)
  jne    L443
  mov    $0x2,%ecx
  lea    D627(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0xf4240,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L443:
  cmpl   $0x0,-0x4(%rbp)
  jne    L286
  mov    $0x2,%ecx
  lea    D18(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0x989680,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L286:
  cmpl   $0x0,-0x4(%rbp)
  jne    L569
  mov    $0x2,%ecx
  lea    D258(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0x5f5e100,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L569:
  cmpl   $0x0,-0x4(%rbp)
  jne    L582
  mov    $0x3,%ecx
  lea    D627(%rip),%rax
  mov    %rax,%rdx
  mov    $0x6,%esi
  mov    $0x3b9aca00,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L582:
  cmpl   $0x0,-0x4(%rbp)
  jne    L172
  mov    $0x0,%ecx
  lea    D86(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0x1,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L172:
  cmpl   $0x0,-0x4(%rbp)
  jne    L17
  mov    $0x0,%ecx
  lea    D16(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0xa,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L17:
  cmpl   $0x0,-0x4(%rbp)
  jne    L222
  mov    $0x0,%ecx
  lea    D328(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0x64,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L222:
  cmpl   $0x0,-0x4(%rbp)
  jne    L624
  mov    $0x1,%ecx
  lea    D86(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0x3e8,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L624:
  cmpl   $0x0,-0x4(%rbp)
  jne    L141
  mov    $0x1,%ecx
  lea    D16(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0x2710,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L141:
  cmpl   $0x0,-0x4(%rbp)
  jne    L484
  mov    $0x1,%ecx
  lea    D328(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0x186a0,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L484:
  cmpl   $0x0,-0x4(%rbp)
  jne    L48
  mov    $0x2,%ecx
  lea    D86(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0xf4240,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L48:
  cmpl   $0x0,-0x4(%rbp)
  jne    L176
  mov    $0x2,%ecx
  lea    D16(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0x989680,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L176:
  cmpl   $0x0,-0x4(%rbp)
  jne    L453
  mov    $0x2,%ecx
  lea    D328(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0x5f5e100,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L453:
  cmpl   $0x0,-0x4(%rbp)
  jne    L251
  mov    $0x3,%ecx
  lea    D86(%rip),%rax
  mov    %rax,%rdx
  mov    $0x7,%esi
  mov    $0x3b9aca00,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L251:
  cmpl   $0x0,-0x4(%rbp)
  jne    L616
  mov    $0x0,%ecx
  lea    D460(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0x1,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L616:
  cmpl   $0x0,-0x4(%rbp)
  jne    L59
  mov    $0x0,%ecx
  lea    D358(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0xa,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L59:
  cmpl   $0x0,-0x4(%rbp)
  jne    L394
  mov    $0x0,%ecx
  lea    D277(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0x64,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L394:
  cmpl   $0x0,-0x4(%rbp)
  jne    L231
  mov    $0x1,%ecx
  lea    D460(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0x3e8,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L231:
  cmpl   $0x0,-0x4(%rbp)
  jne    L420
  mov    $0x1,%ecx
  lea    D358(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0x2710,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L420:
  cmpl   $0x0,-0x4(%rbp)
  jne    L568
  mov    $0x1,%ecx
  lea    D277(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0x186a0,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L568:
  cmpl   $0x0,-0x4(%rbp)
  jne    L152
  mov    $0x2,%ecx
  lea    D460(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0xf4240,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L152:
  cmpl   $0x0,-0x4(%rbp)
  jne    L260
  mov    $0x2,%ecx
  lea    D358(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0x989680,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L260:
  cmpl   $0x0,-0x4(%rbp)
  jne    L108
  mov    $0x2,%ecx
  lea    D277(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0x5f5e100,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L108:
  cmpl   $0x0,-0x4(%rbp)
  jne    L351
  mov    $0x3,%ecx
  lea    D460(%rip),%rax
  mov    %rax,%rdx
  mov    $0x8,%esi
  mov    $0x3b9aca00,%edi
  call   <test@plt>
  mov    %eax,-0x4(%rbp)
L351:
  mov    -0x4(%rbp),%eax
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D196
type: string
name: extract_symbolic_data
arguments: label: D345
type: string
name: extract_symbolic_data
arguments: label: D170
type: string
name: extract_symbolic_data
arguments: label: D90
type: string
name: extract_symbolic_data
arguments: label: D450
type: string
name: extract_symbolic_data
arguments: label: D563
type: string
name: extract_symbolic_data
arguments: label: D404
type: string
name: extract_symbolic_data
arguments: label: D398
type: string
name: extract_symbolic_data
arguments: label: D147
type: string
name: extract_symbolic_data
arguments: label: D420
type: string
name: extract_symbolic_data
arguments: label: D298
type: string
name: extract_symbolic_data
arguments: label: D573
type: string
name: extract_symbolic_data
arguments: label: D381
type: string
name: extract_symbolic_data
arguments: label: D627
type: string
name: extract_symbolic_data
arguments: label: D18
type: string
name: extract_symbolic_data
arguments: label: D258
type: string
name: extract_symbolic_data
arguments: label: D86
type: string
name: extract_symbolic_data
arguments: label: D16
type: string
name: extract_symbolic_data
arguments: label: D328
type: string
name: extract_symbolic_data
arguments: label: D460
type: string
name: extract_symbolic_data
arguments: label: D358
type: string
name: extract_symbolic_data
arguments: label: D277
type: string

tool: D196: -

tool: D345: --

tool: D170: 1.0

tool: D90: 10.

tool: D450: 100

tool: D563: 250

tool: D404: 999

tool: D398: 1.00

tool: D147: 10.0

tool: D420: 100.

tool: D298: 1.000

tool: D573: 10.00

tool: D381: 100.0

tool: D627: 1.0000

tool: D18: 10.000

tool: D258: 100.00

tool: D86: 1.00000

tool: D16: 10.0000

tool: D328: 100.000

tool: D460: 1.000000

tool: D358: 10.00000

tool: D277: 100.0000

assistant: ```c
int main(void) {
  int fail = 0;
  if (!fail)
    fail = test(1, 1, "-", 0);
  if (!fail)
    fail = test(1, 2, "--", 0);
  if (!fail)
    fail = test(1, 3, "1.0", 0);
  if (!fail)
    fail = test(10, 3, "10.", 0);
  if (!fail)
    fail = test(100, 3, "100", 0);
  if (!fail)
    fail = test(1000, 3, "1.0", 1);
  if (!fail)
    fail = test(10 * 1000, 3, "10.", 1);
  if (!fail)
    fail = test(100 * 1000, 3, "100", 1);
  if (!fail)
    fail = test(1000 * 1000, 3, "1.0", 2);
  if (!fail)
    fail = test(10 * 1000 * 1000, 3, "10.", 2);
  if (!fail)
    fail = test(100 * 1000 * 1000, 3, "100", 2);
  if (!fail)
    fail = test(1000 * 1000 * 1000, 3, "1.0", 3);
  if (!fail)
    fail = test(250, 3, "250", 0);
  if (!fail)
    fail = test(999, 3, "999", 0);
  if (!fail)
    fail = test(1, 4, "1.00", 0);
  if (!fail)
    fail = test(10, 4, "10.0", 0);
  if (!fail)
    fail = test(100, 4, "100.", 0);
  if (!fail)
    fail = test(1000, 4, "1.00", 1);
  if (!fail)
    fail = test(10 * 1000, 4, "10.0", 1);
  if (!fail)
    fail = test(100 * 1000, 4, "100.", 1);
  if (!fail)
    fail = test(1000 * 1000, 4, "1.00", 2);
  if (!fail)
    fail = test(10 * 1000 * 1000, 4, "10.0", 2);
  if (!fail)
    fail = test(100 * 1000 * 1000, 4, "100.", 2);
  if (!fail)
    fail = test(1000 * 1000 * 1000, 4, "1.00", 3);
  if (!fail)
    fail = test(1, 5, "1.000", 0);
  if (!fail)
    fail = test(10, 5, "10.00", 0);
  if (!fail)
    fail = test(100, 5, "100.0", 0);
  if (!fail)
    fail = test(1000, 5, "1.000", 1);
  if (!fail)
    fail = test(10 * 1000, 5, "10.00", 1);
  if (!fail)
    fail = test(100 * 1000, 5, "100.0", 1);
  if (!fail)
    fail = test(1000 * 1000, 5, "1.000", 2);
  if (!fail)
    fail = test(10 * 1000 * 1000, 5, "10.00", 2);
  if (!fail)
    fail = test(100 * 1000 * 1000, 5, "100.0", 2);
  if (!fail)
    fail = test(1000 * 1000 * 1000, 5, "1.000", 3);
  if (!fail)
    fail = test(1, 6, "1.0000", 0);
  if (!fail)
    fail = test(10, 6, "10.000", 0);
  if (!fail)
    fail = test(100, 6, "100.00", 0);
  if (!fail)
    fail = test(1000, 6, "1.0000", 1);
  if (!fail)
    fail = test(10 * 1000, 6, "10.000", 1);
  if (!fail)
    fail = test(100 * 1000, 6, "100.00", 1);
  if (!fail)
    fail = test(1000 * 1000, 6, "1.0000", 2);
  if (!fail)
    fail = test(10 * 1000 * 1000, 6, "10.000", 2);
  if (!fail)
    fail = test(100 * 1000 * 1000, 6, "100.00", 2);
  if (!fail)
    fail = test(1000 * 1000 * 1000, 6, "1.0000", 3);
  if (!fail)
    fail = test(1, 7, "1.00000", 0);
  if (!fail)
    fail = test(10, 7, "10.0000", 0);
  if (!fail)
    fail = test(100, 7, "100.000", 0);
  if (!fail)
    fail = test(1000, 7, "1.00000", 1);
  if (!fail)
    fail = test(10 * 1000, 7, "10.0000", 1);
  if (!fail)
    fail = test(100 * 1000, 7, "100.000", 1);
  if (!fail)
    fail = test(1000 * 1000, 7, "1.00000", 2);
  if (!fail)
    fail = test(10 * 1000 * 1000, 7, "10.0000", 2);
  if (!fail)
    fail = test(100 * 1000 * 1000, 7, "100.000", 2);
  if (!fail)
    fail = test(1000 * 1000 * 1000, 7, "1.00000", 3);
  if (!fail)
    fail = test(1, 8, "1.000000", 0);
  if (!fail)
    fail = test(10, 8, "10.00000", 0);
  if (!fail)
    fail = test(100, 8, "100.0000", 0);
  if (!fail)
    fail = test(1000, 8, "1.000000", 1);
  if (!fail)
    fail = test(10 * 1000, 8, "10.00000", 1);
  if (!fail)
    fail = test(100 * 1000, 8, "100.0000", 1);
  if (!fail)
    fail = test(1000 * 1000, 8, "1.000000", 2);
  if (!fail)
    fail = test(10 * 1000 * 1000, 8, "10.00000", 2);
  if (!fail)
    fail = test(100 * 1000 * 1000, 8, "100.0000", 2);
  if (!fail)
    fail = test(1000 * 1000 * 1000, 8, "1.000000", 3);
  return fail;
}
```