// File: WeihuaZhu[P]hpc_prog2/./gtest/gtest-all.cc
// Function: testing::internal::UnitTestImpl::GetTestCase(char const*, char const*, void (*)(), void (*)())
TestCase* UnitTestImpl::GetTestCase(const char* test_case_name,
                                    const char* type_param,
                                    Test::SetUpTestCaseFunc set_up_tc,
                                    Test::TearDownTestCaseFunc tear_down_tc) {
  // Can we find a TestCase with the given name?
  const std::vector<TestCase*>::const_iterator test_case =
      std::find_if(test_cases_.begin(), test_cases_.end(),
                   TestCaseNameIs(test_case_name));

  if (test_case != test_cases_.end())
    return *test_case;

  // No.  Let's create one.
  TestCase* const new_test_case =
      new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc);

  // Is this a death test case?
  if (internal::UnitTestOptions::MatchesFilter(test_case_name,
                                               kDeathTestCaseFilter)) {
    // Yes.  Inserts the test case after the last death test case
    // defined so far.  This only works when the test cases haven't
    // been shuffled.  Otherwise we may end up running a death test
    // after a non-death test.
    ++last_death_test_case_;
    test_cases_.insert(test_cases_.begin() + last_death_test_case_,
                       new_test_case);
  } else {
    // No.  Appends to the end of the list.
    test_cases_.push_back(new_test_case);
  }

  test_case_indices_.push_back(static_cast<int>(test_case_indices_.size()));
  return new_test_case;
}

// Assembly:
subq $0x168, %rsp            # imm = 0x168
movq %rdi, 0x158(%rsp)
movq %rsi, 0x150(%rsp)
movq %rdx, 0x148(%rsp)
movq %rcx, 0x140(%rsp)
movq %r8, 0x138(%rsp)
movq 0x158(%rsp), %rdi
movq %rdi, 0x40(%rsp)
addq $0xb8, %rdi
movq %rdi, 0x48(%rsp)
callq 0x38470
movq 0x48(%rsp), %rdi
movq %rax, 0x120(%rsp)
callq 0x384a0
movq %rax, 0x118(%rsp)
movq 0x150(%rsp), %rax
movq %rax, 0x50(%rsp)
leaq 0xd7(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0xf420
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
leaq 0xd8(%rsp), %rdi
callq 0x32980
jmp 0x27b7f
leaq 0xf8(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x384d0
jmp 0x27b96
movq 0x120(%rsp), %rdi
movq 0x118(%rsp), %rsi
leaq 0xf8(%rsp), %rdx
callq 0x38380
movq %rax, 0x38(%rsp)
jmp 0x27bba
movq 0x38(%rsp), %rax
movq %rax, 0x128(%rsp)
leaq 0x130(%rsp), %rdi
leaq 0x128(%rsp), %rsi
callq 0x38500
leaq 0xf8(%rsp), %rdi
callq 0x38540
leaq 0xd8(%rsp), %rdi
callq 0xf698
leaq 0xd7(%rsp), %rdi
callq 0xeb40
movq 0x40(%rsp), %rdi
addq $0xb8, %rdi
callq 0x384a0
movq %rax, 0xb8(%rsp)
leaq 0x130(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x38550
testb $0x1, %al
jne 0x27c3a
jmp 0x27cc3
leaq 0x130(%rsp), %rdi
callq 0x38590
movq (%rax), %rax
movq %rax, 0x160(%rsp)
jmp 0x27ed5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc8(%rsp)
movl %eax, 0xc4(%rsp)
jmp 0x27cb1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc8(%rsp)
movl %eax, 0xc4(%rsp)
jmp 0x27ca4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc8(%rsp)
movl %eax, 0xc4(%rsp)
leaq 0xf8(%rsp), %rdi
callq 0x38540
leaq 0xd8(%rsp), %rdi
callq 0xf698
leaq 0xd7(%rsp), %rdi
callq 0xeb40
jmp 0x27ee5
movl $0xf8, %edi
callq 0xea20
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x30(%rsp)
movq 0x150(%rsp), %rsi
movq 0x148(%rsp), %rdx
movq 0x140(%rsp), %rcx
movq 0x138(%rsp), %r8
callq 0x1f380
jmp 0x27cff
movq 0x30(%rsp), %rax
movq %rax, 0xb0(%rsp)
movq 0x150(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x8f(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0xf420
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
leaq 0x90(%rsp), %rdi
callq 0x32980
jmp 0x27d44
leaq 0x23ca5(%rip), %rsi     # 0x4b9f0
leaq 0x90(%rsp), %rdi
callq 0x17c40
movb %al, 0x1f(%rsp)
jmp 0x27d5e
leaq 0x90(%rsp), %rdi
callq 0xf698
leaq 0x8f(%rsp), %rdi
callq 0xeb40
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0x27d85
jmp 0x27e7a
movq 0x40(%rsp), %rdi
movl 0x104(%rdi), %eax
addl $0x1, %eax
movl %eax, 0x104(%rdi)
movq %rdi, %rax
addq $0xb8, %rax
movq %rax, 0x10(%rsp)
addq $0xb8, %rdi
callq 0x38470
movq %rax, %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x70(%rsp)
movslq 0x104(%rax), %rsi
leaq 0x70(%rsp), %rdi
callq 0x387c0
movq %rax, 0x78(%rsp)
leaq 0x80(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x38500
movq 0x10(%rsp), %rdi
movq 0x80(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
callq 0x385a0
movq %rax, 0x68(%rsp)
jmp 0x27e93
movq 0x30(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc8(%rsp)
movl %eax, 0xc4(%rsp)
movl $0xf8, %esi
callq 0xea60
jmp 0x27ee5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc8(%rsp)
movl %eax, 0xc4(%rsp)
jmp 0x27e6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc8(%rsp)
movl %eax, 0xc4(%rsp)
leaq 0x90(%rsp), %rdi
callq 0xf698
leaq 0x8f(%rsp), %rdi
callq 0xeb40
jmp 0x27ee5
movq 0x40(%rsp), %rdi
addq $0xb8, %rdi
leaq 0xb0(%rsp), %rsi
callq 0x38800
movq 0x40(%rsp), %rdi
movq %rdi, %rax
addq $0xd0, %rax
movq %rax, 0x8(%rsp)
addq $0xd0, %rdi
callq 0x364f0
movq 0x8(%rsp), %rdi
movl %eax, 0x64(%rsp)
leaq 0x64(%rsp), %rsi
callq 0x364c0
movq 0xb0(%rsp), %rax
movq %rax, 0x160(%rsp)
movq 0x160(%rsp), %rax
addq $0x168, %rsp            # imm = 0x168
retq
movq 0xc8(%rsp), %rdi
callq 0xf410
nopw %cs:(%rax,%rax)