Add the div module, which allows fast division by dynamic values.

This commit is contained in:
David Goldblatt
2017-12-19 17:30:50 -08:00
committed by David Goldblatt
parent 7f1b02e3fa
commit 21f7c13d0b
5 changed files with 129 additions and 1 deletions

29
test/unit/div.c Normal file
View File

@@ -0,0 +1,29 @@
#include "test/jemalloc_test.h"
#include "jemalloc/internal/div.h"
TEST_BEGIN(test_div_exhaustive) {
for (size_t divisor = 2; divisor < 1000 * 1000; ++divisor) {
div_info_t div_info;
div_init(&div_info, divisor);
size_t max = 1000 * divisor;
if (max < 1000 * 1000) {
max = 1000 * 1000;
}
for (size_t dividend = 0; dividend < 1000 * divisor;
dividend += divisor) {
size_t quotient = div_compute(
&div_info, dividend);
assert_zu_eq(dividend, quotient * divisor,
"With divisor = %zu, dividend = %zu, "
"got quotient %zu", divisor, dividend, quotient);
}
}
}
TEST_END
int
main(void) {
return test_no_reentrancy(
test_div_exhaustive);
}