@@ -434,8 +434,11 @@ static void numbers_list_hh(struct kunit *test, const char *delim)
434
434
numbers_list_8 (signed char , "0x%hhx" , delim , "hhi" , check_char );
435
435
}
436
436
437
- static void numbers_list (struct kunit * test , const char * delim )
437
+ static void numbers_list (struct kunit * test )
438
438
{
439
+ const char * const * param = test -> param_value ;
440
+ const char * delim = * param ;
441
+
439
442
numbers_list_ll (test , delim );
440
443
numbers_list_l (test , delim );
441
444
numbers_list_d (test , delim );
@@ -506,8 +509,11 @@ static void numbers_list_field_width_hh(struct kunit *test, const char *delim)
506
509
* List of numbers separated by delim. Each field width specifier is the
507
510
* maximum possible digits for the given type and base.
508
511
*/
509
- static void numbers_list_field_width_typemax (struct kunit * test , const char * delim )
512
+ static void numbers_list_field_width_typemax (struct kunit * test )
510
513
{
514
+ const char * const * param = test -> param_value ;
515
+ const char * delim = * param ;
516
+
511
517
numbers_list_field_width_ll (test , delim );
512
518
numbers_list_field_width_l (test , delim );
513
519
numbers_list_field_width_d (test , delim );
@@ -569,8 +575,11 @@ static void numbers_list_field_width_val_hh(struct kunit *test, const char *deli
569
575
* List of numbers separated by delim. Each field width specifier is the
570
576
* exact length of the corresponding value digits in the string being scanned.
571
577
*/
572
- static void numbers_list_field_width_val_width (struct kunit * test , const char * delim )
578
+ static void numbers_list_field_width_val_width (struct kunit * test )
573
579
{
580
+ const char * const * param = test -> param_value ;
581
+ const char * delim = * param ;
582
+
574
583
numbers_list_field_width_val_ll (test , delim );
575
584
numbers_list_field_width_val_l (test , delim );
576
585
numbers_list_field_width_val_d (test , delim );
@@ -586,7 +595,12 @@ static void numbers_list_field_width_val_width(struct kunit *test, const char *d
586
595
*/
587
596
static void numbers_slice (struct kunit * test )
588
597
{
589
- numbers_list_field_width_val_width (test , "" );
598
+ const char * delim = "" ;
599
+
600
+ KUNIT_ASSERT_PTR_EQ (test , test -> param_value , NULL );
601
+ test -> param_value = & delim ;
602
+
603
+ numbers_list_field_width_val_width (test );
590
604
}
591
605
592
606
#define test_number_prefix (T , str , scan_fmt , expect0 , expect1 , n_args , fn ) \
@@ -737,62 +751,60 @@ static const char * const number_delimiters[] = {
737
751
" " , ":" , "," , "-" , "/" ,
738
752
};
739
753
740
- static void test_numbers (struct kunit * test )
754
+ static void number_delimiter_param_desc (const char * const * param ,
755
+ char * desc )
741
756
{
742
- int i ;
757
+ snprintf (desc , KUNIT_PARAM_DESC_SIZE , "\"%s\"" , * param );
758
+ }
743
759
744
- /* String containing only one number. */
745
- numbers_simple (test );
760
+ KUNIT_ARRAY_PARAM (number_delimiters , number_delimiters , number_delimiter_param_desc );
746
761
762
+ static struct kunit_case scanf_test_cases [] = {
763
+ KUNIT_CASE (numbers_simple ),
747
764
/* String with multiple numbers separated by delimiter. */
748
- for (i = 0 ; i < ARRAY_SIZE (number_delimiters ); i ++ ) {
749
- numbers_list (test , number_delimiters [i ]);
750
-
751
- /* Field width may be longer than actual field digits. */
752
- numbers_list_field_width_typemax (test , number_delimiters [i ]);
753
-
754
- /* Each field width exactly length of actual field digits. */
755
- numbers_list_field_width_val_width (test , number_delimiters [i ]);
756
- }
757
-
765
+ KUNIT_CASE_PARAM (numbers_list , number_delimiters_gen_params ),
766
+ /* Field width may be longer than actual field digits. */
767
+ KUNIT_CASE_PARAM (numbers_list_field_width_typemax , number_delimiters_gen_params ),
768
+ /* Each field width exactly length of actual field digits. */
769
+ KUNIT_CASE_PARAM (numbers_list_field_width_val_width , number_delimiters_gen_params ),
758
770
/* Slice continuous sequence of digits using field widths. */
759
- numbers_slice (test );
771
+ KUNIT_CASE (numbers_slice ),
772
+ KUNIT_CASE (numbers_prefix_overflow ),
760
773
761
- numbers_prefix_overflow (test );
762
- }
774
+ KUNIT_CASE (test_simple_strtoull ),
775
+ KUNIT_CASE (test_simple_strtoll ),
776
+ KUNIT_CASE (test_simple_strtoul ),
777
+ KUNIT_CASE (test_simple_strtol ),
778
+ {}
779
+ };
763
780
764
- static void scanf_test (struct kunit * test )
781
+ static int scanf_suite_init (struct kunit_suite * suite )
765
782
{
766
783
test_buffer = kmalloc (BUF_SIZE , GFP_KERNEL );
767
784
if (!test_buffer )
768
- return ;
785
+ return - ENOMEM ;
769
786
770
787
fmt_buffer = kmalloc (BUF_SIZE , GFP_KERNEL );
771
788
if (!fmt_buffer ) {
772
789
kfree (test_buffer );
773
- return ;
790
+ return - ENOMEM ;
774
791
}
775
792
776
793
prandom_seed_state (& rnd_state , 3141592653589793238ULL );
777
794
778
- test_numbers (test );
779
-
780
- test_simple_strtoull (test );
781
- test_simple_strtoll (test );
782
- test_simple_strtoul (test );
783
- test_simple_strtol (test );
795
+ return 0 ;
796
+ }
784
797
798
+ static void scanf_suite_exit (struct kunit_suite * suite )
799
+ {
785
800
kfree (fmt_buffer );
786
801
kfree (test_buffer );
787
802
}
788
803
789
- static struct kunit_case scanf_test_cases [] = {
790
- KUNIT_CASE (scanf_test ),
791
- {}
792
- };
793
-
794
804
static struct kunit_suite scanf_test_suite = {
795
805
.name = "scanf" ,
806
+ .suite_init = scanf_suite_init ,
807
+ .suite_exit = scanf_suite_exit ,
796
808
.test_cases = scanf_test_cases ,
797
809
};
798
810
0 commit comments