diff --git a/cppgoslin/domain/FattyAcid.cpp b/cppgoslin/domain/FattyAcid.cpp index a8f3816..0137272 100644 --- a/cppgoslin/domain/FattyAcid.cpp +++ b/cppgoslin/domain/FattyAcid.cpp @@ -26,7 +26,6 @@ SOFTWARE. #include "FattyAcid.h" - FattyAcid::FattyAcid(string _name, int _num_carbon, int _num_double_bonds, int _num_hydroxyl, LipidFaBondType _lipid_FA_bond_type, bool _lcb, int _position, map *_double_bond_positions){ name = _name; position = _position; @@ -36,6 +35,9 @@ FattyAcid::FattyAcid(string _name, int _num_carbon, int _num_double_bonds, int _ lipid_FA_bond_type = _lipid_FA_bond_type; lcb = _lcb; if (_double_bond_positions != NULL){ + if (num_double_bonds != (int)_double_bond_positions->size()) { + throw ConstraintViolationException("Isomeric FattyAcid must receive double bond positions for all double bonds! Got " + std::to_string(num_double_bonds) + " double bonds and " + std::to_string(_double_bond_positions->size()) + " positions."); + } for (auto kv : *_double_bond_positions){ double_bond_positions.insert({kv.first, kv.second}); } @@ -110,6 +112,10 @@ string FattyAcid::to_string(bool special_case){ if (special_case && lipid_suffix.length() > 0) s << "O-"; s << num_carbon << ":" << num_double_bonds; + if (double_bond_positions.size() > 0 && num_double_bonds != (int)double_bond_positions.size()) { + throw ConstraintViolationException("Isomeric FattyAcid must receive double bond positions for all double bonds! Got " + std::to_string(num_double_bonds) + " double bonds and " + std::to_string(double_bond_positions.size()) + " positions."); + } + if (double_bond_positions.size()){ stringstream db; db << "("; diff --git a/cppgoslin/parser/GoslinParserEventHandler.cpp b/cppgoslin/parser/GoslinParserEventHandler.cpp index b027981..6b88548 100644 --- a/cppgoslin/parser/GoslinParserEventHandler.cpp +++ b/cppgoslin/parser/GoslinParserEventHandler.cpp @@ -127,7 +127,7 @@ void GoslinParserEventHandler::set_isomeric_level(TreeNode* node){ void GoslinParserEventHandler::add_db_position(TreeNode* node){ if (current_fa != NULL){ - current_fa->double_bond_positions.insert({db_position, db_cistrans}); + current_fa->double_bond_positions.insert({db_position, db_cistrans}); } } diff --git a/cppgoslin/tests/ParserTest.cpp b/cppgoslin/tests/ParserTest.cpp index e848762..3996733 100644 --- a/cppgoslin/tests/ParserTest.cpp +++ b/cppgoslin/tests/ParserTest.cpp @@ -105,7 +105,6 @@ int main(int argc, char** argv){ - // check lipid maps and swiss lipids parser with illegal lipid name string failLipidSL = "TG(16::1_18:1_24:0)"; try { @@ -157,6 +156,7 @@ int main(int argc, char** argv){ assert (lipid->get_sum_formula() == "C42H83NO4"); assert (abs(lipid->get_mass() - 665.632209) < 1e-3); delete lipid; + lipid = lipid_maps_parser.parse("Cer(d18:1(4E)/24:0(2OH))"); @@ -194,6 +194,7 @@ int main(int argc, char** argv){ assert (lipid->get_lipid_string() == "PG 22:1(5Z)/12:0"); delete lipid; + lipid_name = "PG(22:1/12:0)"; lipid = swiss_lipids_parser.parse(lipid_name); assert (lipid); @@ -201,6 +202,7 @@ int main(int argc, char** argv){ assert (lipid->get_lipid_string() == "PG 22:1/12:0"); delete lipid; + lipid_name = "PG(22:1_12:0)"; lipid = swiss_lipids_parser.parse(lipid_name); assert (lipid); @@ -231,7 +233,22 @@ int main(int argc, char** argv){ lipid = lipid_parser.parse(lipid_name); assert (false); } - catch(LipidException &e){ } + catch(LipidException &e){ + } + + + + lipid_name = "PA 19:2(12E)/12:0"; + lipid = lipid_parser.parse(lipid_name); + try { + string l = lipid->get_lipid_string(); + assert (false); + assert(l == "foo"); + } + catch(LipidException &e){ + delete lipid; + } +