// File: /workspace/github_cpp_makefile_star2_O1/tewalds[P]morat/pentago/moveiterator.cpp
// Function: Morat::Pentago::RandomMoveIteratorTest()
void RandomMoveIteratorTest() {
	XORShift_uint32 rand32;
	XORShift_uint64 rand64;

	Board board;
	int i;

	i = 0;
	for (RandomMoveIterator<XORShift_uint32> move(board, rand32, 0); !move.done(); ++move)
		i++;
	assert(i == 288);

	i = 0;
	for (RandomMoveIterator<XORShift_uint64> move(board, rand64, 0); !move.done(); ++move)
		i++;
	assert(i == 288);

	i = 0;
	for (RandomMoveIterator<XORShift_uint32> move(board, rand32, 36); !move.done(); ++move)
		i++;
	assert(i == 6);

	i = 0;
	for (RandomMoveIterator<XORShift_uint32> move(board, rand32); !move.done(); ++move)
		i++;
	assert(i == 6);

	std::set<std::string> moves;
	for(MoveIterator move(board, 0); !move.done(); ++move)
		moves.insert(move->to_s());

	assert(moves.size() == 288);

	for (RandomMoveIterator<XORShift_uint32> move(board, rand32, 0); !move.done(); ++move)
		moves.insert(move->to_s());

	assert(moves.size() == 288);

	for (RandomMoveIterator<XORShift_uint32> move(board, rand32, 0); !move.done(); ++move)
		moves.erase(move->to_s());

	assert(moves.size() == 0);


	std::set<std::string> boards;
	for(MoveIterator move(board, 0); !move.done(); ++move)
		boards.insert(move.board().to_s());

	unsigned int size = boards.size();

	for (RandomMoveIterator<XORShift_uint32> move(board, rand32, 0); !move.done(); ++move)
		boards.insert(move.board().to_s());

	assert(boards.size() == size);

	for (RandomMoveIterator<XORShift_uint32> move(board, rand32, 0); !move.done(); ++move)
		boards.erase(move.board().to_s());

	assert(boards.size() == 0);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x118, %rsp            # imm = 0x118
leaq 0xc(%rsp), %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x16ad6
leaq 0xe0(%rsp), %rdi
xorl %esi, %esi
callq 0x16a4e
vxorps %xmm0, %xmm0, %xmm0
leaq 0xb0(%rsp), %rsi
vmovaps %xmm0, (%rsi)
vmovups %xmm0, 0x9(%rsi)
leaq 0xa21b(%rip), %rax      # 0x31da2
movb (%rax), %al
movb %al, 0x19(%rsi)
leaq 0xa212(%rip), %rax      # 0x31da5
movb (%rax), %al
movb %al, 0x1a(%rsi)
movw $0xdead, 0x1c(%rsi)     # imm = 0xDEAD
movq $0x0, 0x20(%rsi)
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rdx
xorl %ecx, %ecx
callq 0xdedc
movl $0x120, %ebp            # imm = 0x120
cmpl $0x0, 0x50(%rsp)
js 0x27bd0
decl %ebp
movq %rbx, %rdi
callq 0xe00e
jmp 0x27bbd
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x27bdf
callq 0x5490
testl %ebp, %ebp
jne 0x28083
leaq 0x10(%rsp), %rbx
leaq 0xb0(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x282d6
movl $0x120, %ebp            # imm = 0x120
cmpl $0x0, 0x50(%rsp)
js 0x27c1e
decl %ebp
movq %rbx, %rdi
callq 0x28408
jmp 0x27c0b
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x27c2d
callq 0x5490
testl %ebp, %ebp
jne 0x280a2
leaq 0x10(%rsp), %rbx
leaq 0xb0(%rsp), %rsi
leaq 0xc(%rsp), %rdx
movq %rbx, %rdi
movl $0x24, %ecx
callq 0xdedc
movl $0x6, %ebp
cmpl $0x0, 0x50(%rsp)
js 0x27c6c
decl %ebp
movq %rbx, %rdi
callq 0xe00e
jmp 0x27c59
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x27c7b
callq 0x5490
testl %ebp, %ebp
jne 0x280c1
leaq 0x10(%rsp), %rbx
leaq 0xb0(%rsp), %rsi
leaq 0xc(%rsp), %rdx
movq %rbx, %rdi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0xdedc
movl $0x6, %ebp
cmpl $0x0, 0x50(%rsp)
js 0x27cba
decl %ebp
movq %rbx, %rdi
callq 0xe00e
jmp 0x27ca7
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x27cc9
callq 0x5490
testl %ebp, %ebp
jne 0x280e0
leaq 0xf0(%rsp), %rax
movl $0x0, (%rax)
xorl %ecx, %ecx
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x10(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
xorl %edx, %edx
callq 0xe0ba
leaq 0x40(%rsp), %rbx
leaq 0x70(%rsp), %r13
leaq 0x60(%rsp), %r14
leaq 0xe8(%rsp), %r15
leaq 0x10(%rsp), %r12
cmpb $0x24, 0x40(%rsp)
jge 0x27d57
movq %r14, %rdi
movq %rbx, %rsi
callq 0xd416
movq %r15, %rdi
movq %r14, %rsi
callq 0x28536
movq 0x60(%rsp), %rdi
cmpq %r13, %rdi
je 0x27d4d
callq 0x5310
movq %r12, %rdi
callq 0xe1b8
jmp 0x27d21
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x27d66
callq 0x5490
cmpq $0x120, 0x110(%rsp) # imm = 0x120
jne 0x280ff
leaq 0x10(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0xc(%rsp), %rdx
xorl %ecx, %ecx
callq 0xdedc
leaq 0x60(%rsp), %rbx
leaq 0xe8(%rsp), %r14
leaq 0x10(%rsp), %r15
movslq 0x50(%rsp), %rsi
testq %rsi, %rsi
js 0x27de1
addq %rsi, %rsi
addq 0x48(%rsp), %rsi
movq %rbx, %rdi
callq 0xd416
movq %r14, %rdi
movq %rbx, %rsi
callq 0x28536
movq 0x60(%rsp), %rdi
cmpq %r13, %rdi
je 0x27dd7
callq 0x5310
movq %r15, %rdi
callq 0xe00e
jmp 0x27da3
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x27df0
callq 0x5490
cmpq $0x120, 0x110(%rsp) # imm = 0x120
jne 0x2811e
leaq 0x10(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0xc(%rsp), %rdx
xorl %ecx, %ecx
callq 0xdedc
leaq 0x60(%rsp), %rbx
leaq 0xe8(%rsp), %r14
leaq 0x10(%rsp), %r15
movslq 0x50(%rsp), %rsi
testq %rsi, %rsi
js 0x27e76
addq %rsi, %rsi
addq 0x48(%rsp), %rsi
movq %rbx, %rdi
callq 0xd416
movq %r14, %rdi
movq %rbx, %rsi
callq 0x286ca
movq %r14, %rdi
movq %rax, %rsi
callq 0x28772
movq 0x60(%rsp), %rdi
cmpq %r13, %rdi
je 0x27e6c
callq 0x5310
movq %r15, %rdi
callq 0xe00e
jmp 0x27e2d
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x27e85
callq 0x5490
cmpq $0x0, 0x110(%rsp)
jne 0x2813d
leaq 0x68(%rsp), %rax
movl $0x0, (%rax)
xorl %ecx, %ecx
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x10(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
xorl %edx, %edx
callq 0xe0ba
leaq 0x18(%rsp), %rbx
leaq 0xa0(%rsp), %r13
leaq 0x90(%rsp), %r14
leaq 0x60(%rsp), %r15
leaq 0x10(%rsp), %r12
cmpb $0x24, 0x40(%rsp)
jge 0x27f22
movq %r14, %rdi
movq %rbx, %rsi
movl $0x1, %edx
callq 0x1d55e
movq %r15, %rdi
movq %r14, %rsi
callq 0x28536
movq 0x90(%rsp), %rdi
cmpq %r13, %rdi
je 0x27f18
callq 0x5310
movq %r12, %rdi
callq 0xe1b8
jmp 0x27ee4
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x27f31
callq 0x5490
movl 0x88(%rsp), %ebp
leaq 0x10(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0xc(%rsp), %rdx
xorl %ecx, %ecx
callq 0xdedc
leaq 0x18(%rsp), %rbx
leaq 0x90(%rsp), %r14
leaq 0x60(%rsp), %r15
leaq 0x10(%rsp), %r12
cmpl $0x0, 0x50(%rsp)
js 0x27fa6
movq %r14, %rdi
movq %rbx, %rsi
movl $0x1, %edx
callq 0x1d55e
movq %r15, %rdi
movq %r14, %rsi
callq 0x28536
movq 0x90(%rsp), %rdi
cmpq %r13, %rdi
je 0x27f9c
callq 0x5310
movq %r12, %rdi
callq 0xe00e
jmp 0x27f68
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x27fb5
callq 0x5490
cmpq %rbp, 0x88(%rsp)
jne 0x2815c
leaq 0x10(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0xc(%rsp), %rdx
xorl %ecx, %ecx
callq 0xdedc
leaq 0x18(%rsp), %rbx
leaq 0x90(%rsp), %r14
leaq 0x60(%rsp), %r15
leaq 0x10(%rsp), %r12
cmpl $0x0, 0x50(%rsp)
js 0x2803c
movq %r14, %rdi
movq %rbx, %rsi
movl $0x1, %edx
callq 0x1d55e
movq %r15, %rdi
movq %r14, %rsi
callq 0x286ca
movq %r15, %rdi
movq %rax, %rsi
callq 0x28772
movq 0x90(%rsp), %rdi
cmpq %r13, %rdi
je 0x28032
callq 0x5310
movq %r12, %rdi
callq 0xe00e
jmp 0x27ff3
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x2804b
callq 0x5490
cmpq $0x0, 0x88(%rsp)
jne 0x2817b
leaq 0x60(%rsp), %rdi
callq 0x28476
leaq 0xe8(%rsp), %rdi
callq 0x28476
addq $0x118, %rsp            # imm = 0x118
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9834(%rip), %rdi      # 0x318be
leaq 0x9836(%rip), %rsi      # 0x318c7
leaq 0x9880(%rip), %rcx      # 0x31918
movl $0x2e, %edx
callq 0x5200
leaq 0x9815(%rip), %rdi      # 0x318be
leaq 0x9817(%rip), %rsi      # 0x318c7
leaq 0x9861(%rip), %rcx      # 0x31918
movl $0x33, %edx
callq 0x5200
leaq 0x9849(%rip), %rdi      # 0x31911
leaq 0x97f8(%rip), %rsi      # 0x318c7
leaq 0x9842(%rip), %rcx      # 0x31918
movl $0x38, %edx
callq 0x5200
leaq 0x982a(%rip), %rdi      # 0x31911
leaq 0x97d9(%rip), %rsi      # 0x318c7
leaq 0x9823(%rip), %rcx      # 0x31918
movl $0x3d, %edx
callq 0x5200
leaq 0x9840(%rip), %rdi      # 0x31946
leaq 0x97ba(%rip), %rsi      # 0x318c7
leaq 0x9804(%rip), %rcx      # 0x31918
movl $0x43, %edx
callq 0x5200
leaq 0x9821(%rip), %rdi      # 0x31946
leaq 0x979b(%rip), %rsi      # 0x318c7
leaq 0x97e5(%rip), %rcx      # 0x31918
movl $0x48, %edx
callq 0x5200
leaq 0x9816(%rip), %rdi      # 0x3195a
leaq 0x977c(%rip), %rsi      # 0x318c7
leaq 0x97c6(%rip), %rcx      # 0x31918
movl $0x4d, %edx
callq 0x5200
leaq 0x9809(%rip), %rdi      # 0x3196c
leaq 0x975d(%rip), %rsi      # 0x318c7
leaq 0x97a7(%rip), %rcx      # 0x31918
movl $0x59, %edx
callq 0x5200
leaq 0x9800(%rip), %rdi      # 0x31982
leaq 0x973e(%rip), %rsi      # 0x318c7
leaq 0x9788(%rip), %rcx      # 0x31918
movl $0x5e, %edx
callq 0x5200
jmp 0x2819e
jmp 0x2819e
movq %rax, %rbx
jmp 0x2828b
jmp 0x281aa
jmp 0x281aa
movq %rax, %rbx
jmp 0x282c1
jmp 0x281bd
jmp 0x281bd
jmp 0x281bd
jmp 0x2825e
movq %rax, %rbx
jmp 0x28273
jmp 0x281de
movq %rax, %rbx
movq 0x90(%rsp), %rdi
cmpq %r13, %rdi
je 0x281e1
callq 0x5310
jmp 0x281e1
movq %rax, %rbx
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x281f0
callq 0x5490
movq $0x0, 0x58(%rsp)
jmp 0x2828b
jmp 0x28209
jmp 0x28209
jmp 0x28209
jmp 0x28297
movq %rax, %rbx
jmp 0x282a9
jmp 0x28227
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r13, %rdi
je 0x2822a
callq 0x5310
jmp 0x2822a
movq %rax, %rbx
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x28239
callq 0x5490
movq $0x0, 0x58(%rsp)
jmp 0x282c1
jmp 0x2824a
jmp 0x2824a
jmp 0x2824a
movq %rax, %rbx
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x282ce
callq 0x5490
jmp 0x282ce
movq %rax, %rbx
movq 0x90(%rsp), %rdi
cmpq %r13, %rdi
je 0x28273
callq 0x5310
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x28282
callq 0x5490
movq $0x0, 0x48(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x28476
jmp 0x282c1
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r13, %rdi
je 0x282a9
callq 0x5310
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x282b8
callq 0x5490
movq $0x0, 0x48(%rsp)
leaq 0xe8(%rsp), %rdi
callq 0x28476
movq %rbx, %rdi
callq 0x56c0