// File: /workspace/github_cpp_makefile_star2_O1/halfflat[P]tinyopt/test/googletest/googletest/src/gtest.cc
// Function: testing::internal::DoubleNearPredFormat(char const*, char const*, char const*, double, double, double)
AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2,
                                     const char* abs_error_expr, double val1,
                                     double val2, double abs_error) {
  const double diff = fabs(val1 - val2);
  if (diff <= abs_error) return AssertionSuccess();

  // Find the value which is closest to zero.
  const double min_abs = std::min(fabs(val1), fabs(val2));
  // Find the distance to the next double from that value.
  const double epsilon =
      nextafter(min_abs, std::numeric_limits<double>::infinity()) - min_abs;
  // Detect the case where abs_error is so small that EXPECT_NEAR is
  // effectively the same as EXPECT_EQUAL, and give an informative error
  // message so that the situation can be more easily understood without
  // requiring exotic floating-point knowledge.
  // Don't do an epsilon check if abs_error is zero because that implies
  // that an equality check was actually intended.
  if (!(std::isnan)(val1) && !(std::isnan)(val2) && abs_error > 0 &&
      abs_error < epsilon) {
    return AssertionFailure()
           << "The difference between " << expr1 << " and " << expr2 << " is "
           << diff << ", where\n"
           << expr1 << " evaluates to " << val1 << ",\n"
           << expr2 << " evaluates to " << val2 << ".\nThe abs_error parameter "
           << abs_error_expr << " evaluates to " << abs_error
           << " which is smaller than the minimum distance between doubles for "
              "numbers of this magnitude which is "
           << epsilon
           << ", thus making this EXPECT_NEAR check equivalent to "
              "EXPECT_EQUAL. Consider using EXPECT_DOUBLE_EQ instead.";
  }
  return AssertionFailure()
         << "The difference between " << expr1 << " and " << expr2 << " is "
         << diff << ", which exceeds " << abs_error_expr << ", where\n"
         << expr1 << " evaluates to " << val1 << ",\n"
         << expr2 << " evaluates to " << val2 << ", and\n"
         << abs_error_expr << " evaluates to " << abs_error << ".";
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x68, %rsp
movapd %xmm1, %xmm3
movq %rdi, %rbx
movq %rsi, 0x8(%rsp)
movq %rdx, (%rsp)
movq %rcx, 0x38(%rsp)
movsd %xmm0, 0x30(%rsp)
movsd %xmm1, 0x28(%rsp)
movapd %xmm0, %xmm1
subsd %xmm3, %xmm1
andpd 0x2364f(%rip), %xmm1    # 0x72e10
movsd %xmm2, 0x20(%rsp)
movlpd %xmm1, 0x40(%rsp)
ucomisd %xmm1, %xmm2
jae 0x4f992
movapd 0x23631(%rip), %xmm1    # 0x72e10
andpd %xmm1, %xmm0
andpd %xmm1, %xmm3
minsd %xmm0, %xmm3
movapd %xmm3, 0x50(%rsp)
movsd 0x236d7(%rip), %xmm1    # 0x72ed0
movapd %xmm3, %xmm0
callq 0xd3b0
subsd 0x50(%rsp), %xmm0
movsd %xmm0, 0x48(%rsp)
movsd 0x30(%rsp), %xmm1
ucomisd %xmm1, %xmm1
jp 0x4f9a2
movsd 0x28(%rsp), %xmm1
ucomisd %xmm1, %xmm1
jp 0x4f9a2
movsd 0x20(%rsp), %xmm1
xorpd %xmm2, %xmm2
ucomisd %xmm2, %xmm1
jbe 0x4f9a2
ucomisd %xmm1, %xmm0
jbe 0x4f9a2
leaq 0x18(%rsp), %r14
movb $0x0, -0x8(%r14)
movq $0x0, (%r14)
leaq 0x242b3(%rip), %rsi     # 0x73b17
leaq 0x10(%rsp), %rdi
callq 0x640a4
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x242ad(%rip), %rsi     # 0x73b2f
movq %rax, %rdi
callq 0x641b2
movq %rsp, %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x2432b(%rip), %rsi     # 0x73bc7
movq %rax, %rdi
callq 0x64230
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x2427d(%rip), %rsi     # 0x73b35
movq %rax, %rdi
callq 0x64320
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x2426a(%rip), %rsi     # 0x73b3e
movq %rax, %rdi
callq 0x6439e
leaq 0x30(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x24d73(%rip), %rsi     # 0x74663
movq %rax, %rdi
callq 0x6441c
movq %rsp, %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x24234(%rip), %rsi     # 0x73b3e
movq %rax, %rdi
callq 0x6439e
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x24227(%rip), %rsi     # 0x73b4d
movq %rax, %rdi
callq 0x6449a
leaq 0x38(%rsp), %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x241fc(%rip), %rsi     # 0x73b3e
movq %rax, %rdi
callq 0x6439e
leaq 0x20(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x2420a(%rip), %rsi     # 0x73b68
movq %rax, %rdi
callq 0x64518
leaq 0x48(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x24252(%rip), %rsi     # 0x73bcc
movq %rax, %rdi
callq 0x64596
movq %rbx, %rdi
movq %rax, %rsi
callq 0x40140
jmp 0x4fae3
movb $0x1, (%rbx)
movq $0x0, 0x8(%rbx)
jmp 0x4faf5
leaq 0x18(%rsp), %r14
movb $0x0, -0x8(%r14)
movq $0x0, (%r14)
leaq 0x2415d(%rip), %rsi     # 0x73b17
leaq 0x10(%rsp), %rdi
callq 0x640a4
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x24157(%rip), %rsi     # 0x73b2f
movq %rax, %rdi
callq 0x641b2
movq %rsp, %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x241d5(%rip), %rsi     # 0x73bc7
movq %rax, %rdi
callq 0x64230
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x24228(%rip), %rsi     # 0x73c36
movq %rax, %rdi
callq 0x64614
leaq 0x38(%rsp), %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x2410b(%rip), %rsi     # 0x73b35
movq %rax, %rdi
callq 0x64320
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x240f8(%rip), %rsi     # 0x73b3e
movq %rax, %rdi
callq 0x6439e
leaq 0x30(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x24c01(%rip), %rsi     # 0x74663
movq %rax, %rdi
callq 0x6441c
movq %rsp, %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x240c2(%rip), %rsi     # 0x73b3e
movq %rax, %rdi
callq 0x6439e
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x241af(%rip), %rsi     # 0x73c47
movq %rax, %rdi
callq 0x64692
leaq 0x38(%rsp), %rsi
movq %rax, %rdi
callq 0x64122
leaq 0x2408a(%rip), %rsi     # 0x73b3e
movq %rax, %rdi
callq 0x6439e
leaq 0x20(%rsp), %rsi
movq %rax, %rdi
callq 0x642ae
leaq 0x1fcac(%rip), %rsi     # 0x6f77c
movq %rax, %rdi
callq 0x64710
movq %rbx, %rdi
movq %rax, %rsi
callq 0x40140
movq 0x18(%rsp), %rsi
testq %rsi, %rsi
je 0x4faf5
movq %r14, %rdi
callq 0x156d0
movq %rbx, %rax
addq $0x68, %rsp
popq %rbx
popq %r14
retq
jmp 0x4fb02
movq %rax, %rbx
movq 0x18(%rsp), %rsi
testq %rsi, %rsi
je 0x4fb17
movq %r14, %rdi
callq 0x156d0
movq %rbx, %rdi
callq 0xda70