Lines Matching +full:input +full:- +full:value
1 // SPDX-License-Identifier: GPL-2.0
13 * PRINT_ALWAYS - attribute is printed for every test case and suite if set
14 * PRINT_SUITE - attribute is printed for every suite if set but not for test cases
15 * PRINT_NEVER - attribute is never printed
24 * struct kunit_attr - represents a test attribute and holds flexible
28 * @get_attr: function to return attribute value given a test
30 * attribute value
31 * @filter: function to indicate whether a given attribute value passes a
33 * @attr_default: default attribute value used during filtering
34 * @print: value of enum print_ops to indicate when to print attribute
40 int (*filter)(void *attr, const char *input, int *err);
87 * Returns whether the inputted integer value matches the filter given
90 static int int_filter(long val, const char *op, int input, int *err) in int_filter() argument
93 return (val <= input); in int_filter()
95 return (val >= input); in int_filter()
97 return (val != input); in int_filter()
99 return (val > input); in int_filter()
101 return (val < input); in int_filter()
103 return (val == input); in int_filter()
104 *err = -EINVAL; in int_filter()
110 * Returns whether the inputted enum value "attr" matches the filter given
111 * by the input string. Note: the str_list includes the corresponding string
114 static int attr_enum_filter(void *attr, const char *input, int *err, in attr_enum_filter() argument
117 int i, j, input_int = -1; in attr_enum_filter()
121 for (i = 0; input[i]; i++) { in attr_enum_filter()
122 if (!strchr(op_list, input[i])) { in attr_enum_filter()
123 input_val = input + i; in attr_enum_filter()
129 *err = -EINVAL; in attr_enum_filter()
130 pr_err("kunit executor: filter value not found: %s\n", input); in attr_enum_filter()
140 *err = -EINVAL; in attr_enum_filter()
141 pr_err("kunit executor: invalid filter input: %s\n", input); in attr_enum_filter()
145 return int_filter(test_val, input, input_int, err); in attr_enum_filter()
148 static int attr_speed_filter(void *attr, const char *input, int *err) in attr_speed_filter() argument
150 return attr_enum_filter(attr, input, err, speed_str_list, KUNIT_SPEED_MAX); in attr_speed_filter()
154 * Returns whether the inputted string value (attr) matches the filter given
155 * by the input string.
157 static int attr_string_filter(void *attr, const char *input, int *err) in attr_string_filter() argument
161 if (!strncmp(input, "<", 1)) { in attr_string_filter()
162 *err = -EINVAL; in attr_string_filter()
163 pr_err("kunit executor: invalid filter input: %s\n", input); in attr_string_filter()
165 } else if (!strncmp(input, ">", 1)) { in attr_string_filter()
166 *err = -EINVAL; in attr_string_filter()
167 pr_err("kunit executor: invalid filter input: %s\n", input); in attr_string_filter()
169 } else if (!strncmp(input, "!=", 2)) { in attr_string_filter()
170 return (strcmp(input + 2, str) != 0); in attr_string_filter()
171 } else if (!strncmp(input, "=", 1)) { in attr_string_filter()
172 return (strcmp(input + 1, str) == 0); in attr_string_filter()
174 *err = -EINVAL; in attr_string_filter()
175 pr_err("kunit executor: invalid filter operation: %s\n", input); in attr_string_filter()
179 static int attr_bool_filter(void *attr, const char *input, int *err) in attr_bool_filter() argument
181 int i, input_int = -1; in attr_bool_filter()
185 for (i = 0; input[i]; i++) { in attr_bool_filter()
186 if (!strchr(op_list, input[i])) { in attr_bool_filter()
187 input_str = input + i; in attr_bool_filter()
193 *err = -EINVAL; in attr_bool_filter()
194 pr_err("kunit executor: filter value not found: %s\n", input); in attr_bool_filter()
203 *err = -EINVAL; in attr_bool_filter()
204 pr_err("kunit executor: invalid filter input: %s\n", input); in attr_bool_filter()
208 return int_filter(val, input, input_int, err); in attr_bool_filter()
219 return ((void *) test->attr.speed); in attr_speed_get()
221 return ((void *) suite->attr.speed); in attr_speed_get()
231 return ((void *) test->module_name); in attr_module_get()
233 return ((void *) suite->test_cases[0].module_name); in attr_module_get()
246 return ((void *) suite->is_init); in attr_is_init_get()
282 return filter.attr->name; in kunit_attr_filter_name()
304 KUNIT_INDENT_LEN * test_level, "", test->name, in kunit_print_attr()
320 int kunit_get_filter_count(char *input) in kunit_get_filter_count() argument
324 for (i = 0; input[i]; i++) { in kunit_get_filter_count()
325 if (input[i] == ',') { in kunit_get_filter_count()
326 if ((i - comma_index) > 1) in kunit_get_filter_count()
331 if ((i - comma_index) > 0) in kunit_get_filter_count()
340 int op_index = -1, attr_index = -1; in kunit_next_attr_filter()
342 char *input = *filters; in kunit_next_attr_filter() local
344 /* Parse input until operation */ in kunit_next_attr_filter()
345 for (i = 0; input[i]; i++) { in kunit_next_attr_filter()
346 if (op_index < 0 && strchr(op_list, input[i])) { in kunit_next_attr_filter()
348 } else if (!comma_index && input[i] == ',') { in kunit_next_attr_filter()
350 } else if (comma_index && input[i] != ' ') { in kunit_next_attr_filter()
357 *err = -EINVAL; in kunit_next_attr_filter()
358 pr_err("kunit executor: filter operation not found: %s\n", input); in kunit_next_attr_filter()
363 op = input[op_index]; in kunit_next_attr_filter()
364 input[op_index] = '\0'; in kunit_next_attr_filter()
368 if (!strcmp(input, kunit_attr_list[j].name)) { in kunit_next_attr_filter()
374 input[op_index] = op; in kunit_next_attr_filter()
377 *err = -EINVAL; in kunit_next_attr_filter()
378 pr_err("kunit executor: attribute not found: %s\n", input); in kunit_next_attr_filter()
384 input[comma_index] = '\0'; in kunit_next_attr_filter()
385 filter.input = input + op_index; in kunit_next_attr_filter()
386 input = input + new_start_index; in kunit_next_attr_filter()
388 filter.input = input + op_index; in kunit_next_attr_filter()
389 input = NULL; in kunit_next_attr_filter()
392 *filters = input; in kunit_next_attr_filter()
409 return ERR_PTR(-ENOMEM); in kunit_filter_attr_tests()
416 return ERR_PTR(-ENOMEM); in kunit_filter_attr_tests()
421 /* Save filtering result on default value */ in kunit_filter_attr_tests()
422 default_result = filter.attr->filter(filter.attr->attr_default, filter.input, err); in kunit_filter_attr_tests()
426 /* Save suite attribute value and filtering result on that value */ in kunit_filter_attr_tests()
427 suite_val = filter.attr->get_attr((void *)suite, false); in kunit_filter_attr_tests()
428 suite_result = filter.attr->filter(suite_val, filter.input, err); in kunit_filter_attr_tests()
434 test_val = filter.attr->get_attr((void *) test_case, true); in kunit_filter_attr_tests()
435 test_result = filter.attr->filter(filter.attr->get_attr(test_case, true), in kunit_filter_attr_tests()
436 filter.input, err); in kunit_filter_attr_tests()
441 * If attribute value of test case is set, filter on that value. in kunit_filter_attr_tests()
442 * If not, filter on suite value if set. If not, filter on in kunit_filter_attr_tests()
443 * default value. in kunit_filter_attr_tests()
459 test_case->status = KUNIT_SKIPPED; in kunit_filter_attr_tests()
471 copy->test_cases = filtered; in kunit_filter_attr_tests()