// File: El-Duder1no[P]geometry/thirdparty/googletest/include/gtest/gtest.h
// Function: testing::AssertionResult testing::internal::CmpHelperFloatingPointEQ<float>(char const*, char const*, float, float)
class GTEST_API_ AssertionResult {
 public:
  // Copy constructor.
  // Used in EXPECT_TRUE/FALSE(assertion_result).
  AssertionResult(const AssertionResult& other);

#if defined(_MSC_VER) && _MSC_VER < 1910
  GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 /* forcing value to bool */)
#endif

  // Used in the EXPECT_TRUE/FALSE(bool_expression).
  //
  // T must be contextually convertible to bool.
  //
  // The second parameter prevents this overload from being considered if
  // the argument is implicitly convertible to AssertionResult. In that case
  // we want AssertionResult's copy constructor to be used.
  template <typename T>
  explicit AssertionResult(
      const T& success,
      typename internal::EnableIf<
          !std::is_convertible<T, AssertionResult>::value>::type*
      /*enabler*/
      = nullptr)
      : success_(success) {}

#if defined(_MSC_VER) && _MSC_VER < 1910
  GTEST_DISABLE_MSC_WARNINGS_POP_()
#endif

  // Assignment operator.
  AssertionResult& operator=(AssertionResult other) {
    swap(other);
    return *this;
  }

  // Returns true iff the assertion succeeded.
  operator bool() const { return success_; }  // NOLINT

  // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE.
  AssertionResult operator!() const;

  // Returns the text streamed into this AssertionResult. Test assertions
  // use it when they fail (i.e., the predicate's outcome doesn't match the
  // assertion's expectation). When nothing has been streamed into the
  // object, returns an empty string.
  const char* message() const {
    return message_.get() != nullptr ? message_->c_str() : "";
  }
  // Deprecated; please use message() instead.
  const char* failure_message() const { return message(); }

  // Streams a custom failure message into this object.
  template <typename T> AssertionResult& operator<<(const T& value) {
    AppendMessage(Message() << value);
    return *this;
  }

  // Allows streaming basic output manipulators such as endl or flush into
  // this object.
  AssertionResult& operator<<(
      ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
    AppendMessage(Message() << basic_manipulator);
    return *this;
  }

 private:
  // Appends the contents of message to message_.
  void AppendMessage(const Message& a_message) {
    if (message_.get() == nullptr) message_.reset(new ::std::string);
    message_->append(a_message.GetString().c_str());
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3f0, %rsp            # imm = 0x3F0
movq %rdi, -0x3a8(%rbp)
movq %rdi, %rax
movq %rax, -0x3a0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movss %xmm0, -0x1c(%rbp)
movss %xmm1, -0x20(%rbp)
leaq -0x24(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
callq 0x3b922
leaq -0x28(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x3b922
leaq -0x24(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x3b942
testb $0x1, %al
jne 0x4f62f
jmp 0x4f640
movq -0x3a8(%rbp), %rdi
callq 0xd29b
jmp 0x4f830
leaq -0x1b0(%rbp), %rdi
callq 0x93d0
leaq -0x1a0(%rbp), %rax
movq %rax, -0x3b8(%rbp)
movl $0x8, %edi
callq 0x2ce53
movl %eax, -0x3ac(%rbp)
jmp 0x4f66c
movq -0x3b8(%rbp), %rdi
movl -0x3ac(%rbp), %eax
movl %eax, -0x1b4(%rbp)
movl -0x1b4(%rbp), %esi
callq 0x9b00
movq %rax, -0x3c0(%rbp)
jmp 0x4f693
movq -0x3c0(%rbp), %rdi
movss -0x1c(%rbp), %xmm0
callq 0x9420
jmp 0x4f6a6
leaq -0x350(%rbp), %rdi
callq 0x93d0
jmp 0x4f6b4
leaq -0x340(%rbp), %rax
movq %rax, -0x3d0(%rbp)
movl $0x8, %edi
callq 0x2ce53
movl %eax, -0x3c4(%rbp)
jmp 0x4f6d4
movq -0x3d0(%rbp), %rdi
movl -0x3c4(%rbp), %eax
movl %eax, -0x354(%rbp)
movl -0x354(%rbp), %esi
callq 0x9b00
movq %rax, -0x3d8(%rbp)
jmp 0x4f6fb
movq -0x3d8(%rbp), %rdi
movss -0x20(%rbp), %xmm0
callq 0x9420
jmp 0x4f70e
movq -0x10(%rbp), %rax
movq %rax, -0x3e8(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x3e0(%rbp)
leaq -0x378(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x11310
jmp 0x4f739
leaq -0x398(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x11310
jmp 0x4f74e
movq -0x3e0(%rbp), %rdx
movq -0x3e8(%rbp), %rsi
movq -0x3a8(%rbp), %rdi
leaq -0x378(%rbp), %rcx
leaq -0x398(%rbp), %r8
xorl %r9d, %r9d
callq 0xec01
jmp 0x4f77b
leaq -0x398(%rbp), %rdi
callq 0x9d88
leaq -0x378(%rbp), %rdi
callq 0x9d88
leaq -0x350(%rbp), %rdi
callq 0x9430
leaq -0x1b0(%rbp), %rdi
callq 0x9430
jmp 0x4f830
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x4f822
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x4f816
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
jmp 0x4f80a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c0(%rbp)
movl %eax, -0x1c4(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x9d88
leaq -0x378(%rbp), %rdi
callq 0x9d88
leaq -0x350(%rbp), %rdi
callq 0x9430
leaq -0x1b0(%rbp), %rdi
callq 0x9430
jmp 0x4f840
movq -0x3a0(%rbp), %rax
addq $0x3f0, %rsp            # imm = 0x3F0
popq %rbp
retq
movq -0x1c0(%rbp), %rdi
callq 0x9c00
nopl (%rax)
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
callq 0x31de0
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax,%rax)
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
callq 0x3261e
addq $0x10, %rsp
popq %rbp
retq
nop