@@ -370,17 +370,23 @@ void test_convenience_accessors (void)
370370{ .name = "dub" , .key = 7 , .has_arg = 1 , .arginfo = "" , .usage = "" },
371371{ .name = "ndb" , .key = 8 , .has_arg = 1 , .arginfo = "" , .usage = "" },
372372{ .name = "dur" , .key = 9 , .has_arg = 1 , .arginfo = "" , .usage = "" },
373+ { .name = "size" , .key = 10 , .has_arg = 1 , .arginfo = "" , .usage = "" },
374+ { .name = "sizeint" , .key = 11 , .has_arg = 1 , .arginfo = "" , .usage = "" },
373375 OPTPARSE_TABLE_END ,
374376 };
375377
376378 char * av [] = { "test" , "--foo" , "--baz=hello" , "--mnf=7" , "--neg=-4" ,
377- "--dub=5.7" , "--ndb=-3.2" , "--dur=1.5m" , NULL };
379+ "--dub=5.7" , "--ndb=-3.2" , "--dur=1.5m" , "--size=4G" ,
380+ "--sizeint=1.25G" , NULL };
378381 int ac = ARRAY_SIZE (av ) - 1 ;
379382 int rc , optindex ;
380383
381384 optparse_t * p = optparse_create ("test" );
382385 ok (p != NULL , "create object" );
383386
387+ ok (optparse_set (p , OPTPARSE_LOG_FN , diag ) == OPTPARSE_SUCCESS ,
388+ "optparse_set LOG_FN" );
389+
384390 rc = optparse_add_option_table (p , opts );
385391 ok (rc == OPTPARSE_SUCCESS , "register options" );
386392
@@ -463,6 +469,61 @@ void test_convenience_accessors (void)
463469 ok (optparse_get_duration (p , "dur" , 42 ) == 90. ,
464470 "get_duration returns duration arg when present" );
465471
472+ /* get_size
473+ */
474+ dies_ok ({optparse_get_size (p , "no-exist" , "0" ); },
475+ "get_size exits on unknown arg" );
476+ dies_ok ({optparse_get_size (p , "foo" , "0" ); },
477+ "get_size exits on option with no argument" );
478+ dies_ok ({optparse_get_size (p , "baz" , "0" ); },
479+ "get_size exits on option with wrong type argument (string)" );
480+ dies_ok ({optparse_get_size (p , "neg" , "42" ); },
481+ "get_size exits on negative arg" );
482+ dies_ok ({optparse_get_size (p , "dur" , "42" ); },
483+ "get_size exits on bad suffix" );
484+ dies_ok ({optparse_get_size (p , "bar" , "1m" ); },
485+ "get_size exits on bad suffix in default" );
486+ lives_ok ({optparse_get_size (p , "size" , "1k" ); },
487+ "get_size lives on known arg" );
488+
489+ ok (optparse_get_size (p , "bar" , "10M" ) == 10 * 1024 * 1024 ,
490+ "get_size returns default argument when arg not present" );
491+ ok (optparse_get_size (p , "bar" , NULL ) == 0 ,
492+ "get_size default_argument=NULL results in default=0 " );
493+ ok (optparse_get_size (p , "mnf" , "0" ) == 7 ,
494+ "get_size returns arg when present" );
495+ ok (optparse_get_size (p , "size" , "0" ) == 4 * 1024UL * 1024 * 1024 ,
496+ "get_size returns size arg when present" );
497+
498+ /* get_size_int
499+ */
500+ dies_ok ({optparse_get_size_int (p , "no-exist" , "0" ); },
501+ "get_size_int exits on unknown arg" );
502+ dies_ok ({optparse_get_size_int (p , "foo" , "0" ); },
503+ "get_size_int exits on option with no argument" );
504+ dies_ok ({optparse_get_size_int (p , "baz" , "0" ); },
505+ "get_size_int exits on option with wrong type argument (string)" );
506+ dies_ok ({optparse_get_size_int (p , "neg" , "42" ); },
507+ "get_size_int exits on negative arg" );
508+ dies_ok ({optparse_get_size_int (p , "dur" , "42" ); },
509+ "get_size_int exits on bad suffix" );
510+ dies_ok ({optparse_get_size_int (p , "bar" , "1m" ); },
511+ "get_size_int exits on bad suffix in default" );
512+ dies_ok ({optparse_get_size_int (p , "size" , "1M" ); },
513+ "get_size_int exits on value too large" );
514+ lives_ok ({optparse_get_size_int (p , "mnf" , "1k" ); },
515+ "get_size_int lives on known arg" );
516+
517+ ok (optparse_get_size_int (p , "bar" , "10M" ) == 10 * 1024 * 1024 ,
518+ "get_size_int returns default argument when arg not present" );
519+ ok (optparse_get_size_int (p , "bar" , NULL ) == 0 ,
520+ "get_size_int default_argument=NULL results in default=0 " );
521+ ok (optparse_get_size_int (p , "mnf" , "0" ) == 7 ,
522+ "get_size_int returns arg when present" );
523+ ok (optparse_get_size_int (p , "sizeint" , "0" ) == 1.25 * 1024L * 1024 * 1024 ,
524+ "get_size_int returns size arg when present" );
525+
526+
466527 /* get_str
467528 */
468529 dies_ok ({optparse_get_str (p , "no-exist" , NULL ); },
@@ -1363,9 +1424,9 @@ static void test_optional_args ()
13631424
13641425int main (int argc , char * argv [])
13651426{
1366- plan (299 );
1427+ plan (323 );
13671428
1368- test_convenience_accessors (); /* 36 tests */
1429+ test_convenience_accessors (); /* 60 tests */
13691430 test_usage_output (); /* 46 tests */
13701431 test_option_cb (); /* 16 tests */
13711432 test_errors (); /* 9 tests */
0 commit comments