lib/test-string_helpers.c: fix and improve string_get_size() tests
Recently added commit564b026fbd
("string_helpers: fix precision loss for some inputs") fixed precision issues for string_get_size() and broke tests. Fix and improve them: test both STRING_UNITS_2 and STRING_UNITS_10 at a time, better failure reporting, test small an huge values. Fixes:564b026fbd
("string_helpers: fix precision loss for some inputs") Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: James Bottomley <James.Bottomley@HansenPartnership.com> Cc: James Bottomley <JBottomley@Odin.com> Cc: "James E.J. Bottomley" <jejb@parisc-linux.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e3ae19535c
commit
72676bb53f
1 changed files with 49 additions and 18 deletions
|
@ -327,36 +327,67 @@ static __init void test_string_escape(const char *name,
|
|||
}
|
||||
|
||||
#define string_get_size_maxbuf 16
|
||||
#define test_string_get_size_one(size, blk_size, units, exp_result) \
|
||||
#define test_string_get_size_one(size, blk_size, exp_result10, exp_result2) \
|
||||
do { \
|
||||
BUILD_BUG_ON(sizeof(exp_result) >= string_get_size_maxbuf); \
|
||||
__test_string_get_size((size), (blk_size), (units), \
|
||||
(exp_result)); \
|
||||
BUILD_BUG_ON(sizeof(exp_result10) >= string_get_size_maxbuf); \
|
||||
BUILD_BUG_ON(sizeof(exp_result2) >= string_get_size_maxbuf); \
|
||||
__test_string_get_size((size), (blk_size), (exp_result10), \
|
||||
(exp_result2)); \
|
||||
} while (0)
|
||||
|
||||
|
||||
static __init void __test_string_get_size(const u64 size, const u64 blk_size,
|
||||
const enum string_size_units units,
|
||||
const char *exp_result)
|
||||
static __init void test_string_get_size_check(const char *units,
|
||||
const char *exp,
|
||||
char *res,
|
||||
const u64 size,
|
||||
const u64 blk_size)
|
||||
{
|
||||
char buf[string_get_size_maxbuf];
|
||||
|
||||
string_get_size(size, blk_size, units, buf, sizeof(buf));
|
||||
if (!memcmp(buf, exp_result, strlen(exp_result) + 1))
|
||||
if (!memcmp(res, exp, strlen(exp) + 1))
|
||||
return;
|
||||
|
||||
buf[sizeof(buf) - 1] = '\0';
|
||||
pr_warn("Test 'test_string_get_size_one' failed!\n");
|
||||
pr_warn("string_get_size(size = %llu, blk_size = %llu, units = %d\n",
|
||||
res[string_get_size_maxbuf - 1] = '\0';
|
||||
|
||||
pr_warn("Test 'test_string_get_size' failed!\n");
|
||||
pr_warn("string_get_size(size = %llu, blk_size = %llu, units = %s)\n",
|
||||
size, blk_size, units);
|
||||
pr_warn("expected: '%s', got '%s'\n", exp_result, buf);
|
||||
pr_warn("expected: '%s', got '%s'\n", exp, res);
|
||||
}
|
||||
|
||||
static __init void __test_string_get_size(const u64 size, const u64 blk_size,
|
||||
const char *exp_result10,
|
||||
const char *exp_result2)
|
||||
{
|
||||
char buf10[string_get_size_maxbuf];
|
||||
char buf2[string_get_size_maxbuf];
|
||||
|
||||
string_get_size(size, blk_size, STRING_UNITS_10, buf10, sizeof(buf10));
|
||||
string_get_size(size, blk_size, STRING_UNITS_2, buf2, sizeof(buf2));
|
||||
|
||||
test_string_get_size_check("STRING_UNITS_10", exp_result10, buf10,
|
||||
size, blk_size);
|
||||
|
||||
test_string_get_size_check("STRING_UNITS_2", exp_result2, buf2,
|
||||
size, blk_size);
|
||||
}
|
||||
|
||||
static __init void test_string_get_size(void)
|
||||
{
|
||||
test_string_get_size_one(16384, 512, STRING_UNITS_2, "8.00 MiB");
|
||||
test_string_get_size_one(8192, 4096, STRING_UNITS_10, "32.7 MB");
|
||||
test_string_get_size_one(1, 512, STRING_UNITS_10, "512 B");
|
||||
/* small values */
|
||||
test_string_get_size_one(0, 512, "0 B", "0 B");
|
||||
test_string_get_size_one(1, 512, "512 B", "512 B");
|
||||
test_string_get_size_one(1100, 1, "1.10 kB", "1.07 KiB");
|
||||
|
||||
/* normal values */
|
||||
test_string_get_size_one(16384, 512, "8.39 MB", "8.00 MiB");
|
||||
test_string_get_size_one(500118192, 512, "256 GB", "238 GiB");
|
||||
test_string_get_size_one(8192, 4096, "33.6 MB", "32.0 MiB");
|
||||
|
||||
/* weird block sizes */
|
||||
test_string_get_size_one(3000, 1900, "5.70 MB", "5.44 MiB");
|
||||
|
||||
/* huge values */
|
||||
test_string_get_size_one(U64_MAX, 4096, "75.6 ZB", "64.0 ZiB");
|
||||
test_string_get_size_one(4096, U64_MAX, "75.6 ZB", "64.0 ZiB");
|
||||
}
|
||||
|
||||
static int __init test_string_helpers_init(void)
|
||||
|
|
Loading…
Reference in a new issue