mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
linux_kselftest-kunit-6.12-rc1
This kunit update for Linux 6.12-rc1 consists of: -- a new int_pow test suite -- documentation update to clarify filename best practices -- kernel-doc fix for EXPORT_SYMBOL_IF_KUNIT -- change to build compile_commands.json automatically instead of requiring a manual build. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEPZKym/RZuOCGeA/kCwJExA0NQxwFAmbo3WEACgkQCwJExA0N Qxz1WxAAj+772NHxsJ4JnPqr/74doKnzKc1jM2V4g/F9Y+BT0tSKs1Cu5CyN9VsT wvxVPWqYltyhumVm/H6SaUGb0yZ7CzJi/5FuT3p3QFUDidMSu1h9KnlLi79q3cDI VuFKE8K4DDP0GfyFMpbSPZOGfYQp24FybhxRxreY+7q6uRVAnPh33Q1/Bonv6K6q 5329a0z9wWySgisa93ABmQNpF4UJSYunR2bsdUzZqHgyrTXSyK66fcmVKwbBUaIT o16P1LBjDcIbfwswFb+xUmWD1IPGk7ulirEq8n69tErI6zKbkv1rojXHsoXuvOEN a4i+sNyR+a7NVI1h/T8F25pSbegkL0XQs7cmehATqpInmEZNDeGR8PkaGZNXXrFy kG/z7LlWh8zQUBrTsqOLU/iz4sRVrsPCuLIUzo8MiKpAskmj/7fqw5Cab9jmL5V3 6OLAfCQDrfcH7fM9V5U6Ury2dkcovFuw+ZhFcBuLnspB5z0Cj7Yqz6aDZdJ97qyR PfZuyBU2ouykhpJ4P/sRJC3Gq1t0b+PoDq3qNdCqz4ETld1jaiDz0e75ypquJWyB QdVMNJF6W7Nwnmpzp4GY9QZ6dtwOKGZyuvW5J0eleWKiD4gjHZaoupIzqT24fgYi vdscbcOxMMU3/b9F4qDlgsLSPCLVF4HIXTAK2UdiznLdaxYVHQ0= =rmqh -----END PGP SIGNATURE----- Merge tag 'linux_kselftest-kunit-6.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest Pull kunit updates from Shuah Khan: - a new int_pow test suite - documentation update to clarify filename best practices - kernel-doc fix for EXPORT_SYMBOL_IF_KUNIT - change to build compile_commands.json automatically instead of requiring a manual build * tag 'linux_kselftest-kunit-6.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest: lib/math: Add int_pow test suite kunit: tool: Build compile_commands.json kunit: Fix kernel-doc for EXPORT_SYMBOL_IF_KUNIT Documentation: KUnit: Update filename best practices
This commit is contained in:
commit
194fcd20eb
@ -188,15 +188,26 @@ For example, a Kconfig entry might look like:
|
|||||||
Test File and Module Names
|
Test File and Module Names
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
KUnit tests can often be compiled as a module. These modules should be named
|
KUnit tests are often compiled as a separate module. To avoid conflicting
|
||||||
after the test suite, followed by ``_test``. If this is likely to conflict with
|
with regular modules, KUnit modules should be named after the test suite,
|
||||||
non-KUnit tests, the suffix ``_kunit`` can also be used.
|
followed by ``_kunit`` (e.g. if "foobar" is the core module, then
|
||||||
|
"foobar_kunit" is the KUnit test module).
|
||||||
|
|
||||||
The easiest way of achieving this is to name the file containing the test suite
|
Test source files, whether compiled as a separate module or an
|
||||||
``<suite>_test.c`` (or, as above, ``<suite>_kunit.c``). This file should be
|
``#include`` in another source file, are best kept in a ``tests/``
|
||||||
placed next to the code under test.
|
subdirectory to not conflict with other source files (e.g. for
|
||||||
|
tab-completion).
|
||||||
|
|
||||||
|
Note that the ``_test`` suffix has also been used in some existing
|
||||||
|
tests. The ``_kunit`` suffix is preferred, as it makes the distinction
|
||||||
|
between KUnit and non-KUnit tests clearer.
|
||||||
|
|
||||||
|
So for the common case, name the file containing the test suite
|
||||||
|
``tests/<suite>_kunit.c``. The ``tests`` directory should be placed at
|
||||||
|
the same level as the code under test. For example, tests for
|
||||||
|
``lib/string.c`` live in ``lib/tests/string_kunit.c``.
|
||||||
|
|
||||||
If the suite name contains some or all of the name of the test's parent
|
If the suite name contains some or all of the name of the test's parent
|
||||||
directory, it may make sense to modify the source filename to reduce redundancy.
|
directory, it may make sense to modify the source filename to reduce
|
||||||
For example, a ``foo_firmware`` suite could be in the ``foo/firmware_test.c``
|
redundancy. For example, a ``foo_firmware`` suite could be in the
|
||||||
file.
|
``foo/tests/firmware_kunit.c`` file.
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
* EXPORTED_FOR_KUNIT_TESTING namespace only if CONFIG_KUNIT is
|
* EXPORTED_FOR_KUNIT_TESTING namespace only if CONFIG_KUNIT is
|
||||||
* enabled. Must use MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING)
|
* enabled. Must use MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING)
|
||||||
* in test file in order to use symbols.
|
* in test file in order to use symbols.
|
||||||
|
* @symbol: the symbol identifier to export
|
||||||
*/
|
*/
|
||||||
#define EXPORT_SYMBOL_IF_KUNIT(symbol) EXPORT_SYMBOL_NS(symbol, \
|
#define EXPORT_SYMBOL_IF_KUNIT(symbol) EXPORT_SYMBOL_NS(symbol, \
|
||||||
EXPORTED_FOR_KUNIT_TESTING)
|
EXPORTED_FOR_KUNIT_TESTING)
|
||||||
|
@ -3059,3 +3059,19 @@ config RUST_KERNEL_DOCTESTS
|
|||||||
endmenu # "Rust"
|
endmenu # "Rust"
|
||||||
|
|
||||||
endmenu # Kernel hacking
|
endmenu # Kernel hacking
|
||||||
|
|
||||||
|
config INT_POW_TEST
|
||||||
|
tristate "Integer exponentiation (int_pow) test" if !KUNIT_ALL_TESTS
|
||||||
|
depends on KUNIT
|
||||||
|
default KUNIT_ALL_TESTS
|
||||||
|
help
|
||||||
|
This option enables the KUnit test suite for the int_pow function,
|
||||||
|
which performs integer exponentiation. The test suite is designed to
|
||||||
|
verify that the implementation of int_pow correctly computes the power
|
||||||
|
of a given base raised to a given exponent.
|
||||||
|
|
||||||
|
Enabling this option will include tests that check various scenarios
|
||||||
|
and edge cases to ensure the accuracy and reliability of the exponentiation
|
||||||
|
function.
|
||||||
|
|
||||||
|
If unsure, say N
|
||||||
|
@ -5,5 +5,6 @@ obj-$(CONFIG_CORDIC) += cordic.o
|
|||||||
obj-$(CONFIG_PRIME_NUMBERS) += prime_numbers.o
|
obj-$(CONFIG_PRIME_NUMBERS) += prime_numbers.o
|
||||||
obj-$(CONFIG_RATIONAL) += rational.o
|
obj-$(CONFIG_RATIONAL) += rational.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_INT_POW_TEST) += tests/int_pow_kunit.o
|
||||||
obj-$(CONFIG_TEST_DIV64) += test_div64.o
|
obj-$(CONFIG_TEST_DIV64) += test_div64.o
|
||||||
obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o
|
obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o
|
||||||
|
3
lib/math/tests/Makefile
Normal file
3
lib/math/tests/Makefile
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
obj-$(CONFIG_INT_POW_TEST) += int_pow_kunit.o
|
52
lib/math/tests/int_pow_kunit.c
Normal file
52
lib/math/tests/int_pow_kunit.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
#include <kunit/test.h>
|
||||||
|
#include <linux/math.h>
|
||||||
|
|
||||||
|
struct test_case_params {
|
||||||
|
u64 base;
|
||||||
|
unsigned int exponent;
|
||||||
|
u64 expected_result;
|
||||||
|
const char *name;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct test_case_params params[] = {
|
||||||
|
{ 64, 0, 1, "Power of zero" },
|
||||||
|
{ 64, 1, 64, "Power of one"},
|
||||||
|
{ 0, 5, 0, "Base zero" },
|
||||||
|
{ 1, 64, 1, "Base one" },
|
||||||
|
{ 2, 2, 4, "Two squared"},
|
||||||
|
{ 2, 3, 8, "Two cubed"},
|
||||||
|
{ 5, 5, 3125, "Five raised to the fifth power" },
|
||||||
|
{ U64_MAX, 1, U64_MAX, "Max base" },
|
||||||
|
{ 2, 63, 9223372036854775808ULL, "Large result"},
|
||||||
|
};
|
||||||
|
|
||||||
|
static void get_desc(const struct test_case_params *tc, char *desc)
|
||||||
|
{
|
||||||
|
strscpy(desc, tc->name, KUNIT_PARAM_DESC_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
KUNIT_ARRAY_PARAM(int_pow, params, get_desc);
|
||||||
|
|
||||||
|
static void int_pow_test(struct kunit *test)
|
||||||
|
{
|
||||||
|
const struct test_case_params *tc = (const struct test_case_params *)test->param_value;
|
||||||
|
|
||||||
|
KUNIT_EXPECT_EQ(test, tc->expected_result, int_pow(tc->base, tc->exponent));
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct kunit_case math_int_pow_test_cases[] = {
|
||||||
|
KUNIT_CASE_PARAM(int_pow_test, int_pow_gen_params),
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct kunit_suite int_pow_test_suite = {
|
||||||
|
.name = "math-int_pow",
|
||||||
|
.test_cases = math_int_pow_test_cases,
|
||||||
|
};
|
||||||
|
|
||||||
|
kunit_test_suites(&int_pow_test_suite);
|
||||||
|
|
||||||
|
MODULE_DESCRIPTION("math.int_pow KUnit test suite");
|
||||||
|
MODULE_LICENSE("GPL");
|
@ -72,7 +72,8 @@ class LinuxSourceTreeOperations:
|
|||||||
raise ConfigError(e.output.decode())
|
raise ConfigError(e.output.decode())
|
||||||
|
|
||||||
def make(self, jobs: int, build_dir: str, make_options: Optional[List[str]]) -> None:
|
def make(self, jobs: int, build_dir: str, make_options: Optional[List[str]]) -> None:
|
||||||
command = ['make', 'ARCH=' + self._linux_arch, 'O=' + build_dir, '--jobs=' + str(jobs)]
|
command = ['make', 'all', 'compile_commands.json', 'ARCH=' + self._linux_arch,
|
||||||
|
'O=' + build_dir, '--jobs=' + str(jobs)]
|
||||||
if make_options:
|
if make_options:
|
||||||
command.extend(make_options)
|
command.extend(make_options)
|
||||||
if self._cross_compile:
|
if self._cross_compile:
|
||||||
|
Loading…
Reference in New Issue
Block a user