Commit 9012c4e647df ("mm/damon: replace damon_rand() with a per-ctx
lockless PRNG") optimized DAMON for better performance.  Add a kunit
test for ensuring the pseudo randomness quality.

Signed-off-by: SeongJae Park <[email protected]>
---
 mm/damon/tests/core-kunit.h | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index df16cc070eeb0..a1ba807d59a13 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -1488,6 +1488,26 @@ static void damon_test_walk_control_obsolete(struct 
kunit *test)
        damon_destroy_ctx(ctx);
 }
 
+static void damon_test_rand(struct kunit *test)
+{
+       struct damon_ctx ctx;
+       int counts[10] = {};
+       int i;
+
+       prandom_seed_state(&ctx.rnd_state, get_random_u64());
+       for (i = 0; i < 10000; i++) {
+               unsigned long rnd = damon_rand(&ctx, 0, 10);
+
+               KUNIT_EXPECT_GE(test, rnd, 0);
+               KUNIT_EXPECT_LE(test, rnd, 9);
+               counts[rnd]++;
+       }
+       for (i = 0; i < 10; i++) {
+               KUNIT_EXPECT_GE(test, counts[i], 900);
+               KUNIT_EXPECT_LE(test, counts[i], 1100);
+       }
+}
+
 static struct kunit_case damon_test_cases[] = {
        KUNIT_CASE(damon_test_target),
        KUNIT_CASE(damon_test_regions),
@@ -1518,6 +1538,7 @@ static struct kunit_case damon_test_cases[] = {
        KUNIT_CASE(damon_test_apply_min_nr_regions),
        KUNIT_CASE(damon_test_is_last_region),
        KUNIT_CASE(damon_test_walk_control_obsolete),
+       KUNIT_CASE(damon_test_rand),
        {},
 };
 
-- 
2.47.3

Reply via email to