1*313b38a6STamir Duberstein // SPDX-License-Identifier: GPL-2.0-only 2*313b38a6STamir Duberstein 3*313b38a6STamir Duberstein #include <kunit/test.h> 4*313b38a6STamir Duberstein #include <linux/module.h> 5*313b38a6STamir Duberstein #include <linux/prime_numbers.h> 6*313b38a6STamir Duberstein 7*313b38a6STamir Duberstein #include "../prime_numbers_private.h" 8*313b38a6STamir Duberstein 9*313b38a6STamir Duberstein static void dump_primes(void *ctx, const struct primes *p) 10*313b38a6STamir Duberstein { 11*313b38a6STamir Duberstein static char buf[PAGE_SIZE]; 12*313b38a6STamir Duberstein struct kunit_suite *suite = ctx; 13*313b38a6STamir Duberstein 14*313b38a6STamir Duberstein bitmap_print_to_pagebuf(true, buf, p->primes, p->sz); 15*313b38a6STamir Duberstein kunit_info(suite, "primes.{last=%lu, .sz=%lu, .primes[]=...x%lx} = %s", 16*313b38a6STamir Duberstein p->last, p->sz, p->primes[BITS_TO_LONGS(p->sz) - 1], buf); 17*313b38a6STamir Duberstein } 18*313b38a6STamir Duberstein 19*313b38a6STamir Duberstein static void prime_numbers_test(struct kunit *test) 20*313b38a6STamir Duberstein { 21*313b38a6STamir Duberstein const unsigned long max = 65536; 22*313b38a6STamir Duberstein unsigned long x, last, next; 23*313b38a6STamir Duberstein 24*313b38a6STamir Duberstein for (last = 0, x = 2; x < max; x++) { 25*313b38a6STamir Duberstein const bool slow = slow_is_prime_number(x); 26*313b38a6STamir Duberstein const bool fast = is_prime_number(x); 27*313b38a6STamir Duberstein 28*313b38a6STamir Duberstein KUNIT_ASSERT_EQ_MSG(test, slow, fast, "is-prime(%lu)", x); 29*313b38a6STamir Duberstein 30*313b38a6STamir Duberstein if (!slow) 31*313b38a6STamir Duberstein continue; 32*313b38a6STamir Duberstein 33*313b38a6STamir Duberstein next = next_prime_number(last); 34*313b38a6STamir Duberstein KUNIT_ASSERT_EQ_MSG(test, next, x, "next-prime(%lu)", last); 35*313b38a6STamir Duberstein last = next; 36*313b38a6STamir Duberstein } 37*313b38a6STamir Duberstein } 38*313b38a6STamir Duberstein 39*313b38a6STamir Duberstein static void kunit_suite_exit(struct kunit_suite *suite) 40*313b38a6STamir Duberstein { 41*313b38a6STamir Duberstein with_primes(suite, dump_primes); 42*313b38a6STamir Duberstein } 43*313b38a6STamir Duberstein 44*313b38a6STamir Duberstein static struct kunit_case prime_numbers_cases[] = { 45*313b38a6STamir Duberstein KUNIT_CASE(prime_numbers_test), 46*313b38a6STamir Duberstein {}, 47*313b38a6STamir Duberstein }; 48*313b38a6STamir Duberstein 49*313b38a6STamir Duberstein static struct kunit_suite prime_numbers_suite = { 50*313b38a6STamir Duberstein .name = "math-prime_numbers", 51*313b38a6STamir Duberstein .suite_exit = kunit_suite_exit, 52*313b38a6STamir Duberstein .test_cases = prime_numbers_cases, 53*313b38a6STamir Duberstein }; 54*313b38a6STamir Duberstein 55*313b38a6STamir Duberstein kunit_test_suite(prime_numbers_suite); 56*313b38a6STamir Duberstein 57*313b38a6STamir Duberstein MODULE_AUTHOR("Intel Corporation"); 58*313b38a6STamir Duberstein MODULE_DESCRIPTION("Prime number library"); 59*313b38a6STamir Duberstein MODULE_LICENSE("GPL"); 60