END_TEST START_TEST (test_selector) { set_fail_freq(1000000); freesasa_parameters p = freesasa_default_parameters; p.shrake_rupley_n_points = 10; FILE *file = fopen(DATADIR "1ubq.pdb", "r"); freesasa_structure *s = freesasa_structure_from_pdb(file, NULL, 0); freesasa_result *result = freesasa_calc_structure(s, NULL); double area; char name[FREESASA_MAX_SELECTION_NAME]; freesasa_set_verbosity(FREESASA_V_SILENT); for (int i = 1; i < 17; ++i) { /* This is a pretty short expression. Have not verified that it's actually exactly 17 memory allocations, but we have success with a frequencey of 18, and 17 seems about right. */ set_fail_freq(i); ck_assert_int_eq(freesasa_select_area("s, resn ALA and not resi 1-20", name, &area, s, result), FREESASA_FAIL); // this expression should come across most allocations } freesasa_set_verbosity(FREESASA_V_NORMAL); fclose(file); freesasa_result_free(result); freesasa_structure_free(s); }
static void test_select(const char **command,int n_commands) { for (int i = 0; i < n_commands; ++i) ck_assert_int_eq(freesasa_select_area(command[i],selection_name[i],value+i,structure,result), FREESASA_SUCCESS); }
END_TEST START_TEST (test_syntax_error) { double a; char s[FREESASA_MAX_SELECTION_NAME+1]; const char *err[] = {"","a","a,","a,b", // no selection arg "a,resi","a,resn","a,name","a,symbol","a,chain", // no name of selection ",resn ala",",resi 1",",name ca",", symbol c",",chain a", "resn ala","resi 1","name ca","symbol c","chain a", // comma wrong place, no name "resn, ala","resi, 1","name, ca","symbol, c","chain, a", // ranges (-) used where not allowed "a, resn ala-arg", "a, name ca-cb","a, symbol c-o", "a, resi 1-2-3", // trailing +- "a, resn ala+", "a, resn ala+arg+", "a, resi 1-", "a, resi 1-", "a, resi 1-2+","a, resi 1+2-5+", // boolean operators "a, (resn ala) AND","a,(resn ala) OR","a,(resn ala) OR NOT", "a, (resn ala) AND arg","a,(resn ala) OR arg", "a, (resn ala) OR NOT arg", "a, ala OR resn arg", }; int n = sizeof(err)/sizeof(char*); freesasa_set_verbosity(FREESASA_V_SILENT); for (int i = 0; i < n; ++i) { ck_assert_int_eq(freesasa_select_area(err[i],s,&a,structure,result),FREESASA_FAIL); } freesasa_set_verbosity(FREESASA_V_NORMAL); } END_TEST
} END_TEST // check that some complex constructs don't cause errors, but no checks for valid selection START_TEST (test_complex_syntax) { double a; char s[FREESASA_MAX_SELECTION_NAME+1]; const char *stmt[] = {"a, (resn ala AND resi 1-3) OR (NOT chain A+B AND (symbol C OR symbol O))", "a, NOT symbol SE+C AND NOT resi 5-7+1+6-8+100+200+10-11" }; int n = sizeof(stmt)/sizeof(char*); freesasa_set_verbosity(FREESASA_V_SILENT); for (int i = 0; i < n; ++i) { ck_assert_int_eq(freesasa_select_area(stmt[i],s,&a,structure,result),FREESASA_SUCCESS); } freesasa_set_verbosity(FREESASA_V_NORMAL); } END_TEST