// File: halfflat[P]tinyopt/test/googletest/googletest/src/gtest.cc
// Function: testing::Test::HasSameFixtureClass()
bool Test::HasSameFixtureClass() {
  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();
  const TestSuite* const test_suite = impl->current_test_suite();

  // Info about the first test in the current test suite.
  const TestInfo* const first_test_info = test_suite->test_info_list()[0];
  const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_;
  const char* const first_test_name = first_test_info->name();

  // Info about the current test.
  const TestInfo* const this_test_info = impl->current_test_info();
  const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_;
  const char* const this_test_name = this_test_info->name();

  if (this_fixture_id != first_fixture_id) {
    // Is the first test defined using TEST?
    const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId();
    // Is this test defined using TEST?
    const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId();

    if (first_is_TEST || this_is_TEST) {
      // Both TEST and TEST_F appear in same test suite, which is incorrect.
      // Tell the user how to fix this.

      // Gets the name of the TEST and the name of the TEST_F.  Note
      // that first_is_TEST and this_is_TEST cannot both be true, as
      // the fixture IDs are different for the two tests.
      const char* const TEST_name =
          first_is_TEST ? first_test_name : this_test_name;
      const char* const TEST_F_name =
          first_is_TEST ? this_test_name : first_test_name;

      ADD_FAILURE()
          << "All tests in the same test suite must use the same test fixture\n"
          << "class, so mixing TEST_F and TEST in the same test suite is\n"
          << "illegal.  In test suite " << this_test_info->test_suite_name()
          << ",\n"
          << "test " << TEST_F_name << " is defined using TEST_F but\n"
          << "test " << TEST_name << " is defined using TEST.  You probably\n"
          << "want to change the TEST to TEST_F or move it to another test\n"
          << "case.";
    } else {
      // Two fixture classes with the same name appear in two different
      // namespaces, which is not allowed. Tell the user how to fix this.
      ADD_FAILURE()
          << "All tests in the same test suite must use the same test fixture\n"
          << "class.  However, in test suite "
          << this_test_info->test_suite_name() << ",\n"
          << "you defined test " << first_test_name << " and test "
          << this_test_name << "\n"
          << "using two different test fixture classes.  This can happen if\n"
          << "the two classes are from different namespaces or translation\n"
          << "units and have the same name.  You should probably rename one\n"
          << "of the classes to put the tests into different test suites.";
    }
    return false;
  }

  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1b0, %rsp            # imm = 0x1B0
callq 0xa29e0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0xa7a10
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xa7a30
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xa7a50
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x78(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0xa3360
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
callq 0xa2a00
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq 0x78(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rdi
callq 0xa3360
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x28(%rbp), %rax
je 0x896d7
movq -0x28(%rbp), %rax
movq %rax, -0xb0(%rbp)
callq 0x832f0
movq %rax, %rcx
movq -0xb0(%rbp), %rax
cmpq %rcx, %rax
sete %al
andb $0x1, %al
movb %al, -0x49(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0xa8(%rbp)
callq 0x832f0
movq %rax, %rcx
movq -0xa8(%rbp), %rax
cmpq %rcx, %rax
sete %al
andb $0x1, %al
movb %al, -0x4a(%rbp)
testb $0x1, -0x49(%rbp)
jne 0x89244
testb $0x1, -0x4a(%rbp)
je 0x894af
testb $0x1, -0x49(%rbp)
je 0x89257
movq -0x30(%rbp), %rax
movq %rax, -0xb8(%rbp)
jmp 0x89262
movq -0x48(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x58(%rbp)
testb $0x1, -0x49(%rbp)
je 0x89280
movq -0x48(%rbp), %rax
movq %rax, -0xc0(%rbp)
jmp 0x8928b
movq -0x30(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x60(%rbp)
leaq -0x68(%rbp), %rdi
movq %rdi, -0xd0(%rbp)
callq 0x84210
movq -0xd0(%rbp), %rdi
leaq 0x45428(%rip), %rsi     # 0xce6dc
callq 0xa7a70
movq %rax, -0xc8(%rbp)
jmp 0x892c2
movq -0xc8(%rbp), %rdi
leaq 0x4544d(%rip), %rsi     # 0xce71d
callq 0xa7ab0
movq %rax, -0xd8(%rbp)
jmp 0x892de
movq -0xd8(%rbp), %rdi
leaq 0x4546d(%rip), %rsi     # 0xce759
callq 0xa4cc0
movq %rax, -0xe0(%rbp)
jmp 0x892fa
movq -0x38(%rbp), %rdi
callq 0xa3340
movq %rax, -0xe8(%rbp)
jmp 0x8930c
movq -0xe0(%rbp), %rdi
movq -0xe8(%rbp), %rax
movq %rax, -0x80(%rbp)
leaq -0x80(%rbp), %rsi
callq 0xa2dc0
movq %rax, -0xf0(%rbp)
jmp 0x89330
movq -0xf0(%rbp), %rdi
leaq 0x45d91(%rip), %rsi     # 0xcf0cf
callq 0xa4d00
movq %rax, -0xf8(%rbp)
jmp 0x8934c
movq -0xf8(%rbp), %rdi
leaq 0x454d4(%rip), %rsi     # 0xce82e
callq 0xa40b0
movq %rax, -0x100(%rbp)
jmp 0x89368
movq -0x100(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xa2dc0
movq %rax, -0x108(%rbp)
jmp 0x89381
movq -0x108(%rbp), %rdi
leaq 0x453e3(%rip), %rsi     # 0xce772
callq 0xa7af0
movq %rax, -0x110(%rbp)
jmp 0x8939d
movq -0x110(%rbp), %rdi
leaq 0x45483(%rip), %rsi     # 0xce82e
callq 0xa40b0
movq %rax, -0x118(%rbp)
jmp 0x893b9
movq -0x118(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0xa2dc0
movq %rax, -0x120(%rbp)
jmp 0x893d2
movq -0x120(%rbp), %rdi
leaq 0x453b0(%rip), %rsi     # 0xce790
callq 0xa7b30
movq %rax, -0x128(%rbp)
jmp 0x893ee
movq -0x128(%rbp), %rdi
leaq 0x453bb(%rip), %rsi     # 0xce7b7
callq 0xa7b70
movq %rax, -0x130(%rbp)
jmp 0x8940a
movq -0x130(%rbp), %rdi
leaq 0x453dd(%rip), %rsi     # 0xce7f5
callq 0xa40b0
movq %rax, -0x138(%rbp)
jmp 0x89426
leaq 0x44c8e(%rip), %rdx     # 0xce0bb
leaq 0x453c7(%rip), %r8      # 0xce7fb
leaq -0x88(%rbp), %rdi
movl $0x1, %esi
movl $0x9ff, %ecx            # imm = 0x9FF
callq 0x80580
jmp 0x8944c
movq -0x138(%rbp), %rsi
leaq -0x88(%rbp), %rdi
callq 0x7d370
jmp 0x89461
leaq -0x88(%rbp), %rdi
callq 0x80600
leaq -0x68(%rbp), %rdi
callq 0x1d500
jmp 0x896d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x894a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x80600
leaq -0x68(%rbp), %rdi
callq 0x1d500
jmp 0x896e9
leaq -0x90(%rbp), %rdi
movq %rdi, -0x148(%rbp)
callq 0x84210
movq -0x148(%rbp), %rdi
leaq 0x4520c(%rip), %rsi     # 0xce6dc
callq 0xa7a70
movq %rax, -0x140(%rbp)
jmp 0x894de
movq -0x140(%rbp), %rdi
leaq 0x45316(%rip), %rsi     # 0xce802
callq 0xa7bb0
movq %rax, -0x150(%rbp)
jmp 0x894fa
movq -0x38(%rbp), %rdi
callq 0xa3340
movq %rax, -0x158(%rbp)
jmp 0x8950c
movq -0x150(%rbp), %rdi
movq -0x158(%rbp), %rax
movq %rax, -0x98(%rbp)
leaq -0x98(%rbp), %rsi
callq 0xa2dc0
movq %rax, -0x160(%rbp)
jmp 0x89536
movq -0x160(%rbp), %rdi
leaq 0x45b8b(%rip), %rsi     # 0xcf0cf
callq 0xa4d00
movq %rax, -0x168(%rbp)
jmp 0x89552
movq -0x168(%rbp), %rdi
leaq 0x452c2(%rip), %rsi     # 0xce822
callq 0xa7bf0
movq %rax, -0x170(%rbp)
jmp 0x8956e
movq -0x170(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa2dc0
movq %rax, -0x178(%rbp)
jmp 0x89587
movq -0x178(%rbp), %rdi
leaq 0x4529f(%rip), %rsi     # 0xce834
callq 0xa5e90
movq %rax, -0x180(%rbp)
jmp 0x895a3
movq -0x180(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0xa2dc0
movq %rax, -0x188(%rbp)
jmp 0x895bc
movq -0x188(%rbp), %rdi
leaq 0x41e2c(%rip), %rsi     # 0xcb3f6
callq 0xa2e50
movq %rax, -0x190(%rbp)
jmp 0x895d8
movq -0x190(%rbp), %rdi
leaq 0x45259(%rip), %rsi     # 0xce83f
callq 0xa7c30
movq %rax, -0x198(%rbp)
jmp 0x895f4
movq -0x198(%rbp), %rdi
leaq 0x4527c(%rip), %rsi     # 0xce87e
callq 0xa7b70
movq %rax, -0x1a0(%rbp)
jmp 0x89610
movq -0x1a0(%rbp), %rdi
leaq 0x4529e(%rip), %rsi     # 0xce8bc
callq 0xa7c30
movq %rax, -0x1a8(%rbp)
jmp 0x8962c
movq -0x1a8(%rbp), %rdi
leaq 0x452c1(%rip), %rsi     # 0xce8fb
callq 0xa7ab0
movq %rax, -0x1b0(%rbp)
jmp 0x89648
leaq 0x44a6c(%rip), %rdx     # 0xce0bb
leaq 0x451a5(%rip), %r8      # 0xce7fb
leaq -0xa0(%rbp), %rdi
movl $0x1, %esi
movl $0xa0b, %ecx            # imm = 0xA0B
callq 0x80580
jmp 0x8966e
movq -0x1b0(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x7d370
jmp 0x89683
leaq -0xa0(%rbp), %rdi
callq 0x80600
leaq -0x90(%rbp), %rdi
callq 0x1d500
jmp 0x896d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x896c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x80600
leaq -0x90(%rbp), %rdi
callq 0x1d500
jmp 0x896e9
movb $0x0, -0x1(%rbp)
jmp 0x896db
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x1b0, %rsp            # imm = 0x1B0
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x10e00
nopw %cs:(%rax,%rax)