END_TEST START_TEST (test_classifier) { freesasa_set_verbosity(FREESASA_V_SILENT); set_fail_freq(1); ck_assert_ptr_eq(classifier_types_new(),NULL); ck_assert_ptr_eq(classifier_residue_new("A"),NULL); ck_assert_ptr_eq(classifier_config_new(),NULL); for (int i = 1; i < 5; ++i) { set_fail_freq(10000); struct classifier_types *types = classifier_types_new(); struct classifier_residue *res = classifier_residue_new("ALA"); struct classifier_config *cfg = classifier_config_new(); if (i < 3) { set_fail_freq(i); ck_assert_int_eq(add_class(types,"A"),FREESASA_FAIL); set_fail_freq(i); ck_assert_int_eq(add_type(types,"a","A",1.0),FREESASA_FAIL); } set_fail_freq(i); ck_assert_int_eq(add_atom(res,"A",1.0,0),FREESASA_FAIL); set_fail_freq(i); ck_assert_int_eq(add_residue(cfg,"A"),FREESASA_FAIL); classifier_types_free(types); classifier_residue_free(res); classifier_config_free(cfg); } // don't test all levels, but make sure errors in low level // allocation propagates to the interface FILE *config = fopen(SHAREDIR "naccess.config","r"); ck_assert_ptr_ne(config, NULL); for (int i = 1; i < 50; ++i) { set_fail_freq(i); ck_assert_ptr_eq(freesasa_classifier_from_file(config),NULL); rewind(config); } fclose(config); freesasa_set_verbosity(FREESASA_V_NORMAL); }
static struct classifier_config* read_config(FILE *input) { assert(input); struct file_range types_section, atoms_section; struct classifier_config *config = NULL; struct classifier_types *types = NULL; if (!(types = classifier_types_new()) || !(config = classifier_config_new()) || check_file(input, &types_section, &atoms_section) || read_types(types, input, types_section) || read_atoms(config, types, input, atoms_section) || config_copy_classes(config, types)) { classifier_config_free(config); config = NULL; } classifier_types_free(types); return config; }