// SPDX-License-Identifier: GPL-2.0
#include <test_progs.h>
#include <bpf/btf.h>
#include "bpf/libbpf_internal.h"
static int duration = 0;
static void validate_mask(int case_nr, const char *exp, bool *mask, int n)
{
int i;
for (i = 0; exp[i]; i++) {
if (exp[i] == '1' ) {
if (CHECK(i + 1 > n, "mask_short" ,
"case #%d: mask too short, got n=%d, need at least %d\n" ,
case_nr, n, i + 1))
return ;
CHECK(!mask[i], "cpu_not_set" ,
"case #%d: mask differs, expected cpu#%d SET\n" ,
case_nr, i);
} else {
CHECK(i < n && mask[i], "cpu_set" ,
"case #%d: mask differs, expected cpu#%d UNSET\n" ,
case_nr, i);
}
}
CHECK(i < n, "mask_long" ,
"case #%d: mask too long, got n=%d, expected at most %d\n" ,
case_nr, n, i);
}
static struct {
const char *cpu_mask;
const char *expect;
bool fails;
} test_cases[] = {
{ "0\n" , "1" , false },
{ "0,2\n" , "101" , false },
{ "0-2\n" , "111" , false },
{ "0-2,3-4\n" , "11111" , false },
{ "0" , "1" , false },
{ "0-2" , "111" , false },
{ "0,2" , "101" , false },
{ "0,1-3" , "1111" , false },
{ "0,1,2,3" , "1111" , false },
{ "0,2-3,5" , "101101" , false },
{ "3-3" , "0001" , false },
{ "2-4,6,9-10" , "00111010011" , false },
/* failure cases */
{ "" , "" , true },
{ "0-" , "" , true },
{ "0 " , "" , true },
{ "0_1" , "" , true },
{ "1-0" , "" , true },
{ "-1" , "" , true },
};
void test_cpu_mask()
{
int i, err, n;
bool *mask;
for (i = 0; i < ARRAY_SIZE(test_cases); i++) {
mask = NULL;
err = parse_cpu_mask_str(test_cases[i].cpu_mask, &mask, &n);
if (test_cases[i].fails) {
CHECK(!err, "should_fail" ,
"case #%d: parsing should fail!\n" , i + 1);
} else {
if (CHECK(err, "parse_err" ,
"case #%d: cpu mask parsing failed: %d\n" ,
i + 1, err))
continue ;
validate_mask(i + 1, test_cases[i].expect, mask, n);
}
free(mask);
}
}
Messung V0.5 C=96 H=82 G=89
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland