// File: dsharlet[P]array/test/array_ref.cpp
// Function: nda::test_array_ref_copy_body()
TEST(array_ref_copy) {
  int data[100];
  for (int i = 0; i < 100; i++) {
    data[i] = i;
  }

  array_ref_of_rank<int, 1> evens(data, {dim<>(0, 50, 2)});
  dense_array<int, 1> evens_copy = make_compact_copy(evens);
  for (int i = 0; i < 50; i++) {
    ASSERT_EQ(evens(i), i * 2);
    ASSERT_EQ(evens_copy(i), i * 2);
  }

  array_ref_of_rank<int, 0> scalar(&data[5], {});
  array_of_rank<int, 0> scalar_copy = make_compact_copy(scalar);
  ASSERT_EQ(scalar(), scalar_copy());
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x910, %rsp            # imm = 0x910
movl $0x0, -0x194(%rbp)
cmpl $0x64, -0x194(%rbp)
jge 0x8ec23
movl -0x194(%rbp), %ecx
movslq -0x194(%rbp), %rax
movl %ecx, -0x190(%rbp,%rax,4)
movl -0x194(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x194(%rbp)
jmp 0x8ebf5
xorl %eax, %eax
movl %eax, %esi
leaq -0x1e8(%rbp), %rdi
movq %rdi, -0x7c8(%rbp)
movl $0x32, %edx
movl $0x2, %ecx
callq 0x10c60
movq -0x7c8(%rbp), %rsi
leaq -0x1d0(%rbp), %rdi
movq %rdi, -0x7c0(%rbp)
callq 0x367c0
movq -0x7c0(%rbp), %rdx
leaq -0x1b8(%rbp), %rdi
movq %rdi, -0x7b8(%rbp)
leaq -0x190(%rbp), %rsi
callq 0x96d50
leaq -0x221(%rbp), %rdi
movq %rdi, -0x7b0(%rbp)
callq 0x10e30
movq -0x7b8(%rbp), %rsi
movq -0x7b0(%rbp), %rdx
leaq -0x220(%rbp), %rdi
callq 0x96da0
jmp 0x8ecae
leaq -0x221(%rbp), %rdi
callq 0x10e50
movl $0x0, -0x238(%rbp)
cmpl $0x32, -0x238(%rbp)
jge 0x8f183
movl -0x238(%rbp), %esi
leaq -0x1b8(%rbp), %rdi
callq 0x96d10
movq %rax, -0x7d0(%rbp)
jmp 0x8ecec
movq -0x7d0(%rbp), %rax
movl (%rax), %eax
movl -0x238(%rbp), %ecx
addl %ecx, %ecx
subl %ecx, %eax
sete %al
movb %al, -0x7d9(%rbp)
leaq -0x3e9(%rbp), %rdi
movq %rdi, -0x7d8(%rbp)
callq 0x33b0
movq -0x7d8(%rbp), %rdx
leaq 0x158db9(%rip), %rsi    # 0x1e7ae2
leaq -0x3e8(%rbp), %rdi
callq 0x10a90
jmp 0x8ed37
movb -0x7d9(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x3c8(%rbp), %rdi
leaq -0x3e8(%rbp), %rdx
callq 0x10f80
jmp 0x8ed58
leaq 0x14da86(%rip), %rsi    # 0x1dc7e5
leaq -0x3c8(%rbp), %rdi
callq 0x34320
movq %rax, -0x7e8(%rbp)
jmp 0x8ed74
movq -0x7e8(%rbp), %rdi
leaq 0x158d72(%rip), %rsi    # 0x1e7af4
callq 0x36600
movq %rax, -0x7f0(%rbp)
jmp 0x8ed90
movq -0x7f0(%rbp), %rdi
leaq 0x151a0e(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x7f8(%rbp)
jmp 0x8edac
movl -0x238(%rbp), %esi
leaq -0x1b8(%rbp), %rdi
callq 0x96d10
movq %rax, -0x800(%rbp)
jmp 0x8edc7
movq -0x800(%rbp), %rsi
movq -0x7f8(%rbp), %rdi
callq 0x343a0
movq %rax, -0x808(%rbp)
jmp 0x8ede3
movq -0x808(%rbp), %rdi
leaq 0x14d9f4(%rip), %rsi    # 0x1dc7e5
callq 0x34320
movq %rax, -0x810(%rbp)
jmp 0x8edff
movq -0x810(%rbp), %rdi
leaq 0x158ce1(%rip), %rsi    # 0x1e7aee
callq 0x661c0
movq %rax, -0x818(%rbp)
jmp 0x8ee1b
movq -0x818(%rbp), %rdi
leaq 0x151983(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x820(%rbp)
jmp 0x8ee37
movq -0x820(%rbp), %rdi
movl -0x238(%rbp), %eax
addl %eax, %eax
movl %eax, -0x3f0(%rbp)
leaq -0x3f0(%rbp), %rsi
callq 0x343a0
movq %rax, -0x828(%rbp)
jmp 0x8ee61
movq -0x828(%rbp), %rdi
leaq 0x16760c(%rip), %rsi    # 0x1f647b
callq 0x34320
jmp 0x8ee76
leaq -0x3c8(%rbp), %rdi
callq 0x10ff0
jmp 0x8ee84
leaq -0x3e8(%rbp), %rdi
callq 0x3100
leaq -0x3e9(%rbp), %rdi
callq 0x3290
movl -0x238(%rbp), %esi
leaq -0x220(%rbp), %rdi
callq 0x342e0
movq %rax, -0x830(%rbp)
jmp 0x8eeb7
movq -0x830(%rbp), %rax
movl (%rax), %eax
movl -0x238(%rbp), %ecx
addl %ecx, %ecx
subl %ecx, %eax
sete %al
movb %al, -0x839(%rbp)
leaq -0x5a1(%rbp), %rdi
movq %rdi, -0x838(%rbp)
callq 0x33b0
movq -0x838(%rbp), %rdx
leaq 0x158c09(%rip), %rsi    # 0x1e7afd
leaq -0x5a0(%rbp), %rdi
callq 0x10a90
jmp 0x8ef02
movb -0x839(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x580(%rbp), %rdi
leaq -0x5a0(%rbp), %rdx
callq 0x10f80
jmp 0x8ef23
leaq 0x14d8bb(%rip), %rsi    # 0x1dc7e5
leaq -0x580(%rbp), %rdi
callq 0x34320
movq %rax, -0x848(%rbp)
jmp 0x8ef3f
movq -0x848(%rbp), %rdi
leaq 0x158bc7(%rip), %rsi    # 0x1e7b14
callq 0x347a0
movq %rax, -0x850(%rbp)
jmp 0x8ef5b
movq -0x850(%rbp), %rdi
leaq 0x151843(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x858(%rbp)
jmp 0x8ef77
movl -0x238(%rbp), %esi
leaq -0x220(%rbp), %rdi
callq 0x342e0
movq %rax, -0x860(%rbp)
jmp 0x8ef92
movq -0x860(%rbp), %rsi
movq -0x858(%rbp), %rdi
callq 0x343a0
movq %rax, -0x868(%rbp)
jmp 0x8efae
movq -0x868(%rbp), %rdi
leaq 0x14d829(%rip), %rsi    # 0x1dc7e5
callq 0x34320
movq %rax, -0x870(%rbp)
jmp 0x8efca
movq -0x870(%rbp), %rdi
leaq 0x158b16(%rip), %rsi    # 0x1e7aee
callq 0x661c0
movq %rax, -0x878(%rbp)
jmp 0x8efe6
movq -0x878(%rbp), %rdi
leaq 0x1517b8(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x880(%rbp)
jmp 0x8f002
movq -0x880(%rbp), %rdi
movl -0x238(%rbp), %eax
addl %eax, %eax
movl %eax, -0x5a8(%rbp)
leaq -0x5a8(%rbp), %rsi
callq 0x343a0
movq %rax, -0x888(%rbp)
jmp 0x8f02c
movq -0x888(%rbp), %rdi
leaq 0x167441(%rip), %rsi    # 0x1f647b
callq 0x34320
jmp 0x8f041
leaq -0x580(%rbp), %rdi
callq 0x10ff0
jmp 0x8f04f
leaq -0x5a0(%rbp), %rdi
callq 0x3100
leaq -0x5a1(%rbp), %rdi
callq 0x3290
movl -0x238(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x238(%rbp)
jmp 0x8ecc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x221(%rbp), %rdi
callq 0x10e50
jmp 0x8f4b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x8f4a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x8f10b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x8f0ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x10ff0
jmp 0x8f0fd
jmp 0x8f0ff
leaq -0x3e8(%rbp), %rdi
callq 0x3100
leaq -0x3e9(%rbp), %rdi
callq 0x3290
jmp 0x8f4a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x8f172
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x8f166
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x10ff0
jmp 0x8f164
jmp 0x8f166
leaq -0x5a0(%rbp), %rdi
callq 0x3100
leaq -0x5a1(%rbp), %rdi
callq 0x3290
jmp 0x8f4a4
leaq -0x17c(%rbp), %rax
movq %rax, -0x890(%rbp)
leaq -0x5b9(%rbp), %rdi
callq 0x1d390
jmp 0x8f19f
movq -0x890(%rbp), %rsi
leaq -0x5b8(%rbp), %rdi
leaq -0x5b9(%rbp), %rdx
callq 0x96e00
jmp 0x8f1bb
leaq -0x5e9(%rbp), %rdi
movq %rdi, -0x898(%rbp)
callq 0x10e30
movq -0x898(%rbp), %rdx
leaq -0x5e8(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0x96e40
jmp 0x8f1ea
leaq -0x5e9(%rbp), %rdi
callq 0x10e50
leaq -0x5b8(%rbp), %rdi
callq 0x96ea0
movq %rax, -0x8a0(%rbp)
jmp 0x8f20b
movq -0x8a0(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x8ac(%rbp)
leaq -0x5e8(%rbp), %rdi
callq 0x11650
movq %rax, -0x8a8(%rbp)
jmp 0x8f22f
movl -0x8ac(%rbp), %eax
movq -0x8a8(%rbp), %rcx
movl (%rcx), %ecx
subl %ecx, %eax
sete %al
movb %al, -0x8b9(%rbp)
leaq -0x7a1(%rbp), %rdi
movq %rdi, -0x8b8(%rbp)
callq 0x33b0
movq -0x8b8(%rbp), %rdx
leaq 0x1588b8(%rip), %rsi    # 0x1e7b22
leaq -0x7a0(%rbp), %rdi
callq 0x10a90
jmp 0x8f278
movb -0x8b9(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x780(%rbp), %rdi
leaq -0x7a0(%rbp), %rdx
callq 0x10f80
jmp 0x8f299
leaq 0x14d545(%rip), %rsi    # 0x1dc7e5
leaq -0x780(%rbp), %rdi
callq 0x34320
movq %rax, -0x8c8(%rbp)
jmp 0x8f2b5
movq -0x8c8(%rbp), %rdi
leaq 0x14f354(%rip), %rsi    # 0x1de617
callq 0x36600
movq %rax, -0x8d0(%rbp)
jmp 0x8f2d1
movq -0x8d0(%rbp), %rdi
leaq 0x1514cd(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x8d8(%rbp)
jmp 0x8f2ed
leaq -0x5b8(%rbp), %rdi
callq 0x96ea0
movq %rax, -0x8e0(%rbp)
jmp 0x8f302
movq -0x8e0(%rbp), %rsi
movq -0x8d8(%rbp), %rdi
callq 0x343a0
movq %rax, -0x8e8(%rbp)
jmp 0x8f31e
movq -0x8e8(%rbp), %rdi
leaq 0x14d4b9(%rip), %rsi    # 0x1dc7e5
callq 0x34320
movq %rax, -0x8f0(%rbp)
jmp 0x8f33a
movq -0x8f0(%rbp), %rdi
leaq 0x1587e6(%rip), %rsi    # 0x1e7b2e
callq 0x347a0
movq %rax, -0x8f8(%rbp)
jmp 0x8f356
movq -0x8f8(%rbp), %rdi
leaq 0x151448(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x900(%rbp)
jmp 0x8f372
leaq -0x5e8(%rbp), %rdi
callq 0x11650
movq %rax, -0x908(%rbp)
jmp 0x8f387
movq -0x908(%rbp), %rsi
movq -0x900(%rbp), %rdi
callq 0x343a0
movq %rax, -0x910(%rbp)
jmp 0x8f3a3
movq -0x910(%rbp), %rdi
leaq 0x1670ca(%rip), %rsi    # 0x1f647b
callq 0x34320
jmp 0x8f3b8
leaq -0x780(%rbp), %rdi
callq 0x10ff0
jmp 0x8f3c6
leaq -0x7a0(%rbp), %rdi
callq 0x3100
leaq -0x7a1(%rbp), %rdi
callq 0x3290
leaq -0x5e8(%rbp), %rdi
callq 0x11610
leaq -0x220(%rbp), %rdi
callq 0x34990
addq $0x910, %rsp            # imm = 0x910
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x5e9(%rbp), %rdi
callq 0x10e50
jmp 0x8f4a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x8f498
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x8f48c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x8f480
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x780(%rbp), %rdi
callq 0x10ff0
jmp 0x8f47e
jmp 0x8f480
leaq -0x7a0(%rbp), %rdi
callq 0x3100
leaq -0x7a1(%rbp), %rdi
callq 0x3290
leaq -0x5e8(%rbp), %rdi
callq 0x11610
leaq -0x220(%rbp), %rdi
callq 0x34990
movq -0x230(%rbp), %rdi
callq 0x33a0
movq %rax, %rdi
callq 0x116d0
nopw %cs:(%rax,%rax)