// File: /workspace/github_cpp_makefile_star2_O3/dsharlet[P]array/test/array.cpp
// Function: nda::test_array_equality_body()
TEST(array_equality) {
  array_of_rank<int, 3> a({4, 5, 6});
  fill_pattern(a);
  array_of_rank<int, 3> b({4, 5, 6});
  fill_pattern(b);
  array_of_rank<int, 3> c({dim<>(0, 4, 2), 5, 6});
  fill_pattern(c);

  ASSERT(a == b);

  // Arrays with different strides are not equal by operator!=,
  // but equal ignores strides.
  ASSERT(a != c);
  ASSERT(equal(a, c));

  a(1, 2, 3) = 5;
  ASSERT(a != b);
  ASSERT(a != c);
  ASSERT(!equal(a, c));
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb48, %rsp            # imm = 0xB48
movabsq $-0x8000000000000000, %r13 # imm = 0x8000000000000000
leaq 0xd0(%rsp), %rbx
xorps %xmm0, %xmm0
movups %xmm0, -0x8(%rbx)
movups %xmm0, -0x18(%rbx)
movq $0x6, 0x8(%rbx)
movq %r13, 0x10(%rbx)
xorl %eax, %eax
movq %rax, 0x18(%rbx)
movq $0x5, 0x20(%rbx)
movq %r13, 0x28(%rbx)
movq %rax, 0x30(%rbx)
movq $0x4, 0x38(%rbx)
movq %r13, 0x40(%rbx)
leaq 0xb0(%rsp), %r14
movq %r14, %rdi
callq 0x1a8cc
movq %r14, %rdi
callq 0x1a9a6
movq 0x18(%r14), %rcx
leaq 0x188(%rsp), %rax
movq %rcx, -0x8(%rax)
movl $0x9, %ecx
movq %rax, %rdi
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x8(%rsp), %rcx
movl $0x0, (%rcx)
leaq 0x118(%rsp), %r14
movq %rcx, (%r14)
leaq 0x180(%rsp), %rcx
movq %rcx, 0x8(%r14)
movq %rax, %rdi
movq %r14, %rsi
callq 0x1d948
leaq 0x180(%rsp), %rdi
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%rdi)
movups %xmm0, 0x8(%rdi)
movq $0x6, 0x28(%rdi)
movq %r13, 0x30(%rdi)
xorl %eax, %eax
movq %rax, 0x38(%rdi)
movq $0x5, 0x40(%rdi)
movq %r13, 0x48(%rdi)
movq %rax, 0x50(%rdi)
movq $0x4, 0x58(%rdi)
movq %r13, 0x60(%rdi)
callq 0x1a8cc
leaq 0x180(%rsp), %rdi
callq 0x1a9a6
leaq 0x1a0(%rsp), %r15
movq -0x8(%r15), %rcx
leaq 0x120(%rsp), %rax
movq %rcx, -0x8(%rax)
movl $0x9, %ecx
movq %rax, %rdi
movq %r15, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x60(%rsp), %rcx
movl $0x0, (%rcx)
leaq 0x8(%rsp), %r12
movq %rcx, (%r12)
movq %r14, 0x8(%r12)
movq %rax, %rdi
movq %r12, %rsi
callq 0x1d948
xorps %xmm0, %xmm0
leaq 0x118(%rsp), %rdi
movups %xmm0, 0x18(%rdi)
movups %xmm0, 0x8(%rdi)
movq $0x6, 0x28(%rdi)
movq %r13, 0x30(%rdi)
xorl %eax, %eax
movq %rax, 0x38(%rdi)
movq $0x5, 0x40(%rdi)
movq %r13, 0x48(%rdi)
movq %rax, 0x50(%rdi)
movq $0x4, 0x58(%rdi)
movq $0x2, 0x60(%rdi)
callq 0x1a8cc
leaq 0x118(%rsp), %rdi
callq 0x1a9a6
leaq 0x138(%rsp), %r14
movq -0x8(%r14), %rcx
leaq 0x10(%rsp), %rax
movq %rcx, -0x8(%rax)
movl $0x9, %ecx
movq %rax, %rdi
movq %r14, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x5c(%rsp), %rcx
movl $0x0, (%rcx)
leaq 0x60(%rsp), %rsi
movq %rcx, (%rsi)
movq %r12, 0x8(%rsi)
movq %rax, %rdi
callq 0x1d948
movq 0xc8(%rsp), %rax
leaq 0x10(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq 0x198(%rsp), %rax
leaq 0x68(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %r15, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x8(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1da30
movl %eax, %ebp
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x8ea04(%rip), %rsi     # 0xa30d3
leaq 0x8ea03(%rip), %rdx     # 0xa30d9
leaq 0x8(%rsp), %rdi
callq 0xd14c
xorb $0x1, %bpl
movzbl %bpl, %esi
leaq 0x9b8(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x9b8(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x1471e
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
movq 0xc8(%rsp), %rax
leaq 0x10(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq 0x130(%rsp), %rax
leaq 0x68(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %r14, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x8(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1da30
movl %eax, %ebp
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x90723(%rip), %rsi     # 0xa4e99
leaq 0x90722(%rip), %rdx     # 0xa4e9f
callq 0xd14c
movzbl %bpl, %esi
leaq 0x828(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x828(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x147bc
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
movq 0xc8(%rsp), %rax
leaq 0x10(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq 0x130(%rsp), %rax
leaq 0x68(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %r14, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x8(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1ed27
movl %eax, %ebp
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x907e7(%rip), %rsi     # 0xa4ffb
leaq 0x907eb(%rip), %rdx     # 0xa5006
callq 0xd14c
movzbl %bpl, %esi
leaq 0x698(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x698(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x1485a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
movl $0x1, %eax
subq 0x100(%rsp), %rax
imulq 0x110(%rsp), %rax
movl $0x2, %ecx
subq 0xe8(%rsp), %rcx
movq 0xc8(%rsp), %rdx
imulq 0xf8(%rsp), %rcx
movl $0x3, %esi
subq 0xd0(%rsp), %rsi
imulq 0xe0(%rsp), %rsi
leaq (%rdx,%rcx,4), %rcx
leaq (%rcx,%rax,4), %rax
movl $0x5, (%rax,%rsi,4)
leaq 0x10(%rsp), %rdi
movq %rdx, -0x8(%rdi)
movl $0x9, %ecx
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq 0x198(%rsp), %rax
leaq 0x68(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %r15, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x8(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1da30
movl %eax, %ebp
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x906f0(%rip), %rsi     # 0xa4ff3
leaq 0x906ef(%rip), %rdx     # 0xa4ff9
callq 0xd14c
movzbl %bpl, %esi
leaq 0x508(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x508(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x14949
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
movq 0xc8(%rsp), %rax
leaq 0x10(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq 0x130(%rsp), %rax
leaq 0x68(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %r14, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x8(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1da30
movl %eax, %ebp
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x904f8(%rip), %rsi     # 0xa4e99
leaq 0x904f7(%rip), %rdx     # 0xa4e9f
callq 0xd14c
movzbl %bpl, %esi
leaq 0x378(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x378(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x149e7
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
movq 0xc8(%rsp), %rax
leaq 0x10(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq 0x130(%rsp), %rax
leaq 0x68(%rsp), %rdi
movq %rax, -0x8(%rdi)
movl $0x9, %ecx
movq %r14, %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x8(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1ed27
movl %eax, %ebx
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x905bb(%rip), %rsi     # 0xa4ffa
leaq 0x905c0(%rip), %rdx     # 0xa5006
callq 0xd14c
xorb $0x1, %bl
movzbl %bl, %esi
leaq 0x1e8(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf80
leaq 0x1e8(%rsp), %rdi
callq 0xbfd8
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x14a87
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
leaq 0x118(%rsp), %rdi
callq 0x1d848
leaq 0x180(%rsp), %rdi
callq 0x1d848
leaq 0xb0(%rsp), %rdi
callq 0x1d848
addq $0xb48, %rsp            # imm = 0xB48
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x14b3c
jmp 0x14b3c
jmp 0x14b3c
jmp 0x14b06
jmp 0x14b06
jmp 0x14b06
jmp 0x14b06
jmp 0x14b06
jmp 0x14b06
jmp 0x14afc
jmp 0x14b01
jmp 0x14ae0
jmp 0x14ae0
jmp 0x14ae0
jmp 0x14ae0
jmp 0x14ae0
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x14b09
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
jmp 0x14b09
movq %rax, %rbx
jmp 0x14b16
movq %rax, %rbx
jmp 0x14b23
movq %rax, %rbx
leaq 0x118(%rsp), %rdi
callq 0x1d848
leaq 0x180(%rsp), %rdi
callq 0x1d848
leaq 0xb0(%rsp), %rdi
callq 0x1d848
movq %rbx, %rdi
callq 0x2300
jmp 0x14b3c
jmp 0x14b3c
movq %rax, %rdi
callq 0xc0a9