// File: /workspace/github_cpp_makefile_star2_O3/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 $0x98, %rsp
movapd %xmm0, %xmm3
movq %rdi, %rbx
movq %rsi, 0x10(%rsp)
movq %rdx, 0x8(%rsp)
movq %rcx, 0x28(%rsp)
movsd %xmm0, 0x48(%rsp)
movsd %xmm1, 0x40(%rsp)
subsd %xmm1, %xmm0
andpd 0x22e9b(%rip), %xmm0    # 0x70df0
movsd %xmm2, 0x38(%rsp)
movlpd %xmm0, 0x30(%rsp)
ucomisd %xmm0, %xmm2
jae 0x4e142
movapd 0x22e7d(%rip), %xmm0    # 0x70df0
movapd %xmm3, %xmm4
andpd %xmm0, %xmm4
movapd %xmm1, 0x60(%rsp)
andpd %xmm1, %xmm0
minsd %xmm4, %xmm0
movapd %xmm0, 0x70(%rsp)
movsd 0x22f49(%rip), %xmm1    # 0x70ee0
movsd %xmm2, 0x50(%rsp)
movapd %xmm3, 0x80(%rsp)
callq 0xd3b0
movsd 0x50(%rsp), %xmm2
subsd 0x70(%rsp), %xmm0
movsd %xmm0, 0x58(%rsp)
movapd 0x80(%rsp), %xmm1
ucomisd %xmm1, %xmm1
jp 0x4e152
movapd 0x60(%rsp), %xmm1
ucomisd %xmm1, %xmm1
jp 0x4e152
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm2
jbe 0x4e152
ucomisd %xmm2, %xmm0
jbe 0x4e152
leaq 0x20(%rsp), %r14
movb $0x0, -0x8(%r14)
movq $0x0, (%r14)
leaq 0x23b17(%rip), %rsi     # 0x71b27
leaq 0x18(%rsp), %rdi
callq 0x6283e
leaq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x23b11(%rip), %rsi     # 0x71b3f
movq %rax, %rdi
callq 0x6294c
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x23b8d(%rip), %rsi     # 0x71bd7
movq %rax, %rdi
callq 0x629ca
leaq 0x30(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x23adf(%rip), %rsi     # 0x71b45
movq %rax, %rdi
callq 0x62aba
leaq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x23acc(%rip), %rsi     # 0x71b4e
movq %rax, %rdi
callq 0x62b38
leaq 0x48(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x245d5(%rip), %rsi     # 0x72673
movq %rax, %rdi
callq 0x62bb6
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x23a94(%rip), %rsi     # 0x71b4e
movq %rax, %rdi
callq 0x62b38
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x23a87(%rip), %rsi     # 0x71b5d
movq %rax, %rdi
callq 0x62c34
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x23a5c(%rip), %rsi     # 0x71b4e
movq %rax, %rdi
callq 0x62b38
leaq 0x38(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x23a6a(%rip), %rsi     # 0x71b78
movq %rax, %rdi
callq 0x62cb2
leaq 0x58(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x23ab2(%rip), %rsi     # 0x71bdc
movq %rax, %rdi
callq 0x62d30
movq %rbx, %rdi
movq %rax, %rsi
callq 0x3ea20
jmp 0x4e297
movb $0x1, (%rbx)
movq $0x0, 0x8(%rbx)
jmp 0x4e2a9
leaq 0x20(%rsp), %r14
movb $0x0, -0x8(%r14)
movq $0x0, (%r14)
leaq 0x239bd(%rip), %rsi     # 0x71b27
leaq 0x18(%rsp), %rdi
callq 0x6283e
leaq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x239b7(%rip), %rsi     # 0x71b3f
movq %rax, %rdi
callq 0x6294c
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x23a33(%rip), %rsi     # 0x71bd7
movq %rax, %rdi
callq 0x629ca
leaq 0x30(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x23a86(%rip), %rsi     # 0x71c46
movq %rax, %rdi
callq 0x62dae
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x23969(%rip), %rsi     # 0x71b45
movq %rax, %rdi
callq 0x62aba
leaq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x23956(%rip), %rsi     # 0x71b4e
movq %rax, %rdi
callq 0x62b38
leaq 0x48(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x2445f(%rip), %rsi     # 0x72673
movq %rax, %rdi
callq 0x62bb6
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x2391e(%rip), %rsi     # 0x71b4e
movq %rax, %rdi
callq 0x62b38
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x23a0b(%rip), %rsi     # 0x71c57
movq %rax, %rdi
callq 0x62e2c
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x628bc
leaq 0x238e6(%rip), %rsi     # 0x71b4e
movq %rax, %rdi
callq 0x62b38
leaq 0x38(%rsp), %rsi
movq %rax, %rdi
callq 0x62a48
leaq 0x1f13b(%rip), %rsi     # 0x6d3bf
movq %rax, %rdi
callq 0x62eaa
movq %rbx, %rdi
movq %rax, %rsi
callq 0x3ea20
movq 0x20(%rsp), %rsi
testq %rsi, %rsi
je 0x4e2a9
movq %r14, %rdi
callq 0x153ca
movq %rbx, %rax
addq $0x98, %rsp
popq %rbx
popq %r14
retq
jmp 0x4e2b9
movq %rax, %rbx
movq 0x20(%rsp), %rsi
testq %rsi, %rsi
je 0x4e2ce
movq %r14, %rdi
callq 0x153ca
movq %rbx, %rdi
callq 0xda70