xref: /aosp_15_r20/external/capstone/suite/cstest/include/capstone_test.h (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi /* Capstone testing regression */
2*9a0e4156SSadaf Ebrahimi /* By Do Minh Tuan <[email protected]>, 02-2019 */
3*9a0e4156SSadaf Ebrahimi 
4*9a0e4156SSadaf Ebrahimi 
5*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_TEST_H
6*9a0e4156SSadaf Ebrahimi #define CAPSTONE_TEST_H
7*9a0e4156SSadaf Ebrahimi 
8*9a0e4156SSadaf Ebrahimi #include <stdarg.h>
9*9a0e4156SSadaf Ebrahimi #include <stddef.h>
10*9a0e4156SSadaf Ebrahimi #include <setjmp.h>
11*9a0e4156SSadaf Ebrahimi #include <cmocka.h>
12*9a0e4156SSadaf Ebrahimi #include <stdlib.h>
13*9a0e4156SSadaf Ebrahimi #include <string.h>
14*9a0e4156SSadaf Ebrahimi #include <capstone/capstone.h>
15*9a0e4156SSadaf Ebrahimi #include "helper.h"
16*9a0e4156SSadaf Ebrahimi #include "factory.h"
17*9a0e4156SSadaf Ebrahimi 
18*9a0e4156SSadaf Ebrahimi #define cs_assert_err(expect, err)									\
19*9a0e4156SSadaf Ebrahimi 	do {																\
20*9a0e4156SSadaf Ebrahimi 		cs_err __err = err;												\
21*9a0e4156SSadaf Ebrahimi 		if (__err != expect) {											\
22*9a0e4156SSadaf Ebrahimi 			fail_msg("%s",cs_strerror(__err));							\
23*9a0e4156SSadaf Ebrahimi 		}																\
24*9a0e4156SSadaf Ebrahimi 	} while (0)
25*9a0e4156SSadaf Ebrahimi 
26*9a0e4156SSadaf Ebrahimi 
27*9a0e4156SSadaf Ebrahimi #define cs_assert_success(err) cs_assert_err(CS_ERR_OK, err)
28*9a0e4156SSadaf Ebrahimi 
29*9a0e4156SSadaf Ebrahimi 
30*9a0e4156SSadaf Ebrahimi #define cs_assert_fail(err)											\
31*9a0e4156SSadaf Ebrahimi 	do {																\
32*9a0e4156SSadaf Ebrahimi 		cs_err __err = err;												\
33*9a0e4156SSadaf Ebrahimi 		if (__err == CS_ERR_OK) {										\
34*9a0e4156SSadaf Ebrahimi 			fail_msg("%s",cs_strerror(__err));							\
35*9a0e4156SSadaf Ebrahimi 		}																\
36*9a0e4156SSadaf Ebrahimi 	} while (0)
37*9a0e4156SSadaf Ebrahimi 
38*9a0e4156SSadaf Ebrahimi #define NUMARCH 9
39*9a0e4156SSadaf Ebrahimi #define NUMMODE 33
40*9a0e4156SSadaf Ebrahimi #define NUMOPTION 41
41*9a0e4156SSadaf Ebrahimi #define MAXMEM 1024
42*9a0e4156SSadaf Ebrahimi 
43*9a0e4156SSadaf Ebrahimi typedef struct {
44*9a0e4156SSadaf Ebrahimi 	const char *str;
45*9a0e4156SSadaf Ebrahimi 	unsigned int value;
46*9a0e4156SSadaf Ebrahimi } single_dict;
47*9a0e4156SSadaf Ebrahimi 
48*9a0e4156SSadaf Ebrahimi typedef struct {
49*9a0e4156SSadaf Ebrahimi 	const char *str;
50*9a0e4156SSadaf Ebrahimi 	unsigned int first_value;
51*9a0e4156SSadaf Ebrahimi 	unsigned int second_value;
52*9a0e4156SSadaf Ebrahimi } double_dict;
53*9a0e4156SSadaf Ebrahimi 
54*9a0e4156SSadaf Ebrahimi extern single_dict arches[];
55*9a0e4156SSadaf Ebrahimi extern single_dict modes[];
56*9a0e4156SSadaf Ebrahimi extern double_dict options[];
57*9a0e4156SSadaf Ebrahimi extern char *(*function)(csh *, cs_mode, cs_insn*);
58*9a0e4156SSadaf Ebrahimi 
59*9a0e4156SSadaf Ebrahimi int get_index(double_dict d[], unsigned size, const char *str);
60*9a0e4156SSadaf Ebrahimi int get_value(single_dict d[], unsigned size, const char *str);
61*9a0e4156SSadaf Ebrahimi void test_single_MC(csh *handle, int mc_mode, char *line);
62*9a0e4156SSadaf Ebrahimi void test_single_issue(csh *handle, cs_mode mode, char *line, int detail);
63*9a0e4156SSadaf Ebrahimi int set_function(int arch);
64*9a0e4156SSadaf Ebrahimi 
65*9a0e4156SSadaf Ebrahimi #endif /* CAPSTONE_TEST_H */
66