Add test for sizeclass calculations
This commit is contained in:
53
src/test/func/sizeclass/sizeclass.cc
Normal file
53
src/test/func/sizeclass/sizeclass.cc
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <snmalloc.h>
|
||||||
|
|
||||||
|
NOINLINE
|
||||||
|
uint8_t size_to_sizeclass(size_t size)
|
||||||
|
{
|
||||||
|
return snmalloc::size_to_sizeclass(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int, char**)
|
||||||
|
{
|
||||||
|
bool failed = false;
|
||||||
|
size_t size_low = 0;
|
||||||
|
|
||||||
|
std::cout << "0 has sizeclass: " << (size_t)snmalloc::size_to_sizeclass(0)
|
||||||
|
<< std::endl;
|
||||||
|
|
||||||
|
std::cout << "sizeclass |-> [size_low, size_high] " << std::endl;
|
||||||
|
|
||||||
|
for (uint8_t sz = 0; sz < snmalloc::NUM_SIZECLASSES; sz++)
|
||||||
|
{
|
||||||
|
// Separate printing for small and medium sizeclasses
|
||||||
|
if (sz == snmalloc::NUM_SMALL_CLASSES)
|
||||||
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
size_t size = snmalloc::sizeclass_to_size(sz);
|
||||||
|
std::cout << (size_t)sz << " |-> "
|
||||||
|
<< "[" << size_low + 1 << ", " << size << "]" << std::endl;
|
||||||
|
|
||||||
|
if (size < size_low)
|
||||||
|
{
|
||||||
|
std::cout << "Sizeclass " << (size_t)sz << " is " << size
|
||||||
|
<< " which is less than " << size_low << std::endl;
|
||||||
|
failed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = size_low + 1; i <= size; i++)
|
||||||
|
{
|
||||||
|
if (size_to_sizeclass(i) != sz)
|
||||||
|
{
|
||||||
|
std::cout << "Size " << i << " has sizeclass "
|
||||||
|
<< (size_t)size_to_sizeclass(i)
|
||||||
|
<< " but expected sizeclass " << (size_t)sz << std::endl;
|
||||||
|
failed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
size_low = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (failed)
|
||||||
|
abort();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user