// File: dsharlet[P]array/test/shape.cpp
// Function: nda::test_make_dense_shape_2d_body()
TEST(make_dense_shape_2d) {
  dense_shape<2> s(10, 5);
  s.resolve();
  auto x = s.x();
  auto y = s.y();
  assert_dim_eq(x, dense_dim<>(0, 10));
  assert_dim_eq(y, dim<>(0, 5, 10));

  ASSERT_EQ(s.width(), x.extent());
  ASSERT_EQ(s.height(), y.extent());
  ASSERT_EQ(s.rows(), x.extent());
  ASSERT_EQ(s.columns(), y.extent());
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa00, %rsp            # imm = 0xA00
leaq -0xb0(%rbp), %rdi
movq %rdi, -0x870(%rbp)
movl $0xa, %esi
movl $0x5, %edx
callq 0x343e0
movq -0x870(%rbp), %rdi
callq 0x3cca0
movq -0x870(%rbp), %rdi
callq 0x18a1d0
movq -0x870(%rbp), %rdi
movq 0x10(%rax), %rcx
movq %rcx, -0xc0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0xd0(%rbp)
callq 0x18a1f0
movq 0x10(%rax), %rcx
movq %rcx, -0xe0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0xf0(%rbp)
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x888(%rbp)
leaq -0x108(%rbp), %rdi
movq %rdi, -0x890(%rbp)
movl $0xa, %edx
movq %rdx, -0x880(%rbp)
movl $0x1, %ecx
callq 0x16d70
movq -0x890(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
movq %rdi, -0x868(%rbp)
callq 0x98380
movq -0x888(%rbp), %rsi
movq -0x880(%rbp), %rcx
leaq -0x120(%rbp), %rdi
movq %rdi, -0x878(%rbp)
movl $0x5, %edx
callq 0x10c60
movq -0x878(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x97810
movq -0x870(%rbp), %rdi
callq 0x40450
movq -0x868(%rbp), %rcx
movq %rcx, -0x48(%rbp)
movq -0x48(%rbp), %rcx
addq $0x8, %rcx
movq %rcx, -0x40(%rbp)
movq -0x40(%rbp), %rcx
movq (%rcx), %rcx
subq %rcx, %rax
sete %al
movb %al, -0x859(%rbp)
leaq -0x2d1(%rbp), %rdi
movq %rdi, -0x858(%rbp)
callq 0x33b0
movq -0x858(%rbp), %rdx
leaq 0x7ff5d(%rip), %rsi     # 0x1fb40c
leaq -0x2d0(%rbp), %rdi
callq 0x10a90
jmp 0x17b4bd
movb -0x859(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x2b0(%rbp), %rdi
leaq -0x2d0(%rbp), %rdx
callq 0x10f80
jmp 0x17b4de
leaq 0x61300(%rip), %rsi     # 0x1dc7e5
leaq -0x2b0(%rbp), %rdi
callq 0x34320
movq %rax, -0x898(%rbp)
jmp 0x17b4fa
movq -0x898(%rbp), %rdi
leaq 0x7ff1c(%rip), %rsi     # 0x1fb424
callq 0x344d0
movq %rax, -0x8a0(%rbp)
jmp 0x17b516
movq -0x8a0(%rbp), %rdi
leaq 0x65288(%rip), %rsi     # 0x1e07ac
callq 0x34320
movq %rax, -0x8a8(%rbp)
jmp 0x17b532
leaq -0xb0(%rbp), %rdi
callq 0x40450
movq %rax, -0x8b0(%rbp)
jmp 0x17b547
movq -0x8a8(%rbp), %rdi
movq -0x8b0(%rbp), %rax
movq %rax, -0x2f0(%rbp)
leaq -0x2f0(%rbp), %rsi
callq 0x34510
movq %rax, -0x8b8(%rbp)
jmp 0x17b571
movq -0x8b8(%rbp), %rdi
leaq 0x61266(%rip), %rsi     # 0x1dc7e5
callq 0x34320
movq %rax, -0x8c0(%rbp)
jmp 0x17b58d
movq -0x8c0(%rbp), %rdi
leaq 0x7fe7e(%rip), %rsi     # 0x1fb419
callq 0x34570
movq %rax, -0x8c8(%rbp)
jmp 0x17b5a9
movq -0x8c8(%rbp), %rdi
leaq 0x651f5(%rip), %rsi     # 0x1e07ac
callq 0x34320
movq %rax, -0x8d0(%rbp)
jmp 0x17b5c5
leaq -0xd0(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8d8(%rbp)
movq -0x8d0(%rbp), %rdi
movq -0x8d8(%rbp), %rax
movq %rax, -0x2f8(%rbp)
leaq -0x2f8(%rbp), %rsi
callq 0x34510
movq %rax, -0x8e0(%rbp)
jmp 0x17b614
movq -0x8e0(%rbp), %rdi
leaq 0x7ae59(%rip), %rsi     # 0x1f647b
callq 0x34320
jmp 0x17b629
leaq -0x2b0(%rbp), %rdi
callq 0x10ff0
jmp 0x17b637
leaq -0x2d0(%rbp), %rdi
callq 0x3100
leaq -0x2d1(%rbp), %rdi
callq 0x3290
leaq -0xb0(%rbp), %rdi
callq 0x40490
leaq -0xf0(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq -0x58(%rbp), %rcx
addq $0x8, %rcx
movq %rcx, -0x30(%rbp)
movq -0x30(%rbp), %rcx
movq (%rcx), %rcx
subq %rcx, %rax
sete %al
movb %al, -0x8e9(%rbp)
leaq -0x4a9(%rbp), %rdi
movq %rdi, -0x8e8(%rbp)
callq 0x33b0
movq -0x8e8(%rbp), %rdx
leaq 0x7fd88(%rip), %rsi     # 0x1fb42e
leaq -0x4a8(%rbp), %rdi
callq 0x10a90
jmp 0x17b6b4
movb -0x8e9(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x488(%rbp), %rdi
leaq -0x4a8(%rbp), %rdx
callq 0x10f80
jmp 0x17b6d5
leaq 0x61109(%rip), %rsi     # 0x1dc7e5
leaq -0x488(%rbp), %rdi
callq 0x34320
movq %rax, -0x8f8(%rbp)
jmp 0x17b6f1
movq -0x8f8(%rbp), %rdi
leaq 0x7fd48(%rip), %rsi     # 0x1fb447
callq 0x34570
movq %rax, -0x900(%rbp)
jmp 0x17b70d
movq -0x900(%rbp), %rdi
leaq 0x65091(%rip), %rsi     # 0x1e07ac
callq 0x34320
movq %rax, -0x908(%rbp)
jmp 0x17b729
leaq -0xb0(%rbp), %rdi
callq 0x40490
movq %rax, -0x910(%rbp)
jmp 0x17b73e
movq -0x908(%rbp), %rdi
movq -0x910(%rbp), %rax
movq %rax, -0x4b8(%rbp)
leaq -0x4b8(%rbp), %rsi
callq 0x34510
movq %rax, -0x918(%rbp)
jmp 0x17b768
movq -0x918(%rbp), %rdi
leaq 0x6106f(%rip), %rsi     # 0x1dc7e5
callq 0x34320
movq %rax, -0x920(%rbp)
jmp 0x17b784
movq -0x920(%rbp), %rdi
leaq 0x7fce6(%rip), %rsi     # 0x1fb478
callq 0x34570
movq %rax, -0x928(%rbp)
jmp 0x17b7a0
movq -0x928(%rbp), %rdi
leaq 0x64ffe(%rip), %rsi     # 0x1e07ac
callq 0x34320
movq %rax, -0x930(%rbp)
jmp 0x17b7bc
leaq -0xf0(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x938(%rbp)
movq -0x930(%rbp), %rdi
movq -0x938(%rbp), %rax
movq %rax, -0x4c0(%rbp)
leaq -0x4c0(%rbp), %rsi
callq 0x34510
movq %rax, -0x940(%rbp)
jmp 0x17b80b
movq -0x940(%rbp), %rdi
leaq 0x7ac62(%rip), %rsi     # 0x1f647b
callq 0x34320
jmp 0x17b820
leaq -0x488(%rbp), %rdi
callq 0x10ff0
jmp 0x17b82e
leaq -0x4a8(%rbp), %rdi
callq 0x3100
leaq -0x4a9(%rbp), %rdi
callq 0x3290
leaq -0xb0(%rbp), %rdi
callq 0x9f940
leaq -0xd0(%rbp), %rcx
movq %rcx, -0x68(%rbp)
movq -0x68(%rbp), %rcx
addq $0x8, %rcx
movq %rcx, -0x20(%rbp)
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
subq %rcx, %rax
sete %al
movb %al, -0x949(%rbp)
leaq -0x671(%rbp), %rdi
movq %rdi, -0x948(%rbp)
callq 0x33b0
movq -0x948(%rbp), %rdx
leaq 0x7fbb5(%rip), %rsi     # 0x1fb452
leaq -0x670(%rbp), %rdi
callq 0x10a90
jmp 0x17b8ab
movb -0x949(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x650(%rbp), %rdi
leaq -0x670(%rbp), %rdx
callq 0x10f80
jmp 0x17b8cc
leaq 0x60f12(%rip), %rsi     # 0x1dc7e5
leaq -0x650(%rbp), %rdi
callq 0x34320
movq %rax, -0x958(%rbp)
jmp 0x17b8e8
movq -0x958(%rbp), %rdi
leaq 0x6e19c(%rip), %rsi     # 0x1e9a92
callq 0x36600
movq %rax, -0x960(%rbp)
jmp 0x17b904
movq -0x960(%rbp), %rdi
leaq 0x64e9a(%rip), %rsi     # 0x1e07ac
callq 0x34320
movq %rax, -0x968(%rbp)
jmp 0x17b920
leaq -0xb0(%rbp), %rdi
callq 0x9f940
movq %rax, -0x970(%rbp)
jmp 0x17b935
movq -0x968(%rbp), %rdi
movq -0x970(%rbp), %rax
movq %rax, -0x680(%rbp)
leaq -0x680(%rbp), %rsi
callq 0x34510
movq %rax, -0x978(%rbp)
jmp 0x17b95f
movq -0x978(%rbp), %rdi
leaq 0x60e78(%rip), %rsi     # 0x1dc7e5
callq 0x34320
movq %rax, -0x980(%rbp)
jmp 0x17b97b
movq -0x980(%rbp), %rdi
leaq 0x7fa90(%rip), %rsi     # 0x1fb419
callq 0x34570
movq %rax, -0x988(%rbp)
jmp 0x17b997
movq -0x988(%rbp), %rdi
leaq 0x64e07(%rip), %rsi     # 0x1e07ac
callq 0x34320
movq %rax, -0x990(%rbp)
jmp 0x17b9b3
leaq -0xd0(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x998(%rbp)
movq -0x990(%rbp), %rdi
movq -0x998(%rbp), %rax
movq %rax, -0x688(%rbp)
leaq -0x688(%rbp), %rsi
callq 0x34510
movq %rax, -0x9a0(%rbp)
jmp 0x17ba02
movq -0x9a0(%rbp), %rdi
leaq 0x7aa6b(%rip), %rsi     # 0x1f647b
callq 0x34320
jmp 0x17ba17
leaq -0x650(%rbp), %rdi
callq 0x10ff0
jmp 0x17ba25
leaq -0x670(%rbp), %rdi
callq 0x3100
leaq -0x671(%rbp), %rdi
callq 0x3290
leaq -0xb0(%rbp), %rdi
callq 0x9f9a0
leaq -0xf0(%rbp), %rcx
movq %rcx, -0x78(%rbp)
movq -0x78(%rbp), %rcx
addq $0x8, %rcx
movq %rcx, -0x10(%rbp)
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
subq %rcx, %rax
sete %al
movb %al, -0x9a9(%rbp)
leaq -0x839(%rbp), %rdi
movq %rdi, -0x9a8(%rbp)
callq 0x33b0
movq -0x9a8(%rbp), %rdx
leaq 0x7f9d5(%rip), %rsi     # 0x1fb469
leaq -0x838(%rbp), %rdi
callq 0x10a90
jmp 0x17baa2
movb -0x9a9(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x818(%rbp), %rdi
leaq -0x838(%rbp), %rdx
callq 0x10f80
jmp 0x17bac3
leaq 0x60d1b(%rip), %rsi     # 0x1dc7e5
leaq -0x818(%rbp), %rdi
callq 0x34320
movq %rax, -0x9b8(%rbp)
jmp 0x17badf
movq -0x9b8(%rbp), %rdi
leaq 0x6dfcb(%rip), %rsi     # 0x1e9ab8
callq 0xc7360
movq %rax, -0x9c0(%rbp)
jmp 0x17bafb
movq -0x9c0(%rbp), %rdi
leaq 0x64ca3(%rip), %rsi     # 0x1e07ac
callq 0x34320
movq %rax, -0x9c8(%rbp)
jmp 0x17bb17
leaq -0xb0(%rbp), %rdi
callq 0x9f9a0
movq %rax, -0x9d0(%rbp)
jmp 0x17bb2c
movq -0x9c8(%rbp), %rdi
movq -0x9d0(%rbp), %rax
movq %rax, -0x848(%rbp)
leaq -0x848(%rbp), %rsi
callq 0x34510
movq %rax, -0x9d8(%rbp)
jmp 0x17bb56
movq -0x9d8(%rbp), %rdi
leaq 0x60c81(%rip), %rsi     # 0x1dc7e5
callq 0x34320
movq %rax, -0x9e0(%rbp)
jmp 0x17bb72
movq -0x9e0(%rbp), %rdi
leaq 0x7f8f8(%rip), %rsi     # 0x1fb478
callq 0x34570
movq %rax, -0x9e8(%rbp)
jmp 0x17bb8e
movq -0x9e8(%rbp), %rdi
leaq 0x64c10(%rip), %rsi     # 0x1e07ac
callq 0x34320
movq %rax, -0x9f0(%rbp)
jmp 0x17bbaa
leaq -0xf0(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x9f8(%rbp)
movq -0x9f0(%rbp), %rdi
movq -0x9f8(%rbp), %rax
movq %rax, -0x850(%rbp)
leaq -0x850(%rbp), %rsi
callq 0x34510
movq %rax, -0xa00(%rbp)
jmp 0x17bbf9
movq -0xa00(%rbp), %rdi
leaq 0x7a874(%rip), %rsi     # 0x1f647b
callq 0x34320
jmp 0x17bc0e
leaq -0x818(%rbp), %rdi
callq 0x10ff0
jmp 0x17bc1c
leaq -0x838(%rbp), %rdi
callq 0x3100
leaq -0x839(%rbp), %rdi
callq 0x3290
addq $0xa00, %rsp            # imm = 0xA00
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
jmp 0x17bc93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
jmp 0x17bc87
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x10ff0
jmp 0x17bc85
jmp 0x17bc87
leaq -0x2d0(%rbp), %rdi
callq 0x3100
leaq -0x2d1(%rbp), %rdi
callq 0x3290
jmp 0x17bdd1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
jmp 0x17bcfa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
jmp 0x17bcee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x10ff0
jmp 0x17bcec
jmp 0x17bcee
leaq -0x4a8(%rbp), %rdi
callq 0x3100
leaq -0x4a9(%rbp), %rdi
callq 0x3290
jmp 0x17bdd1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
jmp 0x17bd61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
jmp 0x17bd55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
leaq -0x650(%rbp), %rdi
callq 0x10ff0
jmp 0x17bd53
jmp 0x17bd55
leaq -0x670(%rbp), %rdi
callq 0x3100
leaq -0x671(%rbp), %rdi
callq 0x3290
jmp 0x17bdd1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
jmp 0x17bdc5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
jmp 0x17bdb9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e0(%rbp)
movl %eax, -0x2e4(%rbp)
leaq -0x818(%rbp), %rdi
callq 0x10ff0
jmp 0x17bdb7
jmp 0x17bdb9
leaq -0x838(%rbp), %rdi
callq 0x3100
leaq -0x839(%rbp), %rdi
callq 0x3290
movq -0x2e0(%rbp), %rdi
callq 0x33a0
movq %rax, %rdi
callq 0x116d0
nopw %cs:(%rax,%rax)