// File: planaria[P]cb_tree/tests/floating_test.cpp
// Function: void test_floating<float>()
void test_floating()
{
	std::mt19937 generator;
	std::uniform_real_distribution<T> random_real(
		-std::numeric_limits<T>::max() / 2,
		std::numeric_limits<T>::max() / 2);

	cb_tree::cb_set<T> cb_set;
	std::set<T> set;

	for (std::size_t i = 0; i < 10000; ++i)
	{
		T value = random_real(generator);
		cb_set.insert(value);
		set.insert(value);
	}

	REQUIRE(cb_set.size() == set.size());
	CHECK(std::equal(cb_set.begin(), cb_set.end(), set.begin()));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1a80, %rsp           # imm = 0x1A80
leaq -0x1388(%rbp), %rdi
callq 0x26690
callq 0x266b0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss 0x8a7e3(%rip), %xmm1    # 0xb02d4
divss %xmm1, %xmm0
movss %xmm0, -0x1a0c(%rbp)
callq 0x266b0
movaps %xmm0, %xmm1
movss -0x1a0c(%rbp), %xmm0
movss 0x8a7bf(%rip), %xmm2    # 0xb02d4
divss %xmm2, %xmm1
leaq -0x1390(%rbp), %rdi
callq 0x266c0
leaq -0x13b0(%rbp), %rdi
callq 0x266f0
leaq -0x13e0(%rbp), %rdi
callq 0x26710
movq $0x0, -0x13e8(%rbp)
cmpq $0x2710, -0x13e8(%rbp) # imm = 0x2710
jae 0x25c2c
leaq -0x1390(%rbp), %rdi
leaq -0x1388(%rbp), %rsi
callq 0x26730
movss %xmm0, -0x1a10(%rbp)
jmp 0x25b76
movss -0x1a10(%rbp), %xmm0
movss %xmm0, -0x13ec(%rbp)
leaq -0x13b0(%rbp), %rdi
leaq -0x13ec(%rbp), %rsi
callq 0x26760
movb %dl, -0x1a19(%rbp)
movq %rax, -0x1a18(%rbp)
jmp 0x25ba8
movb -0x1a19(%rbp), %al
movq -0x1a18(%rbp), %rcx
movq %rcx, -0x1410(%rbp)
movb %al, -0x1408(%rbp)
leaq -0x13e0(%rbp), %rdi
leaq -0x13ec(%rbp), %rsi
callq 0x267a0
movb %dl, -0x1a29(%rbp)
movq %rax, -0x1a28(%rbp)
jmp 0x25be4
movb -0x1a29(%rbp), %al
movq -0x1a28(%rbp), %rcx
movq %rcx, -0x1420(%rbp)
movb %al, -0x1418(%rbp)
movq -0x13e8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x13e8(%rbp)
jmp 0x25b48
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
jmp 0x26083
jmp 0x25c2e
leaq 0x8a6fb(%rip), %rsi     # 0xb0330
leaq -0x16e8(%rbp), %rdi
movl $0x17, %edx
callq 0x60570
jmp 0x25c48
leaq 0x86d36(%rip), %rsi     # 0xac985
leaq 0x8a6fb(%rip), %rcx     # 0xb0351
leaq 0x988d3(%rip), %r9      # 0xbe530
leaq -0x16c0(%rbp), %rdi
leaq -0x16e8(%rbp), %rdx
movl $0x1, %r8d
callq 0x61e00
jmp 0x25c78
leaq -0x16e8(%rbp), %rdi
callq 0xe590
leaq -0x13b0(%rbp), %rdi
callq 0x267f0
movq %rax, -0x1a38(%rbp)
jmp 0x25c99
movq -0x1a38(%rbp), %rax
movq %rax, -0x1700(%rbp)
leaq -0x16c0(%rbp), %rdi
leaq -0x1700(%rbp), %rsi
callq 0x12950
movq %rdx, -0x1a48(%rbp)
movq %rax, -0x1a40(%rbp)
jmp 0x25cca
movq -0x1a48(%rbp), %rax
movq -0x1a40(%rbp), %rcx
movq %rcx, -0x16f8(%rbp)
movq %rax, -0x16f0(%rbp)
leaq -0x13e0(%rbp), %rdi
callq 0x26840
movq %rax, -0x1708(%rbp)
leaq -0x16f8(%rbp), %rdi
leaq -0x1708(%rbp), %rsi
callq 0x26810
movq %rax, -0x1a50(%rbp)
jmp 0x25d15
movq -0x1a50(%rbp), %rdi
callq 0x621c0
jmp 0x25d23
jmp 0x25d82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
leaq -0x16e8(%rbp), %rdi
callq 0xe590
jmp 0x26083
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
movq -0x13f8(%rbp), %rdi
callq 0xc200
leaq -0x16c0(%rbp), %rdi
movl $0x1, %esi
callq 0x62290
jmp 0x25d79
callq 0xc8f0
jmp 0x25d80
jmp 0x25d82
leaq -0x16c0(%rbp), %rdi
callq 0x626f0
movb %al, -0x1a51(%rbp)
jmp 0x25d96
movb -0x1a51(%rbp), %al
testb $0x1, %al
jne 0x25da2
jmp 0x25de0
callq 0xe7a0
jmp 0x25da9
jmp 0x25de0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
callq 0xc8f0
jmp 0x25ddb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
jmp 0x25f57
jmp 0x25f57
leaq -0x16c0(%rbp), %rdi
callq 0x626b0
jmp 0x25dee
leaq -0x16c0(%rbp), %rdi
callq 0xe7b0
xorl %edi, %edi
callq 0xe800
movb %al, -0x1a52(%rbp)
jmp 0x25e09
movb -0x1a52(%rbp), %al
testb $0x1, %al
jne 0x25c2e
jmp 0x25e19
jmp 0x25e1b
leaq 0x8a50e(%rip), %rsi     # 0xb0330
leaq -0x19d0(%rbp), %rdi
movl $0x18, %edx
callq 0x60570
jmp 0x25e35
leaq 0x85205(%rip), %rsi     # 0xab041
leaq 0x8a52a(%rip), %rcx     # 0xb036d
leaq 0x986e6(%rip), %r9      # 0xbe530
leaq -0x19a8(%rbp), %rdi
leaq -0x19d0(%rbp), %rdx
movl $0x2, %r8d
callq 0x61e00
jmp 0x25e65
leaq -0x19d0(%rbp), %rdi
callq 0xe590
leaq -0x13b0(%rbp), %rdi
callq 0x268b0
movq %rax, -0x1a60(%rbp)
jmp 0x25e86
movq -0x1a60(%rbp), %rax
movq %rax, -0x19e8(%rbp)
leaq -0x13b0(%rbp), %rdi
callq 0x268e0
movq %rax, -0x1a68(%rbp)
jmp 0x25ea9
movq -0x1a68(%rbp), %rax
movq %rax, -0x19f0(%rbp)
leaq -0x13e0(%rbp), %rdi
callq 0x26910
movq %rax, -0x19f8(%rbp)
movq -0x19e8(%rbp), %rdi
movq -0x19f0(%rbp), %rsi
movq -0x19f8(%rbp), %rdx
callq 0x26860
movb %al, -0x1a69(%rbp)
jmp 0x25eec
movb -0x1a69(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x19a8(%rbp), %rdi
callq 0x12870
movb %dl, -0x1a79(%rbp)
movq %rax, -0x1a78(%rbp)
jmp 0x25f13
movb -0x1a79(%rbp), %al
movq -0x1a78(%rbp), %rcx
movq %rcx, -0x1a08(%rbp)
movb %al, -0x1a00(%rbp)
movb -0x1a00(%rbp), %al
movb %al, -0x19d8(%rbp)
movq -0x1a08(%rbp), %rax
movq %rax, -0x19e0(%rbp)
leaq -0x19e0(%rbp), %rdi
callq 0x128b0
jmp 0x25f55
jmp 0x25fc5
leaq -0x16c0(%rbp), %rdi
callq 0xe7b0
jmp 0x26083
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
leaq -0x19d0(%rbp), %rdi
callq 0xe590
jmp 0x26083
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
movq -0x13f8(%rbp), %rdi
callq 0xc200
leaq -0x19a8(%rbp), %rdi
movl $0x1, %esi
callq 0x62290
jmp 0x25fbc
callq 0xc8f0
jmp 0x25fc3
jmp 0x25fc5
leaq -0x19a8(%rbp), %rdi
callq 0x626f0
movb %al, -0x1a7a(%rbp)
jmp 0x25fd9
movb -0x1a7a(%rbp), %al
testb $0x1, %al
jne 0x25fe5
jmp 0x2601d
callq 0xe7a0
jmp 0x25fec
jmp 0x2601d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
callq 0xc8f0
jmp 0x2601b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x13f8(%rbp)
movl %eax, -0x13fc(%rbp)
jmp 0x26077
jmp 0x26077
leaq -0x19a8(%rbp), %rdi
callq 0x626b0
jmp 0x2602b
leaq -0x19a8(%rbp), %rdi
callq 0xe7b0
xorl %edi, %edi
callq 0xe800
movb %al, -0x1a7b(%rbp)
jmp 0x26046
movb -0x1a7b(%rbp), %al
testb $0x1, %al
jne 0x25e1b
jmp 0x26056
leaq -0x13e0(%rbp), %rdi
callq 0x26940
leaq -0x13b0(%rbp), %rdi
callq 0x26960
addq $0x1a80, %rsp           # imm = 0x1A80
popq %rbp
retq
leaq -0x19a8(%rbp), %rdi
callq 0xe7b0
leaq -0x13e0(%rbp), %rdi
callq 0x26940
leaq -0x13b0(%rbp), %rdi
callq 0x26960
movq -0x13f8(%rbp), %rdi
callq 0xc9b0
movq %rax, %rdi
callq 0xe790
nop