// File: kdungs[P]cpp-prelude/test_prelude.cc
// Function: test_zip3()
auto test_zip3() -> void {
  using Prelude::zip3;
  auto expect = std::vector<std::tuple<int, bool, char>>{
      std::make_tuple(1, true, 'a'), std::make_tuple(2, false, 'b'),
      std::make_tuple(3, true, 'm')};
  auto result =
      zip3(std::vector<int>{1, 2, 3}, std::list<bool>{true, false, true},
           std::vector<char>{'a', 'b', 'm'});
  assert(result == expect);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movl $0x1, -0x44(%rbp)
movb $0x1, -0x45(%rbp)
movb $0x61, -0x46(%rbp)
leaq -0x40(%rbp), %rdi
movq %rdi, -0x128(%rbp)
leaq -0x44(%rbp), %rsi
leaq -0x45(%rbp), %rdx
leaq -0x46(%rbp), %rcx
callq 0xbc40
leaq -0x38(%rbp), %rdi
movl $0x2, -0x4c(%rbp)
movb $0x0, -0x4d(%rbp)
movb $0x62, -0x4e(%rbp)
leaq -0x4c(%rbp), %rsi
leaq -0x4d(%rbp), %rdx
leaq -0x4e(%rbp), %rcx
callq 0xbc40
leaq -0x30(%rbp), %rdi
movl $0x3, -0x54(%rbp)
movb $0x1, -0x55(%rbp)
movb $0x6d, -0x56(%rbp)
leaq -0x54(%rbp), %rsi
leaq -0x55(%rbp), %rdx
leaq -0x56(%rbp), %rcx
callq 0xbc40
movq -0x128(%rbp), %rax
movq %rax, -0x28(%rbp)
movq $0x3, -0x20(%rbp)
leaq -0x57(%rbp), %rdi
movq %rdi, -0x120(%rbp)
callq 0xbc80
movq -0x120(%rbp), %rcx
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
leaq -0x18(%rbp), %rdi
callq 0xbca0
jmp 0x725b
leaq -0x57(%rbp), %rdi
callq 0xbd20
movl $0x1, -0xb4(%rbp)
movl $0x2, -0xb0(%rbp)
movl $0x3, -0xac(%rbp)
leaq -0xb4(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq $0x3, -0xa0(%rbp)
leaq -0xb5(%rbp), %rdi
movq %rdi, -0x130(%rbp)
callq 0xa900
movq -0x130(%rbp), %rcx
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
leaq -0x98(%rbp), %rdi
callq 0xa920
jmp 0x72d1
movb $0x1, -0xe3(%rbp)
movb $0x0, -0xe2(%rbp)
movb $0x1, -0xe1(%rbp)
leaq -0xe3(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq $0x3, -0xd8(%rbp)
leaq -0xe4(%rbp), %rdi
movq %rdi, -0x138(%rbp)
callq 0xa840
movq -0x138(%rbp), %rcx
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdx
leaq -0xd0(%rbp), %rdi
callq 0xba90
jmp 0x7335
movb $0x61, -0x113(%rbp)
movb $0x62, -0x112(%rbp)
movb $0x6d, -0x111(%rbp)
leaq -0x113(%rbp), %rax
movq %rax, -0x110(%rbp)
movq $0x3, -0x108(%rbp)
leaq -0x114(%rbp), %rdi
movq %rdi, -0x140(%rbp)
callq 0x22c0
movq -0x140(%rbp), %rcx
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
leaq -0x100(%rbp), %rdi
callq 0xbef0
jmp 0x7399
leaq -0x80(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
leaq -0x100(%rbp), %rcx
callq 0xbd40
jmp 0x73b9
leaq -0x100(%rbp), %rdi
callq 0xbf70
leaq -0x114(%rbp), %rdi
callq 0x21e0
leaq -0xd0(%rbp), %rdi
callq 0xbb40
leaq -0xe4(%rbp), %rdi
callq 0xa8e0
leaq -0x98(%rbp), %rdi
callq 0xa9a0
leaq -0xb5(%rbp), %rdi
callq 0xaa00
leaq -0x80(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0xbfd0
movb %al, -0x141(%rbp)
jmp 0x7416
movb -0x141(%rbp), %al
testb $0x1, %al
jne 0x7422
jmp 0x7427
jmp 0x74f7
leaq 0x16e7e(%rip), %rdi     # 0x1e2ac
leaq 0x16e46(%rip), %rsi     # 0x1e27b
movl $0x12a, %edx            # imm = 0x12A
leaq 0x173f7(%rip), %rcx     # 0x1e838
callq 0x2110
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x57(%rbp), %rdi
callq 0xbd20
jmp 0x751b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x74d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x74ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x74a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xbf70
leaq -0x114(%rbp), %rdi
callq 0x21e0
leaq -0xd0(%rbp), %rdi
callq 0xbb40
leaq -0xe4(%rbp), %rdi
callq 0xa8e0
leaq -0x98(%rbp), %rdi
callq 0xa9a0
leaq -0xb5(%rbp), %rdi
callq 0xaa00
jmp 0x7512
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x80(%rbp), %rdi
callq 0xc050
jmp 0x7512
leaq -0x80(%rbp), %rdi
callq 0xc050
leaq -0x18(%rbp), %rdi
callq 0xc050
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
leaq -0x18(%rbp), %rdi
callq 0xc050
movq -0x60(%rbp), %rdi
callq 0x22b0
nopw %cs:(%rax,%rax)