On 2/28/22 14:27, Claudio Imbrenda wrote: > On Fri, 25 Feb 2022 18:23:55 +0100 > Janis Schoetterl-Glausch <scgl@xxxxxxxxxxxxx> wrote: > >> While specification exception interpretation is not required to occur, >> it can be useful for automatic regression testing to fail the test if it >> does not occur. >> Add a `--strict` argument to enable this. >> `--strict` takes a list of machine types (as reported by STIDP) >> for which to enable strict mode, for example >> `--strict 8562,8561,3907,3906,2965,2964` >> will enable it for models z15 - z13. >> Alternatively, strict mode can be enabled for all but the listed machine >> types by prefixing the list with a `!`, for example >> `--strict !1090,1091,2064,2066,2084,2086,2094,2096,2097,2098,2817,2818,2827,2828` >> will enable it for z/Architecture models except those older than z13. >> >> Signed-off-by: Janis Schoetterl-Glausch <scgl@xxxxxxxxxxxxx> >> --- > > [...] > >> +static bool parse_strict(int argc, char **argv) >> +{ >> + uint16_t machine_id; >> + char *list; >> + bool ret; >> + >> + if (argc < 1) >> + return false; >> + if (strcmp("--strict", argv[0])) >> + return false; >> + >> + machine_id = get_machine_id(); >> + if (argc < 2) { >> + printf("No argument to --strict, ignoring\n"); >> + return false; >> + } >> + list = argv[1]; >> + if (list[0] == '!') { >> + ret = true; >> + list++; >> + } else >> + ret = false; >> + while (true) { >> + long input = 0; >> + >> + if (strlen(list) == 0) >> + return ret; >> + input = strtol(list, &list, 16); >> + if (*list == ',') >> + list++; >> + else if (*list != '\0') >> + break; >> + if (input == machine_id) >> + return !ret; >> + } >> + printf("Invalid --strict argument \"%s\", ignoring\n", list); >> + return ret; >> +} > > probably I should write a few parsing functions for command line > arguments, so we don't have to re-invent the wheel every time Maybe, would depend on what you have in mind, I'm not sure most use cases can be covered by a reasonable set of abstractions. > >> + >> int main(int argc, char **argv) >> { >> if (!sclp_facilities.has_sief2) { >> @@ -76,7 +121,7 @@ int main(int argc, char **argv) >> goto out; >> } >> >> - test_spec_ex_sie(); >> + test_spec_ex_sie(parse_strict(argc - 1, argv + 1)); > > hmmm... maybe it would be more readable and more uniform with the other > tests to parse the command line during initialization of the unit test, > and set a global flag. More uniform maybe, but I tend to dislike globals from a readability point of view. I'm inclined to keep it as is. > >> out: >> return report_summary(); >> } >> >> base-commit: 257c962f3d1b2d0534af59de4ad18764d734903a >