mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
internal: add macro to round value to the next closest power of 2
There are two special cases, if the input number is 0 or the number is larger then 2^31 (for 32bit unsigned int). For the special cases the return value is 0 because they cannot be rounded. Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
@@ -143,6 +143,44 @@ testParseVersionString(const void *data ATTRIBUTE_UNUSED)
|
||||
|
||||
|
||||
|
||||
struct testRoundData {
|
||||
unsigned int input;
|
||||
unsigned int output;
|
||||
};
|
||||
|
||||
static struct testRoundData roundData[] = {
|
||||
{ 0, 0 },
|
||||
{ 1, 1 },
|
||||
{ 1000, 1024 },
|
||||
{ 1024, 1024 },
|
||||
{ 1025, 2048 },
|
||||
{ UINT_MAX, 0 },
|
||||
};
|
||||
|
||||
static int
|
||||
testRoundValueToPowerOfTwo(const void *data ATTRIBUTE_UNUSED)
|
||||
{
|
||||
unsigned int result;
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < ARRAY_CARDINALITY(roundData); i++) {
|
||||
result = VIR_ROUND_UP_POWER_OF_TWO(roundData[i].input);
|
||||
if (roundData[i].output != result) {
|
||||
if (virTestGetDebug() > 0) {
|
||||
fprintf(stderr, "\nInput number [%u]\n", roundData[i].input);
|
||||
fprintf(stderr, "Expected number [%u]\n", roundData[i].output);
|
||||
fprintf(stderr, "Actual number [%u]\n", result);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static int
|
||||
mymain(void)
|
||||
@@ -162,6 +200,7 @@ mymain(void)
|
||||
DO_TEST(IndexToDiskName);
|
||||
DO_TEST(DiskNameToIndex);
|
||||
DO_TEST(ParseVersionString);
|
||||
DO_TEST(RoundValueToPowerOfTwo);
|
||||
|
||||
return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user