lib: test_bitmap: add more start-end:offset/len tests
authorPaul Gortmaker <paul.gortmaker@windriver.com>
Sun, 21 Feb 2021 08:08:22 +0000 (03:08 -0500)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 8 Mar 2021 22:16:58 +0000 (14:16 -0800)
There are inputs to bitmap_parselist() that would probably never
be entered manually by a person, but might result from some kind of
automated input generator.  Things like ranges of length 1, or group
lengths longer than nbits, overlaps, or offsets of zero.

Adding these tests serve two purposes:

1) document what might seem odd but nonetheless valid input.

2) don't regress from what we currently accept as valid.

Cc: Yury Norov <yury.norov@gmail.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Yury Norov <yury.norov@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
lib/test_bitmap.c

index 0f2e91d0a84ce89240c4877d9afec36a9f83f112..3c1c46deb8fed1d0b71f91246db035db3ec54a49 100644 (file)
@@ -34,6 +34,8 @@ static const unsigned long exp1[] __initconst = {
        BITMAP_FROM_U64(0x3333333311111111ULL),
        BITMAP_FROM_U64(0xffffffff77777777ULL),
        BITMAP_FROM_U64(0),
+       BITMAP_FROM_U64(0x00008000),
+       BITMAP_FROM_U64(0x80000000),
 };
 
 static const unsigned long exp2[] __initconst = {
@@ -334,6 +336,26 @@ static const struct test_bitmap_parselist parselist_tests[] __initconst = {
        {0, " ,  ,,  , ,   ",           &exp1[12 * step], 8, 0},
        {0, " ,  ,,  , ,   \n",         &exp1[12 * step], 8, 0},
 
+       {0, "0-0",                      &exp1[0], 32, 0},
+       {0, "1-1",                      &exp1[1 * step], 32, 0},
+       {0, "15-15",                    &exp1[13 * step], 32, 0},
+       {0, "31-31",                    &exp1[14 * step], 32, 0},
+
+       {0, "0-0:0/1",                  &exp1[12 * step], 32, 0},
+       {0, "0-0:1/1",                  &exp1[0], 32, 0},
+       {0, "0-0:1/31",                 &exp1[0], 32, 0},
+       {0, "0-0:31/31",                &exp1[0], 32, 0},
+       {0, "1-1:1/1",                  &exp1[1 * step], 32, 0},
+       {0, "0-15:16/31",               &exp1[2 * step], 32, 0},
+       {0, "15-15:1/2",                &exp1[13 * step], 32, 0},
+       {0, "15-15:31/31",              &exp1[13 * step], 32, 0},
+       {0, "15-31:1/31",               &exp1[13 * step], 32, 0},
+       {0, "16-31:16/31",              &exp1[3 * step], 32, 0},
+       {0, "31-31:31/31",              &exp1[14 * step], 32, 0},
+
+       {0, "0-31:1/3,1-31:1/3,2-31:1/3",       &exp1[8 * step], 32, 0},
+       {0, "1-10:8/12,8-31:24/29,0-31:0/3",    &exp1[9 * step], 32, 0},
+
        {-EINVAL, "-1", NULL, 8, 0},
        {-EINVAL, "-0", NULL, 8, 0},
        {-EINVAL, "10-1", NULL, 8, 0},