1 #include <r_anal.h>
2 
3 #include "minunit.h"
4 #include "test_sdb.h"
5 
ref_db()6 static Sdb *ref_db() {
7 	Sdb *db = sdb_new0 ();
8 	sdb_set (db, "cc.sectarian.ret", "rax", 0);
9 	sdb_set (db, "cc.sectarian.arg1", "rcx", 0);
10 	sdb_set (db, "cc.sectarian.arg0", "rdx", 0);
11 	sdb_set (db, "cc.sectarian.argn", "stack", 0);
12 	sdb_set (db, "sectarian", "cc", 0);
13 	return db;
14 }
15 
ref_db_self_err()16 static Sdb *ref_db_self_err() {
17 	Sdb *db = sdb_new0 ();
18 	sdb_set (db, "cc.sectarian.ret", "rax", 0);
19 	sdb_set (db, "cc.sectarian.self", "rsi", 0);
20 	sdb_set (db, "cc.sectarian.error", "rdi", 0);
21 	sdb_set (db, "cc.sectarian.arg1", "rcx", 0);
22 	sdb_set (db, "cc.sectarian.arg0", "rdx", 0);
23 	sdb_set (db, "cc.sectarian.argn", "stack", 0);
24 	sdb_set (db, "sectarian", "cc", 0);
25 	return db;
26 }
27 
ref_anal()28 static RAnal *ref_anal() {
29 	RAnal *anal = r_anal_new ();
30 	r_anal_cc_set (anal, "rax sectarian(rdx, rcx, stack)");
31 	return anal;
32 }
33 
ref_anal_self_err()34 static RAnal *ref_anal_self_err() {
35 	RAnal *anal = r_anal_new ();
36 	r_anal_cc_set (anal, "rax sectarian(rdx, rcx, stack)");
37 	r_anal_cc_set_self (anal, "sectarian", "rsi");
38 	r_anal_cc_set_error (anal, "sectarian", "rdi");
39 	return anal;
40 }
41 
test_r_anal_cc_set()42 bool test_r_anal_cc_set() {
43 	RAnal *anal = ref_anal ();
44 
45 	Sdb *ref = ref_db ();
46 	assert_sdb_eq (anal->sdb_cc, ref, "set cc");
47 	sdb_free (ref);
48 
49 	r_anal_free (anal);
50 	mu_end;
51 }
52 
test_r_anal_cc_set_self_err()53 bool test_r_anal_cc_set_self_err() {
54 	RAnal *anal = ref_anal_self_err ();
55 
56 	Sdb *ref = ref_db_self_err ();
57 	assert_sdb_eq (anal->sdb_cc, ref, "set cc");
58 	sdb_free (ref);
59 
60 	r_anal_free (anal);
61 	mu_end;
62 }
63 
test_r_anal_cc_get()64 bool test_r_anal_cc_get() {
65 	RAnal *anal = ref_anal ();
66 	char *v = r_anal_cc_get (anal, "sectarian");
67 	mu_assert_streq (v, "rax sectarian (rdx, rcx, stack);", "get cc");
68 	free (v);
69 	const char *vv = r_anal_cc_self (anal, "sectarian");
70 	mu_assert_null (vv, "get self");
71 	vv = r_anal_cc_error (anal, "sectarian");
72 	mu_assert_null (vv, "get error");
73 	r_anal_free (anal);
74 	mu_end;
75 }
76 
test_r_anal_cc_get_self_err()77 bool test_r_anal_cc_get_self_err() {
78 	RAnal *anal = ref_anal_self_err ();
79 	char *v = r_anal_cc_get (anal, "sectarian");
80 	mu_assert_streq (v, "rax rsi.sectarian (rdx, rcx, stack) rdi;", "get cc");
81 	free (v);
82 	const char *vv = r_anal_cc_self (anal, "sectarian");
83 	mu_assert_streq (vv, "rsi", "get self");
84 	vv = r_anal_cc_error (anal, "sectarian");
85 	mu_assert_streq (vv, "rdi", "get error");
86 	r_anal_free (anal);
87 	mu_end;
88 }
89 
test_r_anal_cc_del()90 bool test_r_anal_cc_del() {
91 	RAnal *anal = ref_anal ();
92 	r_anal_cc_del (anal, "sectarian");
93 	Sdb *ref = sdb_new0 ();
94 	assert_sdb_eq (anal->sdb_cc, ref, "deleted");
95 	sdb_free (ref);
96 	r_anal_free (anal);
97 	mu_end;
98 }
99 
all_tests()100 bool all_tests() {
101 	mu_run_test (test_r_anal_cc_set);
102 	mu_run_test (test_r_anal_cc_set_self_err);
103 	mu_run_test (test_r_anal_cc_get);
104 	mu_run_test (test_r_anal_cc_get_self_err);
105 	mu_run_test (test_r_anal_cc_del);
106 	return tests_passed != tests_run;
107 }
108 
main(int argc,char ** argv)109 int main(int argc, char **argv) {
110 	return all_tests ();
111 }
112