[FFmpeg-cvslog] checkasm: add wildcompares for test & functions
J. Dekker
git at videolan.org
Wed Aug 28 12:57:07 EEST 2024
ffmpeg | branch: master | J. Dekker <jdek at itanimul.li> | Tue Aug 13 14:14:41 2024 +0200| [e758b24396a427598ebb13e1589f6aeccdae0466] | committer: J. Dekker
checkasm: add wildcompares for test & functions
Added:
--test=<pattern> Filter tests by glob style pattern.
--bench[=<pattern>] Run benchmark and optionally filter functions
by glob style pattern.
Example:
$ ./tests/checkasm/checkasm --bench=yuva*
[...]
yuva420p_bgr24_8_c: 34.5 ( 1.00x)
yuva420p_bgr24_8_ssse3: 31.1 ( 1.11x)
yuva420p_bgr24_128_c: 310.6 ( 1.00x)
yuva420p_bgr24_128_ssse3: 178.1 ( 1.74x)
yuva420p_bgr24_1080_c: 2509.6 ( 1.00x)
yuva420p_bgr24_1080_ssse3: 1471.5 ( 1.71x)
yuva420p_bgr24_1920_c: 4462.6 ( 1.00x)
yuva420p_bgr24_1920_ssse3: 2331.1 ( 1.91x)
[...]
Ported from dav1d.
Signed-off-by: J. Dekker <jdek at itanimul.li>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e758b24396a427598ebb13e1589f6aeccdae0466
---
tests/checkasm/checkasm.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index d9be973291..965e1f5a2e 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -389,7 +389,7 @@ static struct {
int cpu_flag;
const char *cpu_flag_name;
- const char *test_name;
+ const char *test_pattern;
int verbose;
int csv;
int tsv;
@@ -775,6 +775,22 @@ static void signal_handler(int s) {
}
#endif
+/* Compares a string with a wildcard pattern. */
+static int wildstrcmp(const char *str, const char *pattern)
+{
+ const char *wild = strchr(pattern, '*');
+ if (wild) {
+ const size_t len = wild - pattern;
+ if (strncmp(str, pattern, len)) return 1;
+ while (*++wild == '*');
+ if (!*wild) return 0;
+ str += len;
+ while (*str && wildstrcmp(str, wild)) str++;
+ return !*str;
+ }
+ return strcmp(str, pattern);
+}
+
/* Perform tests and benchmarks for the specified cpu flag if supported by the host */
static void check_cpu_flag(const char *name, int flag)
{
@@ -790,7 +806,7 @@ static void check_cpu_flag(const char *name, int flag)
state.cpu_flag_name = name;
for (i = 0; tests[i].func; i++) {
- if (state.test_name && strcmp(tests[i].name, state.test_name))
+ if (state.test_pattern && wildstrcmp(tests[i].name, state.test_pattern))
continue;
state.current_test_name = tests[i].name;
tests[i].func();
@@ -935,9 +951,9 @@ int main(int argc, char *argv[])
state.bench_pattern = arg + 8;
state.bench_pattern_len = strlen(state.bench_pattern);
} else
- state.bench_pattern = "";
+ state.bench_pattern = "*";
} else if (!strncmp(arg, "--test=", 7)) {
- state.test_name = arg + 7;
+ state.test_pattern = arg + 7;
} else if (!strcmp(arg, "--csv")) {
state.csv = 1; state.tsv = 0;
} else if (!strcmp(arg, "--tsv")) {
@@ -1041,7 +1057,7 @@ void *checkasm_check_func(void *func, const char *name, ...)
int checkasm_bench_func(void)
{
return !state.num_failed && state.bench_pattern &&
- !strncmp(state.current_func->name, state.bench_pattern, state.bench_pattern_len);
+ !wildstrcmp(state.current_func->name, state.bench_pattern);
}
/* Indicate that the current test has failed */
More information about the ffmpeg-cvslog
mailing list