xref: /f-stack/dpdk/app/test-bbdev/main.h (revision 2d9fd380)
1d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2d30ea906Sjfb8856606  * Copyright(c) 2017 Intel Corporation
3d30ea906Sjfb8856606  */
4d30ea906Sjfb8856606 
5d30ea906Sjfb8856606 #ifndef _MAIN_H_
6d30ea906Sjfb8856606 #define _MAIN_H_
7d30ea906Sjfb8856606 
8d30ea906Sjfb8856606 #include <stddef.h>
9d30ea906Sjfb8856606 #include <sys/queue.h>
10d30ea906Sjfb8856606 
11d30ea906Sjfb8856606 #include <rte_common.h>
12d30ea906Sjfb8856606 #include <rte_hexdump.h>
13d30ea906Sjfb8856606 #include <rte_log.h>
14d30ea906Sjfb8856606 
15d30ea906Sjfb8856606 #define TEST_SUCCESS    0
16d30ea906Sjfb8856606 #define TEST_FAILED     -1
17d30ea906Sjfb8856606 #define TEST_SKIPPED    1
18d30ea906Sjfb8856606 
19d30ea906Sjfb8856606 #define MAX_BURST 512U
20*2d9fd380Sjfb8856606 #define MAX_OPS 1024U
21d30ea906Sjfb8856606 #define DEFAULT_BURST 32U
22d30ea906Sjfb8856606 #define DEFAULT_OPS 64U
23*2d9fd380Sjfb8856606 #define DEFAULT_ITER 6U
24*2d9fd380Sjfb8856606 
25d30ea906Sjfb8856606 
264418919fSjohnjiang 
27d30ea906Sjfb8856606 #define TEST_ASSERT(cond, msg, ...) do {  \
28d30ea906Sjfb8856606 		if (!(cond)) {  \
29d30ea906Sjfb8856606 			printf("TestCase %s() line %d failed: " \
30d30ea906Sjfb8856606 				msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
31d30ea906Sjfb8856606 			return TEST_FAILED;  \
32d30ea906Sjfb8856606 		} \
33d30ea906Sjfb8856606 } while (0)
34d30ea906Sjfb8856606 
35d30ea906Sjfb8856606 /* Compare two buffers (length in bytes) */
36d30ea906Sjfb8856606 #define TEST_ASSERT_BUFFERS_ARE_EQUAL(a, b, len, msg, ...) do { \
37d30ea906Sjfb8856606 	if (memcmp((a), (b), len)) { \
38d30ea906Sjfb8856606 		printf("TestCase %s() line %d failed: " \
39d30ea906Sjfb8856606 			msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
40d30ea906Sjfb8856606 		rte_memdump(stdout, "Buffer A", (a), len); \
41d30ea906Sjfb8856606 		rte_memdump(stdout, "Buffer B", (b), len); \
42d30ea906Sjfb8856606 		return TEST_FAILED; \
43d30ea906Sjfb8856606 	} \
44d30ea906Sjfb8856606 } while (0)
45d30ea906Sjfb8856606 
46d30ea906Sjfb8856606 #define TEST_ASSERT_SUCCESS(val, msg, ...) do { \
47d30ea906Sjfb8856606 		typeof(val) _val = (val); \
48d30ea906Sjfb8856606 		if (!(_val == 0)) { \
49d30ea906Sjfb8856606 			printf("TestCase %s() line %d failed (err %d): " \
50d30ea906Sjfb8856606 				msg "\n", __func__, __LINE__, _val, \
51d30ea906Sjfb8856606 				##__VA_ARGS__); \
52d30ea906Sjfb8856606 			return TEST_FAILED; \
53d30ea906Sjfb8856606 		} \
54d30ea906Sjfb8856606 } while (0)
55d30ea906Sjfb8856606 
56d30ea906Sjfb8856606 #define TEST_ASSERT_FAIL(val, msg, ...) \
57d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(!(val), msg, ##__VA_ARGS__)
58d30ea906Sjfb8856606 
59d30ea906Sjfb8856606 #define TEST_ASSERT_NOT_NULL(val, msg, ...) do { \
60d30ea906Sjfb8856606 		if ((val) == NULL) { \
61d30ea906Sjfb8856606 			printf("TestCase %s() line %d failed (null): " \
62d30ea906Sjfb8856606 				msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
63d30ea906Sjfb8856606 			return TEST_FAILED;  \
64d30ea906Sjfb8856606 		} \
65d30ea906Sjfb8856606 } while (0)
66d30ea906Sjfb8856606 
67d30ea906Sjfb8856606 struct unit_test_case {
68d30ea906Sjfb8856606 	int (*setup)(void);
69d30ea906Sjfb8856606 	void (*teardown)(void);
70d30ea906Sjfb8856606 	int (*testcase)(void);
71d30ea906Sjfb8856606 	const char *name;
72d30ea906Sjfb8856606 };
73d30ea906Sjfb8856606 
74d30ea906Sjfb8856606 #define TEST_CASE(testcase) {NULL, NULL, testcase, #testcase}
75d30ea906Sjfb8856606 
76d30ea906Sjfb8856606 #define TEST_CASE_ST(setup, teardown, testcase) \
77d30ea906Sjfb8856606 		{setup, teardown, testcase, #testcase}
78d30ea906Sjfb8856606 
79d30ea906Sjfb8856606 #define TEST_CASES_END() {NULL, NULL, NULL, NULL}
80d30ea906Sjfb8856606 
81d30ea906Sjfb8856606 struct unit_test_suite {
82d30ea906Sjfb8856606 	const char *suite_name;
83d30ea906Sjfb8856606 	int (*setup)(void);
84d30ea906Sjfb8856606 	void (*teardown)(void);
85d30ea906Sjfb8856606 	struct unit_test_case unit_test_cases[];
86d30ea906Sjfb8856606 };
87d30ea906Sjfb8856606 
88d30ea906Sjfb8856606 int unit_test_suite_runner(struct unit_test_suite *suite);
89d30ea906Sjfb8856606 
90d30ea906Sjfb8856606 typedef int (test_callback)(void);
91d30ea906Sjfb8856606 TAILQ_HEAD(test_commands_list, test_command);
92d30ea906Sjfb8856606 struct test_command {
93d30ea906Sjfb8856606 	TAILQ_ENTRY(test_command) next;
94d30ea906Sjfb8856606 	const char *command;
95d30ea906Sjfb8856606 	test_callback *callback;
96d30ea906Sjfb8856606 };
97d30ea906Sjfb8856606 
98d30ea906Sjfb8856606 void add_test_command(struct test_command *t);
99d30ea906Sjfb8856606 
100d30ea906Sjfb8856606 /* Register a test function */
101d30ea906Sjfb8856606 #define REGISTER_TEST_COMMAND(name, testsuite) \
102d30ea906Sjfb8856606 	static int test_func_##name(void) \
103d30ea906Sjfb8856606 	{ \
104d30ea906Sjfb8856606 		return unit_test_suite_runner(&testsuite); \
105d30ea906Sjfb8856606 	} \
106d30ea906Sjfb8856606 	static struct test_command test_struct_##name = { \
107d30ea906Sjfb8856606 		.command = RTE_STR(name), \
108d30ea906Sjfb8856606 		.callback = test_func_##name, \
109d30ea906Sjfb8856606 	}; \
110*2d9fd380Sjfb8856606 	RTE_INIT(test_register_##name) \
111d30ea906Sjfb8856606 	{ \
112d30ea906Sjfb8856606 		add_test_command(&test_struct_##name); \
113d30ea906Sjfb8856606 	}
114d30ea906Sjfb8856606 
115d30ea906Sjfb8856606 const char *get_vector_filename(void);
116d30ea906Sjfb8856606 
117d30ea906Sjfb8856606 unsigned int get_num_ops(void);
118d30ea906Sjfb8856606 
119d30ea906Sjfb8856606 unsigned int get_burst_sz(void);
120d30ea906Sjfb8856606 
121d30ea906Sjfb8856606 unsigned int get_num_lcores(void);
122d30ea906Sjfb8856606 
123*2d9fd380Sjfb8856606 double get_snr(void);
124*2d9fd380Sjfb8856606 
125*2d9fd380Sjfb8856606 unsigned int get_iter_max(void);
126*2d9fd380Sjfb8856606 
1274418919fSjohnjiang bool get_init_device(void);
1284418919fSjohnjiang 
129d30ea906Sjfb8856606 #endif
130