rizin/test/unit/test_analysis_cc.c
2021-01-03 11:42:38 +01:00

109 lines
No EOL
3 KiB
C

#include <rz_analysis.h>
#include "minunit.h"
#include "test_sdb.h"
static Sdb *ref_db() {
Sdb *db = sdb_new0 ();
sdb_set (db, "cc.sectarian.ret", "rax", 0);
sdb_set (db, "cc.sectarian.arg1", "rcx", 0);
sdb_set (db, "cc.sectarian.arg0", "rdx", 0);
sdb_set (db, "cc.sectarian.argn", "stack", 0);
sdb_set (db, "sectarian", "cc", 0);
return db;
}
static Sdb *ref_db_self_err() {
Sdb *db = sdb_new0 ();
sdb_set (db, "cc.sectarian.ret", "rax", 0);
sdb_set (db, "cc.sectarian.self", "rsi", 0);
sdb_set (db, "cc.sectarian.error", "rdi", 0);
sdb_set (db, "cc.sectarian.arg1", "rcx", 0);
sdb_set (db, "cc.sectarian.arg0", "rdx", 0);
sdb_set (db, "cc.sectarian.argn", "stack", 0);
sdb_set (db, "sectarian", "cc", 0);
return db;
}
static RzAnalysis *ref_analysis() {
RzAnalysis *analysis = rz_analysis_new ();
rz_analysis_cc_set (analysis, "rax sectarian(rdx, rcx, stack)");
return analysis;
}
static RzAnalysis *ref_analysis_self_err() {
RzAnalysis *analysis = rz_analysis_new ();
rz_analysis_cc_set (analysis, "rax sectarian(rdx, rcx, stack)");
rz_analysis_cc_set_self (analysis, "sectarian", "rsi");
rz_analysis_cc_set_error (analysis, "sectarian", "rdi");
return analysis;
}
bool test_rz_analysis_cc_set() {
RzAnalysis *analysis = ref_analysis ();
Sdb *ref = ref_db ();
assert_sdb_eq (analysis->sdb_cc, ref, "set cc");
sdb_free (ref);
rz_analysis_free (analysis);
mu_end;
}
bool test_rz_analysis_cc_set_self_err() {
RzAnalysis *analysis = ref_analysis_self_err ();
Sdb *ref = ref_db_self_err ();
assert_sdb_eq (analysis->sdb_cc, ref, "set cc");
sdb_free (ref);
rz_analysis_free (analysis);
mu_end;
}
bool test_rz_analysis_cc_get() {
RzAnalysis *analysis = ref_analysis ();
char *v = rz_analysis_cc_get (analysis, "sectarian");
mu_assert_streq (v, "rax sectarian (rdx, rcx, stack);", "get cc");
free (v);
const char *vv = rz_analysis_cc_self (analysis, "sectarian");
mu_assert_null (vv, "get self");
vv = rz_analysis_cc_error (analysis, "sectarian");
mu_assert_null (vv, "get error");
rz_analysis_free (analysis);
mu_end;
}
bool test_rz_analysis_cc_get_self_err() {
RzAnalysis *analysis = ref_analysis_self_err ();
char *v = rz_analysis_cc_get (analysis, "sectarian");
mu_assert_streq (v, "rax rsi.sectarian (rdx, rcx, stack) rdi;", "get cc");
free (v);
const char *vv = rz_analysis_cc_self (analysis, "sectarian");
mu_assert_streq (vv, "rsi", "get self");
vv = rz_analysis_cc_error (analysis, "sectarian");
mu_assert_streq (vv, "rdi", "get error");
rz_analysis_free (analysis);
mu_end;
}
bool test_rz_analysis_cc_del() {
RzAnalysis *analysis = ref_analysis ();
rz_analysis_cc_del (analysis, "sectarian");
Sdb *ref = sdb_new0 ();
assert_sdb_eq (analysis->sdb_cc, ref, "deleted");
sdb_free (ref);
rz_analysis_free (analysis);
mu_end;
}
bool all_tests() {
mu_run_test (test_rz_analysis_cc_set);
mu_run_test (test_rz_analysis_cc_set_self_err);
mu_run_test (test_rz_analysis_cc_get);
mu_run_test (test_rz_analysis_cc_get_self_err);
mu_run_test (test_rz_analysis_cc_del);
return tests_passed != tests_run;
}
mu_main (all_tests)