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);
77 * Returns whether the inputted integer value matches the filter given
80 static int int_filter(long val, const char *op, int input, int *err) in int_filter() argument
83 return (val <= input); in int_filter()
85 return (val >= input); in int_filter()
87 return (val != input); in int_filter()
89 return (val > input); in int_filter()
91 return (val < input); in int_filter()
93 return (val == input); in int_filter()
94 *err = -EINVAL; in int_filter()
100 * Returns whether the inputted enum value "attr" matches the filter given
101 * by the input string. Note: the str_list includes the corresponding string
104 static int attr_enum_filter(void *attr, const char *input, int *err, in attr_enum_filter() argument
107 int i, j, input_int = -1; in attr_enum_filter()
111 for (i = 0; input[i]; i++) { in attr_enum_filter()
112 if (!strchr(op_list, input[i])) { in attr_enum_filter()
113 input_val = input + i; in attr_enum_filter()
119 *err = -EINVAL; in attr_enum_filter()
120 pr_err("kunit executor: filter value not found: %s\n", input); in attr_enum_filter()
130 *err = -EINVAL; in attr_enum_filter()
131 pr_err("kunit executor: invalid filter input: %s\n", input); in attr_enum_filter()
135 return int_filter(test_val, input, input_int, err); in attr_enum_filter()
138 static int attr_speed_filter(void *attr, const char *input, int *err) in attr_speed_filter() argument
140 return attr_enum_filter(attr, input, err, speed_str_list, KUNIT_SPEED_MAX); in attr_speed_filter()
144 * Returns whether the inputted string value (attr) matches the filter given
145 * by the input string.
147 static int attr_string_filter(void *attr, const char *input, int *err) in attr_string_filter() argument
151 if (!strncmp(input, "<", 1)) { in attr_string_filter()
152 *err = -EINVAL; in attr_string_filter()
153 pr_err("kunit executor: invalid filter input: %s\n", input); in attr_string_filter()
155 } else if (!strncmp(input, ">", 1)) { in attr_string_filter()
156 *err = -EINVAL; in attr_string_filter()
157 pr_err("kunit executor: invalid filter input: %s\n", input); in attr_string_filter()
159 } else if (!strncmp(input, "!=", 2)) { in attr_string_filter()
160 return (strcmp(input + 2, str) != 0); in attr_string_filter()
161 } else if (!strncmp(input, "=", 1)) { in attr_string_filter()
162 return (strcmp(input + 1, str) == 0); in attr_string_filter()
164 *err = -EINVAL; in attr_string_filter()
165 pr_err("kunit executor: invalid filter operation: %s\n", input); in attr_string_filter()
178 return ((void *) test->attr.speed); in attr_speed_get()
180 return ((void *) suite->attr.speed); in attr_speed_get()
190 return ((void *) test->module_name); in attr_module_get()
192 return ((void *) suite->test_cases[0].module_name); in attr_module_get()
222 return filter.attr->name; in kunit_attr_filter_name()
244 KUNIT_INDENT_LEN * test_level, "", test->name, in kunit_print_attr()
260 int kunit_get_filter_count(char *input) in kunit_get_filter_count() argument
264 for (i = 0; input[i]; i++) { in kunit_get_filter_count()
265 if (input[i] == ',') { in kunit_get_filter_count()
266 if ((i - comma_index) > 1) in kunit_get_filter_count()
271 if ((i - comma_index) > 0) in kunit_get_filter_count()
280 int op_index = -1, attr_index = -1; in kunit_next_attr_filter()
282 char *input = *filters; in kunit_next_attr_filter() local
284 /* Parse input until operation */ in kunit_next_attr_filter()
285 for (i = 0; input[i]; i++) { in kunit_next_attr_filter()
286 if (op_index < 0 && strchr(op_list, input[i])) { in kunit_next_attr_filter()
288 } else if (!comma_index && input[i] == ',') { in kunit_next_attr_filter()
290 } else if (comma_index && input[i] != ' ') { in kunit_next_attr_filter()
297 *err = -EINVAL; in kunit_next_attr_filter()
298 pr_err("kunit executor: filter operation not found: %s\n", input); in kunit_next_attr_filter()
303 op = input[op_index]; in kunit_next_attr_filter()
304 input[op_index] = '\0'; in kunit_next_attr_filter()
308 if (!strcmp(input, kunit_attr_list[j].name)) { in kunit_next_attr_filter()
314 input[op_index] = op; in kunit_next_attr_filter()
317 *err = -EINVAL; in kunit_next_attr_filter()
318 pr_err("kunit executor: attribute not found: %s\n", input); in kunit_next_attr_filter()
324 input[comma_index] = '\0'; in kunit_next_attr_filter()
325 filter.input = input + op_index; in kunit_next_attr_filter()
326 input = input + new_start_index; in kunit_next_attr_filter()
328 filter.input = input + op_index; in kunit_next_attr_filter()
329 input = NULL; in kunit_next_attr_filter()
332 *filters = input; in kunit_next_attr_filter()
349 return ERR_PTR(-ENOMEM); in kunit_filter_attr_tests()
356 return ERR_PTR(-ENOMEM); in kunit_filter_attr_tests()
361 /* Save filtering result on default value */ in kunit_filter_attr_tests()
362 default_result = filter.attr->filter(filter.attr->attr_default, filter.input, err); in kunit_filter_attr_tests()
366 /* Save suite attribute value and filtering result on that value */ in kunit_filter_attr_tests()
367 suite_val = filter.attr->get_attr((void *)suite, false); in kunit_filter_attr_tests()
368 suite_result = filter.attr->filter(suite_val, filter.input, err); in kunit_filter_attr_tests()
374 test_val = filter.attr->get_attr((void *) test_case, true); in kunit_filter_attr_tests()
375 test_result = filter.attr->filter(filter.attr->get_attr(test_case, true), in kunit_filter_attr_tests()
376 filter.input, err); in kunit_filter_attr_tests()
381 * If attribute value of test case is set, filter on that value. in kunit_filter_attr_tests()
382 * If not, filter on suite value if set. If not, filter on in kunit_filter_attr_tests()
383 * default value. in kunit_filter_attr_tests()
399 test_case->status = KUNIT_SKIPPED; in kunit_filter_attr_tests()
411 copy->test_cases = filtered; in kunit_filter_attr_tests()