// File: /workspace/github_cpp_makefile_star2_O1/fpavetic[P]lcskpp/test_lcskpp.cpp
// Function: test_lcskpp(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int)
int test_lcskpp(const string& a, const string& b, const int K) {
  int lcskpp_length = 0;
  lcskpp_slow(a, b, K, &lcskpp_length);

  int lcskpp_sparse_slow_len = 0;
  vector<pair<int, int> > lcskpp_sparse_slow_recon;
  lcskpp_sparse_slow(a, b, K, &lcskpp_sparse_slow_len,
                     &lcskpp_sparse_slow_recon);

  int lcskpp_sparse_fast_len = 0;
  vector<pair<int, int> > lcskpp_sparse_fast_recon;
  lcskpp_sparse_fast(a, b, K, &lcskpp_sparse_fast_len,
                     &lcskpp_sparse_fast_recon);
  
  // printf("%d %d %d\n", 
  //        lcskpp_length, 
  //        lcskpp_sparse_slow_len,
  //        lcskpp_sparse_fast_len);
  // printf("%s\n%s\n", a.c_str(), b.c_str());
  assert(lcskpp_length == lcskpp_sparse_slow_len);
  assert(lcskpp_length == lcskpp_sparse_fast_len);
  assert(valid_lcskpp(a, b, K, lcskpp_sparse_slow_len, 
		      lcskpp_sparse_slow_recon));
  assert(valid_lcskpp(a, b, K, lcskpp_sparse_fast_len,
    		      lcskpp_sparse_fast_recon));
  
  return lcskpp_length;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x48, %rsp
movl %edx, %ebx
movq %rsi, %r14
movq %rdi, %r15
xorl %ebp, %ebp
leaq 0x8(%rsp), %rcx
movl %ebp, (%rcx)
callq 0x3b8e
leaq 0xc(%rsp), %rcx
movl %ebp, (%rcx)
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %r8
movaps %xmm0, (%r8)
movq $0x0, 0x10(%r8)
movq %r15, %rdi
movq %r14, %rsi
movl %ebx, %edx
callq 0x2e3c
leaq 0x4(%rsp), %rcx
movl $0x0, (%rcx)
leaq 0x10(%rsp), %r8
xorps %xmm0, %xmm0
movaps %xmm0, (%r8)
movq $0x0, 0x10(%r8)
movq %r15, %rdi
movq %r14, %rsi
movl %ebx, %edx
callq 0x34bc
movl 0x8(%rsp), %eax
movl 0xc(%rsp), %ecx
cmpl %ecx, %eax
jne 0x2686
cmpl 0x4(%rsp), %eax
jne 0x26a5
leaq 0x30(%rsp), %r8
movq %r15, %rdi
movq %r14, %rsi
movl %ebx, %edx
callq 0x3a75
testb %al, %al
je 0x26c4
movl 0x4(%rsp), %ecx
leaq 0x10(%rsp), %r8
movq %r15, %rdi
movq %r14, %rsi
movl %ebx, %edx
callq 0x3a75
testb %al, %al
je 0x26e3
movl 0x8(%rsp), %ebx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x266a
callq 0x2130
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x2679
callq 0x2130
movl %ebx, %eax
addq $0x48, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x39f1(%rip), %rdi      # 0x607e
leaq 0x3a12(%rip), %rsi      # 0x60a6
leaq 0x3a1b(%rip), %rcx      # 0x60b6
movl $0x39, %edx
callq 0x20b0
leaq 0x3a45(%rip), %rdi      # 0x60f1
leaq 0x39f3(%rip), %rsi      # 0x60a6
leaq 0x39fc(%rip), %rcx      # 0x60b6
movl $0x3a, %edx
callq 0x20b0
leaq 0x3a4e(%rip), %rdi      # 0x6119
leaq 0x39d4(%rip), %rsi      # 0x60a6
leaq 0x39dd(%rip), %rcx      # 0x60b6
movl $0x3c, %edx
callq 0x20b0
leaq 0x3a77(%rip), %rdi      # 0x6161
leaq 0x39b5(%rip), %rsi      # 0x60a6
leaq 0x39be(%rip), %rcx      # 0x60b6
movl $0x3e, %edx
callq 0x20b0
movq %rax, %rbx
jmp 0x2719
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x2719
callq 0x2130
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x2728
callq 0x2130
movq %rbx, %rdi
callq 0x21f0