// File: /workspace/github_cpp_makefile_star2_O1/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 0x1a362
movq %r14, %rdi
callq 0x1a43a
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 0x1d4b4
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 0x1a362
leaq 0x180(%rsp), %rdi
callq 0x1a43a
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 0x1d4b4
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 0x1a362
leaq 0x118(%rsp), %rdi
callq 0x1a43a
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 0x1d4b4
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 0x1d5a2
movl %eax, %ebp
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x8ceaa(%rip), %rsi     # 0xa10a3
leaq 0x8cea9(%rip), %rdx     # 0xa10a9
leaq 0x8(%rsp), %rdi
callq 0xd0b8
xorb $0x1, %bpl
movzbl %bpl, %esi
leaq 0x9b8(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf0a
leaq 0x9b8(%rsp), %rdi
callq 0xbf62
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x14248
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 0x1d5a2
movl %eax, %ebp
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x8ebb1(%rip), %rsi     # 0xa2e51
leaq 0x8ebb0(%rip), %rdx     # 0xa2e57
callq 0xd0b8
movzbl %bpl, %esi
leaq 0x828(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf0a
leaq 0x828(%rsp), %rdi
callq 0xbf62
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x142e6
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 0x1e283
movl %eax, %ebp
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x8ec75(%rip), %rsi     # 0xa2fb3
leaq 0x8ec79(%rip), %rdx     # 0xa2fbe
callq 0xd0b8
movzbl %bpl, %esi
leaq 0x698(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf0a
leaq 0x698(%rsp), %rdi
callq 0xbf62
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x14384
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 0x1d5a2
movl %eax, %ebp
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x8eb7e(%rip), %rsi     # 0xa2fab
leaq 0x8eb7d(%rip), %rdx     # 0xa2fb1
callq 0xd0b8
movzbl %bpl, %esi
leaq 0x508(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf0a
leaq 0x508(%rsp), %rdi
callq 0xbf62
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x14473
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 0x1d5a2
movl %eax, %ebp
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x8e986(%rip), %rsi     # 0xa2e51
leaq 0x8e985(%rip), %rdx     # 0xa2e57
callq 0xd0b8
movzbl %bpl, %esi
leaq 0x378(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf0a
leaq 0x378(%rsp), %rdi
callq 0xbf62
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x14511
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 0x1e283
movl %eax, %ebx
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x8ea49(%rip), %rsi     # 0xa2fb2
leaq 0x8ea4e(%rip), %rdx     # 0xa2fbe
callq 0xd0b8
xorb $0x1, %bl
movzbl %bl, %esi
leaq 0x1e8(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xbf0a
leaq 0x1e8(%rsp), %rdi
callq 0xbf62
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x145b1
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
leaq 0x118(%rsp), %rdi
callq 0x1d3b4
leaq 0x180(%rsp), %rdi
callq 0x1d3b4
leaq 0xb0(%rsp), %rdi
callq 0x1d3b4
addq $0xb48, %rsp            # imm = 0xB48
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x14666
jmp 0x14666
jmp 0x14666
jmp 0x14630
jmp 0x14630
jmp 0x14630
jmp 0x14630
jmp 0x14630
jmp 0x14630
jmp 0x14626
jmp 0x1462b
jmp 0x1460a
jmp 0x1460a
jmp 0x1460a
jmp 0x1460a
jmp 0x1460a
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x14633
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21f0
jmp 0x14633
movq %rax, %rbx
jmp 0x14640
movq %rax, %rbx
jmp 0x1464d
movq %rax, %rbx
leaq 0x118(%rsp), %rdi
callq 0x1d3b4
leaq 0x180(%rsp), %rdi
callq 0x1d3b4
leaq 0xb0(%rsp), %rdi
callq 0x1d3b4
movq %rbx, %rdi
callq 0x2300
jmp 0x14666
jmp 0x14666
movq %rax, %rdi
callq 0xc036