Skip to content

Commit

Permalink
lib/math: Add int_pow test suite
Browse files Browse the repository at this point in the history
Adds test suite for integer based power 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.

The tests check various scenarios and edge cases to ensure the accuracy
and reliability of the exponentiation function.

Updated commit with test information at commit time: Shuah Khan

Signed-off-by: Luis Felipe Hernandez <[email protected]>
Reviewed-by: David Gow <[email protected]>
Signed-off-by: Shuah Khan <[email protected]>
  • Loading branch information
lf-hernandez authored and shuahkh committed Sep 12, 2024
1 parent e4835f1 commit 7fcc9b5
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
16 changes: 16 additions & 0 deletions lib/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -3051,3 +3051,19 @@ config RUST_KERNEL_DOCTESTS
endmenu # "Rust"

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
1 change: 1 addition & 0 deletions lib/math/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ obj-$(CONFIG_CORDIC) += cordic.o
obj-$(CONFIG_PRIME_NUMBERS) += prime_numbers.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_RATIONAL_KUNIT_TEST) += rational-test.o
3 changes: 3 additions & 0 deletions lib/math/tests/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# SPDX-License-Identifier: GPL-2.0-only

obj-$(CONFIG_INT_POW_TEST) += int_pow_kunit.o
52 changes: 52 additions & 0 deletions lib/math/tests/int_pow_kunit.c
Original file line number Diff line number Diff line change
@@ -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");

0 comments on commit 7fcc9b5

Please sign in to comment.