forked from mirrors/linux
		
	lib/math: Add int_pow test suite
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 <luis.hernandez093@gmail.com> Reviewed-by: David Gow <davidgow@google.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									e4835f1da4
								
							
						
					
					
						commit
						7fcc9b5321
					
				
					 4 changed files with 72 additions and 0 deletions
				
			
		| 
						 | 
					@ -3051,3 +3051,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");
 | 
				
			||||||
		Loading…
	
		Reference in a new issue