// File: /workspace/github_cpp_makefile_star2_O1/Barath-Kannan[P]SignalsAndSlots/test/SignalTest.cpp
// Function: SignalTest_MemberFunction_Test::TestBody()
TEST_F(SignalTest, MemberFunction) {
    TestClass tc;
    Signal<int> testSignal;

    testSignal.connectMemberSlot(ExecutorScheme::SYNCHRONOUS, &TestClass::dostuff, tc);
    testSignal.connectMemberSlot(ExecutorScheme::SYNCHRONOUS, &TestClass::dostuffconst, tc);

    testSignal.emitSignal(1);

    ASSERT_EQ(tc.getCounter(), 2u);

    tc.emitIncrement();

    ASSERT_EQ(tc.getCounter(), 3u);

    testSignal.connectMemberSlot(ExecutorScheme::SYNCHRONOUS, &TestClass::dostuff, &tc);

    testSignal.emitSignal(1);
    ASSERT_EQ(tc.getCounter(), 6u);

    Signal<int> testSignal2;
    testSignal2.connectMemberSlot(ExecutorScheme::SYNCHRONOUS, &TestClass::dostuffconst, tc);

    testSignal2.emitSignal(1);

    ASSERT_EQ(tc.getCounter(), 7u);

    const TestClass tc2;

    testSignal2.connectMemberSlot(ExecutorScheme::SYNCHRONOUS, &TestClass::dostuffconst, tc2);
    testSignal2.connectMemberSlot(ExecutorScheme::SYNCHRONOUS, &TestClass::dostuffconst, &tc2);
    testSignal2.emitSignal(1);
    ASSERT_EQ(tc2.getCounter(), 2u);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x498, %rsp            # imm = 0x498
leaq 0x378(%rsp), %rbx
movq %rbx, %rdi
callq 0x12276
xorl %r12d, %r12d
leaq 0x2a0(%rsp), %r14
movl %r12d, -0x40(%r14)
movb %r12b, -0x3c(%r14)
xorps %xmm0, %xmm0
movups %xmm0, -0x38(%r14)
movups %xmm0, -0x28(%r14)
movups %xmm0, -0x18(%r14)
movq %r12, -0x8(%r14)
movq %r14, %rdi
callq 0xb7c0
movb %r12b, 0x40(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x30(%r14)
leaq 0x2f0(%rsp), %rax
movl %r12d, (%rax)
movq %r12, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
leaq 0x350(%rsp), %rax
movl %r12d, (%rax)
movq %r12, 0x8(%rax)
movups %xmm0, -0x40(%rax)
movups %xmm0, -0x30(%rax)
movups %xmm0, -0x20(%rax)
movb %r12b, -0x10(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r12, 0x20(%rax)
leaq 0x1544(%rip), %r15      # 0x12372
leaq 0x28(%rsp), %rdx
movq %r15, (%rdx)
movq %r12, 0x8(%rdx)
leaq 0x260(%rsp), %rdi
xorl %esi, %esi
movq %rbx, %rcx
callq 0x1afa0
leaq 0x15d1(%rip), %r14      # 0x12424
leaq 0x28(%rsp), %rdx
movq %r14, (%rdx)
movq $0x0, 0x8(%rdx)
leaq 0x260(%rsp), %rdi
leaq 0x378(%rsp), %rcx
xorl %esi, %esi
callq 0x1cf26
leaq 0x28(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x260(%rsp), %rdi
callq 0x1d0dc
movl 0x378(%rsp), %eax
leaq 0x148(%rsp), %rcx
movl %eax, (%rcx)
leaq 0x8(%rsp), %r8
movl $0x2, (%r8)
leaq 0x384f1(%rip), %rsi     # 0x493a7
leaq 0x384fa(%rip), %rdx     # 0x493b7
leaq 0x28(%rsp), %rdi
callq 0x1d3b3
cmpb $0x0, 0x28(%rsp)
je 0x11191
leaq 0x30(%rsp), %rdi
xorl %esi, %esi
callq 0x127b6
leaq 0x378(%rsp), %rbx
movq %rbx, %rdi
callq 0x124d6
movl 0x378(%rsp), %eax
leaq 0x148(%rsp), %rcx
movl %eax, (%rcx)
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x38495(%rip), %rsi     # 0x493a7
leaq 0x384a1(%rip), %rdx     # 0x493ba
leaq 0x28(%rsp), %rdi
callq 0x1d3b3
cmpb $0x0, 0x28(%rsp)
je 0x111ad
leaq 0x30(%rsp), %rdi
xorl %esi, %esi
callq 0x127b6
leaq 0x28(%rsp), %rdx
movq %r15, (%rdx)
movq $0x0, 0x8(%rdx)
leaq 0x148(%rsp), %rcx
movq %rbx, (%rcx)
leaq 0x260(%rsp), %rdi
xorl %esi, %esi
callq 0x1d530
leaq 0x28(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x260(%rsp), %rdi
callq 0x1d0dc
movl 0x378(%rsp), %eax
leaq 0x148(%rsp), %rcx
movl %eax, (%rcx)
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x38407(%rip), %rsi     # 0x493a7
leaq 0x38416(%rip), %rdx     # 0x493bd
leaq 0x28(%rsp), %rdi
callq 0x1d3b3
cmpb $0x0, 0x28(%rsp)
je 0x11257
leaq 0x30(%rsp), %rdi
xorl %r15d, %r15d
xorl %esi, %esi
callq 0x127b6
leaq 0x188(%rsp), %rbx
movl %r15d, -0x40(%rbx)
movb %r15b, -0x3c(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, -0x38(%rbx)
movups %xmm0, -0x28(%rbx)
movups %xmm0, -0x18(%rbx)
movq %r15, -0x8(%rbx)
movq %rbx, %rdi
callq 0xb7c0
movb %r15b, 0x40(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x30(%rbx)
leaq 0x1d8(%rsp), %rax
movl %r15d, (%rax)
movq %r15, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
leaq 0x238(%rsp), %rax
movl %r15d, (%rax)
movq %r15, 0x8(%rax)
movups %xmm0, -0x40(%rax)
movups %xmm0, -0x30(%rax)
movups %xmm0, -0x20(%rax)
movb %r15b, -0x10(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %r15, 0x20(%rax)
leaq 0x28(%rsp), %rdx
movq %r14, (%rdx)
movq %r15, 0x8(%rdx)
leaq 0x148(%rsp), %rdi
leaq 0x378(%rsp), %rcx
xorl %esi, %esi
callq 0x1cf26
leaq 0x28(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x148(%rsp), %rdi
callq 0x1d0dc
movl 0x378(%rsp), %eax
leaq 0x8(%rsp), %rcx
movl %eax, (%rcx)
leaq 0x18(%rsp), %r8
movl $0x7, (%r8)
leaq 0x38308(%rip), %rsi     # 0x493a7
leaq 0x3831a(%rip), %rdx     # 0x493c0
leaq 0x28(%rsp), %rdi
callq 0x1d3b3
cmpb $0x0, 0x28(%rsp)
je 0x11301
leaq 0x30(%rsp), %rdi
xorl %esi, %esi
callq 0x127b6
leaq 0x28(%rsp), %rdi
callq 0x12276
leaq 0x8(%rsp), %rdx
movq %r14, (%rdx)
movq $0x0, 0x8(%rdx)
leaq 0x148(%rsp), %rdi
leaq 0x28(%rsp), %rbx
xorl %esi, %esi
movq %rbx, %rcx
callq 0x1d632
leaq 0x8(%rsp), %rdx
movq %r14, (%rdx)
movq $0x0, 0x8(%rdx)
leaq 0x18(%rsp), %rcx
movq %rbx, (%rcx)
leaq 0x148(%rsp), %rdi
xorl %esi, %esi
callq 0x1d7e8
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x148(%rsp), %rdi
callq 0x1d0dc
movl 0x28(%rsp), %eax
leaq 0x18(%rsp), %rcx
movl %eax, (%rcx)
leaq 0x20(%rsp), %r8
movl $0x2, (%r8)
leaq 0x3826e(%rip), %rsi     # 0x493c3
leaq 0x3825b(%rip), %rdx     # 0x493b7
leaq 0x8(%rsp), %rdi
callq 0x1d3b3
cmpb $0x0, 0x8(%rsp)
jne 0x1148d
leaq 0x18(%rsp), %rdi
callq 0x295e4
movq 0x10(%rsp), %rax
testq %rax, %rax
je 0x11423
movq (%rax), %r8
jmp 0x1142a
leaq 0x148(%rsp), %rdi
callq 0x295e4
movq 0x30(%rsp), %rax
testq %rax, %rax
je 0x111d0
movq (%rax), %r8
jmp 0x111d7
leaq 0x148(%rsp), %rdi
callq 0x295e4
movq 0x30(%rsp), %rax
testq %rax, %rax
je 0x1127a
movq (%rax), %r8
jmp 0x11281
leaq 0x3c88d(%rip), %r8      # 0x4da64
leaq 0x37f86(%rip), %rdx     # 0x49164
leaq 0x8(%rsp), %rdi
movl $0x2, %esi
movl $0x118, %ecx            # imm = 0x118
callq 0x27652
leaq 0x8(%rsp), %rdi
leaq 0x148(%rsp), %rsi
callq 0x276f0
leaq 0x8(%rsp), %rdi
callq 0x276be
cmpq $0x0, 0x148(%rsp)
je 0x11246
movl $0x1, %edi
callq 0x2764e
testb %al, %al
je 0x1123a
movq 0x148(%rsp), %rdi
testq %rdi, %rdi
je 0x1123a
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x148(%rsp)
leaq 0x30(%rsp), %rdi
xorl %esi, %esi
callq 0x127b6
jmp 0x114b0
leaq 0x148(%rsp), %rdi
callq 0x295e4
movq 0x30(%rsp), %rax
testq %rax, %rax
je 0x11321
movq (%rax), %r8
jmp 0x11328
leaq 0x3c7e3(%rip), %r8      # 0x4da64
leaq 0x37edc(%rip), %rdx     # 0x49164
leaq 0x8(%rsp), %rdi
movl $0x2, %esi
movl $0x11c, %ecx            # imm = 0x11C
callq 0x27652
leaq 0x8(%rsp), %rdi
leaq 0x148(%rsp), %rsi
callq 0x276f0
leaq 0x8(%rsp), %rdi
callq 0x276be
cmpq $0x0, 0x148(%rsp)
je 0x112f0
movl $0x1, %edi
callq 0x2764e
testb %al, %al
je 0x112e4
movq 0x148(%rsp), %rdi
testq %rdi, %rdi
je 0x112e4
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x148(%rsp)
leaq 0x30(%rsp), %rdi
xorl %esi, %esi
callq 0x127b6
jmp 0x114b0
leaq 0x8(%rsp), %rdi
callq 0x295e4
movq 0x30(%rsp), %rax
testq %rax, %rax
je 0x113a8
movq (%rax), %r8
jmp 0x113af
leaq 0x3c73c(%rip), %r8      # 0x4da64
leaq 0x37e35(%rip), %rdx     # 0x49164
leaq 0x8(%rsp), %rdi
movl $0x2, %esi
movl $0x121, %ecx            # imm = 0x121
callq 0x27652
leaq 0x8(%rsp), %rdi
leaq 0x148(%rsp), %rsi
callq 0x276f0
leaq 0x8(%rsp), %rdi
callq 0x276be
cmpq $0x0, 0x148(%rsp)
je 0x11397
movl $0x1, %edi
callq 0x2764e
testb %al, %al
je 0x1138b
movq 0x148(%rsp), %rdi
testq %rdi, %rdi
je 0x1138b
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x148(%rsp)
leaq 0x30(%rsp), %rdi
xorl %esi, %esi
callq 0x127b6
jmp 0x114b0
leaq 0x3c6b5(%rip), %r8      # 0x4da64
leaq 0x37dae(%rip), %rdx     # 0x49164
leaq 0x18(%rsp), %rdi
movl $0x2, %esi
movl $0x128, %ecx            # imm = 0x128
callq 0x27652
leaq 0x18(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x276f0
leaq 0x18(%rsp), %rdi
callq 0x276be
cmpq $0x0, 0x8(%rsp)
je 0x11412
movl $0x1, %edi
callq 0x2764e
testb %al, %al
je 0x11409
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x11409
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x8(%rsp)
leaq 0x30(%rsp), %rdi
xorl %esi, %esi
callq 0x127b6
jmp 0x114a3
leaq 0x3c63a(%rip), %r8      # 0x4da64
leaq 0x37d33(%rip), %rdx     # 0x49164
leaq 0x20(%rsp), %rdi
movl $0x2, %esi
movl $0x12f, %ecx            # imm = 0x12F
callq 0x27652
leaq 0x20(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x276f0
leaq 0x20(%rsp), %rdi
callq 0x276be
cmpq $0x0, 0x18(%rsp)
je 0x1148d
movl $0x1, %edi
callq 0x2764e
testb %al, %al
je 0x11484
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x11484
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x18(%rsp)
leaq 0x10(%rsp), %rdi
xorl %esi, %esi
callq 0x127b6
leaq 0x30(%rsp), %rdi
callq 0x14f14
leaq 0x148(%rsp), %rdi
callq 0x1ae22
leaq 0x260(%rsp), %rdi
callq 0x1ae22
leaq 0x380(%rsp), %rdi
callq 0x14f14
addq $0x498, %rsp            # imm = 0x498
popq %rbx
popq %r12
popq %r14
popq %r15
retq
jmp 0x115cc
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x276be
jmp 0x114f0
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x120ca
jmp 0x114ff
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x120dc
jmp 0x11532
jmp 0x115cc
jmp 0x115cc
jmp 0x1152f
jmp 0x1152f
jmp 0x115cc
jmp 0x1152f
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x276be
jmp 0x11541
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x14f14
jmp 0x1156f
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x120ca
jmp 0x11552
jmp 0x1156c
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x120dc
jmp 0x1156f
jmp 0x115cc
jmp 0x115cc
jmp 0x115cc
jmp 0x1156c
jmp 0x11598
jmp 0x1156c
jmp 0x115a9
movq %rax, %rbx
leaq 0x148(%rsp), %rdi
callq 0x1ae22
jmp 0x115dd
jmp 0x115bd
jmp 0x115cc
jmp 0x115cc
jmp 0x115cc
jmp 0x115da
jmp 0x11598
jmp 0x115da
jmp 0x115a9
jmp 0x115da
jmp 0x115bd
jmp 0x115cc
jmp 0x115cc
jmp 0x115cc
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x276be
jmp 0x115ac
jmp 0x115da
movq %rax, %rbx
leaq 0x148(%rsp), %rdi
callq 0x120ca
jmp 0x115c0
jmp 0x115da
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x120dc
jmp 0x115dd
movq %rax, %rdi
callq 0xd81f
jmp 0x115da
jmp 0x115da
jmp 0x115da
movq %rax, %rbx
leaq 0x260(%rsp), %rdi
callq 0x1ae22
leaq 0x380(%rsp), %rdi
callq 0x14f14
movq %rbx, %rdi
callq 0xba10
nop