// File: eecs280staff[P]unit_test_framework/test/test_special_asserts.cpp
// Function: test_assert_equal()
void test_assert_equal() {
    cout << "test_assert_equal" << endl;
    int i = 42;

    ASSERT_EQUAL(42, 42);
    ASSERT_EQUAL(42.5, 42.5);
    ASSERT_EQUAL(string("spam"), string("spam"));
    ASSERT_EQUAL(&i, &i);
    ASSERT_EQUAL(true, true);

    ASSERT_TEST_FAILURE_RAISED(ASSERT_EQUAL(42, 3));
    ASSERT_TEST_FAILURE_RAISED(ASSERT_EQUAL(42.6, 42.5));
    ASSERT_TEST_FAILURE_RAISED(ASSERT_EQUAL(string("spam"), string("EGG")));
    ASSERT_TEST_FAILURE_RAISED(ASSERT_EQUAL(&i + 1, &i));
    ASSERT_TEST_FAILURE_RAISED(ASSERT_EQUAL(true, false));

    ASSERT_TEST_FAILURE_RAISED(ASSERT_EQUAL(Printable{1}, Printable{2}));
    ASSERT_TEST_FAILURE_RAISED(ASSERT_EQUAL(NotPrintable{1}, NotPrintable{2}));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2d0, %rsp            # imm = 0x2D0
movq 0x9a06(%rip), %rdi      # 0xbfd8
leaq 0x5aa4(%rip), %rsi      # 0x807d
callq 0x2180
movq %rax, %rdi
movq 0x99e0(%rip), %rsi      # 0xbfc8
callq 0x21c0
movl $0x2a, -0x4(%rbp)
movl $0x2a, -0x8(%rbp)
movl $0x2a, -0xc(%rbp)
leaq 0x5a86(%rip), %rcx      # 0x808f
leaq -0x8(%rbp), %rdi
leaq -0xc(%rbp), %rsi
movl $0x4b, %edx
callq 0x4180
movabsq $0x4045400000000000, %rax # imm = 0x4045400000000000
movq %rax, -0x18(%rbp)
movq %rax, -0x20(%rbp)
leaq 0x5a70(%rip), %rcx      # 0x80a4
leaq -0x18(%rbp), %rdi
leaq -0x20(%rbp), %rsi
movl $0x4c, %edx
callq 0x42f0
leaq -0x41(%rbp), %rdi
movq %rdi, -0x248(%rbp)
callq 0x22d0
movq -0x248(%rbp), %rdx
leaq 0x5a59(%rip), %rsi      # 0x80bd
leaq -0x40(%rbp), %rdi
callq 0x45d0
jmp 0x266f
leaq -0x79(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x22d0
movq -0x250(%rbp), %rdx
leaq 0x5a30(%rip), %rsi      # 0x80bd
leaq -0x78(%rbp), %rdi
callq 0x45d0
jmp 0x2698
leaq 0x5a23(%rip), %rcx      # 0x80c2
leaq -0x40(%rbp), %rdi
leaq -0x78(%rbp), %rsi
movl $0x4d, %edx
callq 0x4460
jmp 0x26b3
leaq -0x78(%rbp), %rdi
callq 0x20c0
leaq -0x79(%rbp), %rdi
callq 0x21e0
leaq -0x40(%rbp), %rdi
callq 0x20c0
leaq -0x41(%rbp), %rdi
callq 0x21e0
leaq -0x4(%rbp), %rax
movq %rax, -0x88(%rbp)
movq %rax, -0x90(%rbp)
leaq 0x59ff(%rip), %rcx      # 0x80ef
leaq -0x88(%rbp), %rdi
leaq -0x90(%rbp), %rsi
movl $0x4e, %edx
callq 0x4680
movb $0x1, -0x91(%rbp)
movb $0x1, -0x92(%rbp)
leaq 0x59e7(%rip), %rcx      # 0x8104
leaq -0x91(%rbp), %rdi
leaq -0x92(%rbp), %rsi
movl $0x4f, %edx
callq 0x47f0
movl $0x2a, -0x98(%rbp)
movl $0x3, -0x9c(%rbp)
leaq 0x59cd(%rip), %rcx      # 0x811d
leaq -0x98(%rbp), %rdi
leaq -0x9c(%rbp), %rsi
movl $0x51, %edx
callq 0x4180
jmp 0x276a
movq 0x9867(%rip), %rdi      # 0xbfd8
leaq 0x59b9(%rip), %rsi      # 0x8131
callq 0x2180
movq %rax, -0x258(%rbp)
jmp 0x2786
movq -0x258(%rbp), %rdi
movq 0x9834(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x279b
leaq 0x5e19(%rip), %rdi      # 0x85bb
leaq 0x599f(%rip), %rsi      # 0x8148
movl $0x51, %edx
leaq 0x59b1(%rip), %rcx      # 0x8166
callq 0x20d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x27fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x27eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x20c0
leaq -0x79(%rbp), %rdi
callq 0x21e0
leaq -0x40(%rbp), %rdi
callq 0x20c0
leaq -0x41(%rbp), %rdi
callq 0x21e0
jmp 0x3100
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x3100
movq -0x50(%rbp), %rdi
callq 0x2060
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x4960
jmp 0x284c
movq 0x9785(%rip), %rdi      # 0xbfd8
leaq -0xc8(%rbp), %rsi
callq 0x2170
movq %rax, -0x260(%rbp)
jmp 0x2868
movq -0x260(%rbp), %rdi
movq 0x9752(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x287d
leaq -0xc8(%rbp), %rdi
callq 0x20c0
callq 0x2290
movabsq $0x40454ccccccccccd, %rax # imm = 0x40454CCCCCCCCCCD
movq %rax, -0xd0(%rbp)
movabsq $0x4045400000000000, %rax # imm = 0x4045400000000000
movq %rax, -0xd8(%rbp)
leaq 0x58c8(%rip), %rcx      # 0x817f
leaq -0xd0(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
movl $0x52, %edx
callq 0x42f0
jmp 0x28d1
movq 0x9700(%rip), %rdi      # 0xbfd8
leaq 0x5852(%rip), %rsi      # 0x8131
callq 0x2180
movq %rax, -0x268(%rbp)
jmp 0x28ed
movq -0x268(%rbp), %rdi
movq 0x96cd(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2902
leaq 0x5cb2(%rip), %rdi      # 0x85bb
leaq 0x5838(%rip), %rsi      # 0x8148
movl $0x52, %edx
leaq 0x584a(%rip), %rcx      # 0x8166
callq 0x20d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2947
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x20c0
callq 0x2290
jmp 0x294e
jmp 0x3100
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x3100
movq -0x50(%rbp), %rdi
callq 0x2060
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x4960
jmp 0x2994
movq 0x963d(%rip), %rdi      # 0xbfd8
leaq -0x100(%rbp), %rsi
callq 0x2170
movq %rax, -0x270(%rbp)
jmp 0x29b0
movq -0x270(%rbp), %rdi
movq 0x960a(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x29c5
leaq -0x100(%rbp), %rdi
callq 0x20c0
callq 0x2290
leaq -0x121(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x22d0
movq -0x278(%rbp), %rdx
leaq 0x56c6(%rip), %rsi      # 0x80bd
leaq -0x120(%rbp), %rdi
callq 0x45d0
jmp 0x2a05
leaq -0x149(%rbp), %rdi
movq %rdi, -0x280(%rbp)
callq 0x22d0
movq -0x280(%rbp), %rdx
leaq 0x5772(%rip), %rsi      # 0x8198
leaq -0x148(%rbp), %rdi
callq 0x45d0
jmp 0x2a34
leaq 0x5761(%rip), %rcx      # 0x819c
leaq -0x120(%rbp), %rdi
leaq -0x148(%rbp), %rsi
movl $0x53, %edx
callq 0x4460
jmp 0x2a55
leaq -0x148(%rbp), %rdi
callq 0x20c0
leaq -0x149(%rbp), %rdi
callq 0x21e0
leaq -0x120(%rbp), %rdi
callq 0x20c0
leaq -0x121(%rbp), %rdi
callq 0x21e0
movq 0x954c(%rip), %rdi      # 0xbfd8
leaq 0x569e(%rip), %rsi      # 0x8131
callq 0x2180
movq %rax, -0x288(%rbp)
jmp 0x2aa1
movq -0x288(%rbp), %rdi
movq 0x9519(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2ab6
leaq 0x5afe(%rip), %rdi      # 0x85bb
leaq 0x5684(%rip), %rsi      # 0x8148
movl $0x53, %edx
leaq 0x5696(%rip), %rcx      # 0x8166
callq 0x20d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2afb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x20c0
callq 0x2290
jmp 0x2b02
jmp 0x3100
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2b3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x20c0
leaq -0x149(%rbp), %rdi
callq 0x21e0
leaq -0x120(%rbp), %rdi
callq 0x20c0
leaq -0x121(%rbp), %rdi
callq 0x21e0
jmp 0x2b6d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x3100
movq -0x50(%rbp), %rdi
callq 0x2060
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rsi
leaq -0x178(%rbp), %rdi
callq 0x4960
jmp 0x2ba2
movq 0x942f(%rip), %rdi      # 0xbfd8
leaq -0x178(%rbp), %rsi
callq 0x2170
movq %rax, -0x290(%rbp)
jmp 0x2bbe
movq -0x290(%rbp), %rdi
movq 0x93fc(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2bd3
leaq -0x178(%rbp), %rdi
callq 0x20c0
callq 0x2290
leaq (%rbp), %rax
movq %rax, -0x180(%rbp)
leaq -0x4(%rbp), %rax
movq %rax, -0x188(%rbp)
leaq 0x55c7(%rip), %rcx      # 0x81c8
leaq -0x180(%rbp), %rdi
leaq -0x188(%rbp), %rsi
movl $0x54, %edx
callq 0x4680
jmp 0x2c1b
movq 0x93b6(%rip), %rdi      # 0xbfd8
leaq 0x5508(%rip), %rsi      # 0x8131
callq 0x2180
movq %rax, -0x298(%rbp)
jmp 0x2c37
movq -0x298(%rbp), %rdi
movq 0x9383(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2c4c
leaq 0x5968(%rip), %rdi      # 0x85bb
leaq 0x54ee(%rip), %rsi      # 0x8148
movl $0x54, %edx
leaq 0x5500(%rip), %rcx      # 0x8166
callq 0x20d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2c91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x20c0
callq 0x2290
jmp 0x2c98
jmp 0x3100
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x3100
movq -0x50(%rbp), %rdi
callq 0x2060
movq %rax, -0x190(%rbp)
movq -0x190(%rbp), %rsi
leaq -0x1b0(%rbp), %rdi
callq 0x4960
jmp 0x2cde
movq 0x92f3(%rip), %rdi      # 0xbfd8
leaq -0x1b0(%rbp), %rsi
callq 0x2170
movq %rax, -0x2a0(%rbp)
jmp 0x2cfa
movq -0x2a0(%rbp), %rdi
movq 0x92c0(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2d0f
leaq -0x1b0(%rbp), %rdi
callq 0x20c0
callq 0x2290
movb $0x1, -0x1b1(%rbp)
movb $0x0, -0x1b2(%rbp)
leaq 0x54ac(%rip), %rcx      # 0x81e1
leaq -0x1b1(%rbp), %rdi
leaq -0x1b2(%rbp), %rsi
movl $0x55, %edx
callq 0x47f0
jmp 0x2d4f
movq 0x9282(%rip), %rdi      # 0xbfd8
leaq 0x53d4(%rip), %rsi      # 0x8131
callq 0x2180
movq %rax, -0x2a8(%rbp)
jmp 0x2d6b
movq -0x2a8(%rbp), %rdi
movq 0x924f(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2d80
leaq 0x5834(%rip), %rdi      # 0x85bb
leaq 0x53ba(%rip), %rsi      # 0x8148
movl $0x55, %edx
leaq 0x53cc(%rip), %rcx      # 0x8166
callq 0x20d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2dc5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x20c0
callq 0x2290
jmp 0x2dcc
jmp 0x3100
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x3100
movq -0x50(%rbp), %rdi
callq 0x2060
movq %rax, -0x1c0(%rbp)
movq -0x1c0(%rbp), %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x4960
jmp 0x2e12
movq 0x91bf(%rip), %rdi      # 0xbfd8
leaq -0x1e0(%rbp), %rsi
callq 0x2170
movq %rax, -0x2b0(%rbp)
jmp 0x2e2e
movq -0x2b0(%rbp), %rdi
movq 0x918c(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2e43
leaq -0x1e0(%rbp), %rdi
callq 0x20c0
callq 0x2290
movl $0x1, -0x1e4(%rbp)
movl $0x2, -0x1e8(%rbp)
leaq 0x538c(%rip), %rcx      # 0x81fb
leaq -0x1e4(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
movl $0x57, %edx
callq 0x4a30
jmp 0x2e89
movq 0x9148(%rip), %rdi      # 0xbfd8
leaq 0x529a(%rip), %rsi      # 0x8131
callq 0x2180
movq %rax, -0x2b8(%rbp)
jmp 0x2ea5
movq -0x2b8(%rbp), %rdi
movq 0x9115(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2eba
leaq 0x56fa(%rip), %rdi      # 0x85bb
leaq 0x5280(%rip), %rsi      # 0x8148
movl $0x57, %edx
leaq 0x5292(%rip), %rcx      # 0x8166
callq 0x20d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2eff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x20c0
callq 0x2290
jmp 0x2f06
jmp 0x3100
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x3100
movq -0x50(%rbp), %rdi
callq 0x2060
movq %rax, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0x4960
jmp 0x2f4c
movq 0x9085(%rip), %rdi      # 0xbfd8
leaq -0x210(%rbp), %rsi
callq 0x2170
movq %rax, -0x2c0(%rbp)
jmp 0x2f68
movq -0x2c0(%rbp), %rdi
movq 0x9052(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2f7d
leaq -0x210(%rbp), %rdi
callq 0x20c0
callq 0x2290
movl $0x1, -0x214(%rbp)
movl $0x2, -0x218(%rbp)
leaq 0x527b(%rip), %rcx      # 0x8224
leaq -0x214(%rbp), %rdi
leaq -0x218(%rbp), %rsi
movl $0x58, %edx
callq 0x4ba0
jmp 0x2fc3
movq 0x900e(%rip), %rdi      # 0xbfd8
leaq 0x5160(%rip), %rsi      # 0x8131
callq 0x2180
movq %rax, -0x2c8(%rbp)
jmp 0x2fdf
movq -0x2c8(%rbp), %rdi
movq 0x8fdb(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x2ff4
leaq 0x55c0(%rip), %rdi      # 0x85bb
leaq 0x5146(%rip), %rsi      # 0x8148
movl $0x58, %edx
leaq 0x5158(%rip), %rcx      # 0x8166
callq 0x20d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x3039
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x20c0
callq 0x2290
jmp 0x3040
jmp 0x3100
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x3100
movq -0x50(%rbp), %rdi
callq 0x2060
movq %rax, -0x220(%rbp)
movq -0x220(%rbp), %rsi
leaq -0x240(%rbp), %rdi
callq 0x4960
jmp 0x3086
movq 0x8f4b(%rip), %rdi      # 0xbfd8
leaq -0x240(%rbp), %rsi
callq 0x2170
movq %rax, -0x2d0(%rbp)
jmp 0x30a2
movq -0x2d0(%rbp), %rdi
movq 0x8f18(%rip), %rsi      # 0xbfc8
callq 0x21c0
jmp 0x30b7
leaq -0x240(%rbp), %rdi
callq 0x20c0
callq 0x2290
addq $0x2d0, %rsp            # imm = 0x2D0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x30f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x20c0
callq 0x2290
jmp 0x30fe
jmp 0x3100
movq -0x50(%rbp), %rdi
callq 0x22c0
movq %rax, %rdi
callq 0x4a20
nopw %cs:(%rax,%rax)