All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Trent Piepho <tpiepho@gmail.com>
Cc: linux-kernel@vger.kernel.org, andy@kernel.org,
	akpm@linux-foundation.org, oskar@scara.com,
	Daniel Latypov <dlatypov@google.com>
Subject: Re: [PATCH v2 2/2] lib/math/rational: Add Kunit test cases
Date: Tue, 25 May 2021 19:00:54 +0300	[thread overview]
Message-ID: <YK0fNuZFGpCQw3Sd@smile.fi.intel.com> (raw)
In-Reply-To: <20210525144250.214670-2-tpiepho@gmail.com>

On Tue, May 25, 2021 at 07:42:50AM -0700, Trent Piepho wrote:
> Adds a number of test cases that cover a range of possible code paths.

Good for the starter!
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> Signed-off-by: Trent Piepho <tpiepho@gmail.com>
> ---
>  lib/Kconfig.debug        | 12 +++++++++
>  lib/math/Makefile        |  1 +
>  lib/math/rational-test.c | 56 ++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 69 insertions(+)
>  create mode 100644 lib/math/rational-test.c
> 
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index 678c13967580..6c0e66a7d416 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -2429,6 +2429,18 @@ config BITS_TEST
>  
>  	  If unsure, say N.
>  
> +config RATIONAL_KUNIT_TEST
> +	tristate "KUnit test for rational.c" if !KUNIT_ALL_TESTS
> +	depends on KUNIT
> +	select RATIONAL
> +	default KUNIT_ALL_TESTS
> +	help
> +	  This builds the rational math unit test.
> +	  For more information on KUnit and unit tests in general please refer
> +	  to the KUnit documentation in Documentation/dev-tools/kunit/.
> +
> +	  If unsure, say N.
> +
>  config TEST_UDELAY
>  	tristate "udelay test driver"
>  	help
> diff --git a/lib/math/Makefile b/lib/math/Makefile
> index 7456edb864fc..bfac26ddfc22 100644
> --- a/lib/math/Makefile
> +++ b/lib/math/Makefile
> @@ -6,3 +6,4 @@ obj-$(CONFIG_PRIME_NUMBERS)	+= prime_numbers.o
>  obj-$(CONFIG_RATIONAL)		+= rational.o
>  
>  obj-$(CONFIG_TEST_DIV64)	+= test_div64.o
> +obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o
> diff --git a/lib/math/rational-test.c b/lib/math/rational-test.c
> new file mode 100644
> index 000000000000..f64166dbe9ea
> --- /dev/null
> +++ b/lib/math/rational-test.c
> @@ -0,0 +1,56 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +#include <kunit/test.h>
> +
> +#include <linux/rational.h>
> +
> +struct rational_test_param {
> +	unsigned long num, den;
> +	unsigned long max_num, max_den;
> +	unsigned long exp_num, exp_den;
> +
> +	const char *name;
> +};
> +
> +static const struct rational_test_param test_parameters[] = {
> +	{ 1230,	10,	100, 20,	100, 1,    "Exceeds bounds, semi-convergent term > ½ last term" },
> +	{ 34567,100, 	120, 20,	120, 1,    "Exceeds bounds, semi-convergent term < ½ last term" },
> +	{ 1, 30,	100, 10,	0, 1,	   "Closest to zero" },
> +	{ 1, 19,	100, 10,	1, 10,     "Closest to smallest non-zero" },
> +	{ 27,32,	16, 16,		11, 13,    "Use convergent" },
> +	{ 1155, 7735,	255, 255,	33, 221,   "Exact answer" },
> +	{ 87, 32,	70, 32,		68, 25,    "Semiconvergent, numerator limit" },
> +	{ 14533, 4626,	15000, 2400,	7433, 2366, "Semiconvergent, demominator limit" },
> +};
> +
> +static void get_desc(const struct rational_test_param *param, char *desc)
> +{
> +	strscpy(desc, param->name, KUNIT_PARAM_DESC_SIZE);
> +}
> +
> +/* Creates function rational_gen_params */
> +KUNIT_ARRAY_PARAM(rational, test_parameters, get_desc);
> +
> +static void rational_test(struct kunit *test)
> +{
> +	const struct rational_test_param *param = (const struct rational_test_param *)test->param_value;
> +	unsigned long n = 0, d = 0;
> +
> +	rational_best_approximation(param->num, param->den, param->max_num, param->max_den, &n, &d);
> +	KUNIT_EXPECT_EQ(test, n, param->exp_num);
> +	KUNIT_EXPECT_EQ(test, d, param->exp_den);
> +}
> +
> +static struct kunit_case rational_test_cases[] = {
> +       KUNIT_CASE_PARAM(rational_test, rational_gen_params),
> +       {}
> +};
> +
> +static struct kunit_suite rational_test_suite = {
> +       .name = "rational",
> +       .test_cases = rational_test_cases,
> +};
> +
> +kunit_test_suites(&rational_test_suite);
> +
> +MODULE_LICENSE("GPL v2");
> -- 
> 2.26.2
> 

-- 
With Best Regards,
Andy Shevchenko



  reply	other threads:[~2021-05-25 16:01 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-25 14:42 [PATCH v2 1/2] lib/math/rational.c: Fix divide by zero Trent Piepho
2021-05-25 14:42 ` [PATCH v2 2/2] lib/math/rational: Add Kunit test cases Trent Piepho
2021-05-25 16:00   ` Andy Shevchenko [this message]
2021-05-25 17:34   ` Daniel Latypov
2021-05-25 21:09     ` Trent Piepho
2021-05-25 22:03       ` Daniel Latypov
2021-05-25 21:49   ` Andrew Morton
2021-05-25 16:00 ` [PATCH v2 1/2] lib/math/rational.c: Fix divide by zero Andy Shevchenko
2021-05-25 21:46 ` Andrew Morton
2021-05-26  8:00   ` Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YK0fNuZFGpCQw3Sd@smile.fi.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=andy@kernel.org \
    --cc=dlatypov@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oskar@scara.com \
    --cc=tpiepho@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.