diff options
Diffstat (limited to 'lib/test-string_helpers.c')
| -rw-r--r-- | lib/test-string_helpers.c | 36 | 
1 files changed, 36 insertions, 0 deletions
| diff --git a/lib/test-string_helpers.c b/lib/test-string_helpers.c index 8e376efd88a4..98866a770770 100644 --- a/lib/test-string_helpers.c +++ b/lib/test-string_helpers.c @@ -326,6 +326,39 @@ out:  	kfree(out_test);  } +#define string_get_size_maxbuf 16 +#define test_string_get_size_one(size, blk_size, units, exp_result)            \ +	do {                                                                   \ +		BUILD_BUG_ON(sizeof(exp_result) >= string_get_size_maxbuf);    \ +		__test_string_get_size((size), (blk_size), (units),            \ +				       (exp_result));                          \ +	} 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) +{ +	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)) +		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", +		size, blk_size, units); +	pr_warn("expected: '%s', got '%s'\n", exp_result, buf); +} + +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"); +} +  static int __init test_string_helpers_init(void)  {  	unsigned int i; @@ -344,6 +377,9 @@ static int __init test_string_helpers_init(void)  	for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++)  		test_string_escape("escape 1", escape1, i, TEST_STRING_2_DICT_1); +	/* Test string_get_size() */ +	test_string_get_size(); +  	return -EINVAL;  }  module_init(test_string_helpers_init); |