// File: chuckwolber[P]Cube/test/test_cube.cpp
// Function: getExpected(CubieColor, unsigned int)
std::vector<CubieColor> getExpected(CubieColor referenceColor,
                                    unsigned int cubeSize) {
   if (cubeSize < 2)
      cubeSize = 2;

   std::vector<CubieColor> colorList;
   std::vector<CubieColor> tmp;
   for (unsigned int i = 0; i < cubeSize*4*cubeSize*3; i++)
      tmp.push_back(CubieColor::NOCOLOR);

   switch (referenceColor) {
      case CubieColor::BLUE:
         colorList.push_back(CubieColor::WHITE);
         colorList.push_back(CubieColor::RED);
         colorList.push_back(CubieColor::BLUE);
         colorList.push_back(CubieColor::ORANGE);
         colorList.push_back(CubieColor::GREEN);
         colorList.push_back(CubieColor::YELLOW);
         break;
      case CubieColor::GREEN:
         colorList.push_back(CubieColor::WHITE);
         colorList.push_back(CubieColor::ORANGE);
         colorList.push_back(CubieColor::GREEN);
         colorList.push_back(CubieColor::RED);
         colorList.push_back(CubieColor::BLUE);
         colorList.push_back(CubieColor::YELLOW);
         break;
      case CubieColor::ORANGE:
         colorList.push_back(CubieColor::WHITE);
         colorList.push_back(CubieColor::BLUE);
         colorList.push_back(CubieColor::ORANGE);
         colorList.push_back(CubieColor::GREEN);
         colorList.push_back(CubieColor::RED);
         colorList.push_back(CubieColor::YELLOW);
         break;
      case CubieColor::RED:
         colorList.push_back(CubieColor::WHITE);
         colorList.push_back(CubieColor::GREEN);
         colorList.push_back(CubieColor::RED);
         colorList.push_back(CubieColor::BLUE);
         colorList.push_back(CubieColor::ORANGE);
         colorList.push_back(CubieColor::YELLOW);
         break;
      case CubieColor::WHITE:
         colorList.push_back(CubieColor::GREEN);
         colorList.push_back(CubieColor::RED);
         colorList.push_back(CubieColor::WHITE);
         colorList.push_back(CubieColor::ORANGE);
         colorList.push_back(CubieColor::YELLOW);
         colorList.push_back(CubieColor::BLUE);
         break;
      case CubieColor::YELLOW:
         colorList.push_back(CubieColor::GREEN);
         colorList.push_back(CubieColor::ORANGE);
         colorList.push_back(CubieColor::YELLOW);
         colorList.push_back(CubieColor::RED);
         colorList.push_back(CubieColor::WHITE);
         colorList.push_back(CubieColor::BLUE);
         break;
      default:
         break;
   }
   setColors(tmp, colorList, cubeSize);

   return tmp;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x90(%rbp)
movb %sil, %al
movq %rdi, %rcx
movq %rcx, -0x88(%rbp)
movq %rdi, -0x8(%rbp)
movb %al, -0x9(%rbp)
movl %edx, -0x10(%rbp)
cmpl $0x2, -0x10(%rbp)
jae 0xd446
movl $0x2, -0x10(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x9550
movq -0x90(%rbp), %rdi
movb $0x0, -0x29(%rbp)
callq 0x9550
movl $0x0, -0x30(%rbp)
movl -0x30(%rbp), %eax
movl -0x10(%rbp), %ecx
shll $0x2, %ecx
imull -0x10(%rbp), %ecx
imull $0x3, %ecx, %ecx
cmpl %ecx, %eax
jae 0xd4ae
movq -0x90(%rbp), %rdi
movb $0x20, -0x31(%rbp)
leaq -0x31(%rbp), %rsi
callq 0xf3c0
jmp 0xd490
jmp 0xd492
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0xd466
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xd819
movsbl -0x9(%rbp), %eax
addl $-0x62, %eax
movl %eax, %ecx
movq %rcx, -0x98(%rbp)
subl $0x17, %eax
ja 0xd7a2
movq -0x98(%rbp), %rax
leaq 0x2dcb(%rip), %rcx      # 0x102a0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x77, -0x45(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x45(%rbp), %rsi
callq 0xf3c0
jmp 0xd4f1
movb $0x72, -0x46(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x46(%rbp), %rsi
callq 0xf3c0
jmp 0xd504
movb $0x62, -0x47(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x47(%rbp), %rsi
callq 0xf3c0
jmp 0xd517
movb $0x6f, -0x48(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0xf3c0
jmp 0xd52a
movb $0x67, -0x49(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x49(%rbp), %rsi
callq 0xf3c0
jmp 0xd53d
movb $0x79, -0x4a(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x4a(%rbp), %rsi
callq 0xf3c0
jmp 0xd550
jmp 0xd7a4
movb $0x77, -0x4b(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x4b(%rbp), %rsi
callq 0xf3c0
jmp 0xd568
movb $0x6f, -0x4c(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x4c(%rbp), %rsi
callq 0xf3c0
jmp 0xd57b
movb $0x67, -0x4d(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x4d(%rbp), %rsi
callq 0xf3c0
jmp 0xd58e
movb $0x72, -0x4e(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x4e(%rbp), %rsi
callq 0xf3c0
jmp 0xd5a1
movb $0x62, -0x4f(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x4f(%rbp), %rsi
callq 0xf3c0
jmp 0xd5b4
movb $0x79, -0x50(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0xf3c0
jmp 0xd5c7
jmp 0xd7a4
movb $0x77, -0x51(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x51(%rbp), %rsi
callq 0xf3c0
jmp 0xd5df
movb $0x62, -0x52(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x52(%rbp), %rsi
callq 0xf3c0
jmp 0xd5f2
movb $0x6f, -0x53(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x53(%rbp), %rsi
callq 0xf3c0
jmp 0xd605
movb $0x67, -0x54(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x54(%rbp), %rsi
callq 0xf3c0
jmp 0xd618
movb $0x72, -0x55(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x55(%rbp), %rsi
callq 0xf3c0
jmp 0xd62b
movb $0x79, -0x56(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x56(%rbp), %rsi
callq 0xf3c0
jmp 0xd63e
jmp 0xd7a4
movb $0x77, -0x57(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x57(%rbp), %rsi
callq 0xf3c0
jmp 0xd656
movb $0x67, -0x58(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0xf3c0
jmp 0xd669
movb $0x72, -0x59(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x59(%rbp), %rsi
callq 0xf3c0
jmp 0xd67c
movb $0x62, -0x5a(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x5a(%rbp), %rsi
callq 0xf3c0
jmp 0xd68f
movb $0x6f, -0x5b(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x5b(%rbp), %rsi
callq 0xf3c0
jmp 0xd6a2
movb $0x79, -0x5c(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x5c(%rbp), %rsi
callq 0xf3c0
jmp 0xd6b5
jmp 0xd7a4
movb $0x67, -0x5d(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x5d(%rbp), %rsi
callq 0xf3c0
jmp 0xd6cd
movb $0x72, -0x5e(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x5e(%rbp), %rsi
callq 0xf3c0
jmp 0xd6e0
movb $0x77, -0x5f(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x5f(%rbp), %rsi
callq 0xf3c0
jmp 0xd6f3
movb $0x6f, -0x60(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xf3c0
jmp 0xd706
movb $0x79, -0x61(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x61(%rbp), %rsi
callq 0xf3c0
jmp 0xd719
movb $0x62, -0x62(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x62(%rbp), %rsi
callq 0xf3c0
jmp 0xd72c
jmp 0xd7a4
movb $0x67, -0x63(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x63(%rbp), %rsi
callq 0xf3c0
jmp 0xd741
movb $0x6f, -0x64(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x64(%rbp), %rsi
callq 0xf3c0
jmp 0xd754
movb $0x79, -0x65(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x65(%rbp), %rsi
callq 0xf3c0
jmp 0xd767
movb $0x72, -0x66(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x66(%rbp), %rsi
callq 0xf3c0
jmp 0xd77a
movb $0x77, -0x67(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x67(%rbp), %rsi
callq 0xf3c0
jmp 0xd78d
movb $0x62, -0x68(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0xf3c0
jmp 0xd7a0
jmp 0xd7a4
jmp 0xd7a4
leaq -0x80(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0xf430
jmp 0xd7b3
movq -0x90(%rbp), %rdi
movl -0x10(%rbp), %edx
leaq -0x80(%rbp), %rsi
callq 0xf0a0
jmp 0xd7c8
leaq -0x80(%rbp), %rdi
callq 0x95e0
movb $0x1, -0x29(%rbp)
testb $0x1, -0x29(%rbp)
jne 0xd800
jmp 0xd7f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x95e0
jmp 0xd819
movq -0x90(%rbp), %rdi
callq 0x95e0
leaq -0x28(%rbp), %rdi
callq 0x95e0
movq -0x88(%rbp), %rax
addq $0xa0, %rsp
popq %rbp
retq
movq -0x90(%rbp), %rdi
callq 0x95e0
leaq -0x28(%rbp), %rdi
callq 0x95e0
movq -0x40(%rbp), %rdi
callq 0x2250
nopw (%rax,%rax)