From 26f0afb89d8c64c69b5e0efa6b5f0d95e58f0246 Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Mon, 3 May 2010 10:53:15 +0000 Subject: [PATCH] Added unit tests and fix for add/remove residue to chainview git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2168 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/mol/base/src/chain_view.cc | 12 +++++++---- modules/mol/base/tests/test_residue.cc | 28 +++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/modules/mol/base/src/chain_view.cc b/modules/mol/base/src/chain_view.cc index bb6562c9c..fac143b85 100644 --- a/modules/mol/base/src/chain_view.cc +++ b/modules/mol/base/src/chain_view.cc @@ -221,17 +221,21 @@ void ChainView::RemoveResidue(ResidueView view) { if (!view.IsValid()) return; view.RemoveAtoms(); - int index = view.GetIndex(); ResidueViewList::iterator i=data_->residues.begin(); for (; i!=data_->residues.end(); ++i) { - int res_index = (*i).GetIndex(); if (*i==view) { - data_->residues.erase(i); + break; } - else if(index < res_index){ + } + ResidueViewList::iterator to_del = i; + int index = view.GetIndex(); + for(; i!=data_->residues.end(); ++i) { + int res_index = (*i).GetIndex(); + if(index < res_index){ (*i).SetIndex(res_index-1); } } + data_->residues.erase(to_del); } ResidueView ChainView::AddResidue(const ResidueView& residue_view, diff --git a/modules/mol/base/tests/test_residue.cc b/modules/mol/base/tests/test_residue.cc index 5b5dea5eb..332d60edd 100644 --- a/modules/mol/base/tests/test_residue.cc +++ b/modules/mol/base/tests/test_residue.cc @@ -45,4 +45,30 @@ BOOST_AUTO_TEST_CASE(test_in_sequence) BOOST_CHECK(!InSequence(rA,rC)); } -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file +BOOST_AUTO_TEST_CASE(test_res_index) +{ + EntityHandle eh=CreateEntity(); + XCSEditor e=eh.RequestXCSEditor(); + ChainHandle ch1=e.InsertChain("A"); + ResidueHandle rA = e.AppendResidue(ch1, "A"); + ResidueHandle rB = e.AppendResidue(ch1, "B"); + ResidueHandle rC = e.AppendResidue(ch1, "C"); + EntityView v(eh); + ChainView cv1(v, ch1); + ResidueView rvA = cv1.AddResidue(rA); + ResidueView rvB = cv1.AddResidue(rB); + ResidueView rvC = cv1.AddResidue(rC); + BOOST_CHECK_EQUAL(rvA.GetIndex(),0); + BOOST_CHECK_EQUAL(rvA.GetIndex(),cv1.GetResidueIndex(rvA.GetNumber())); + BOOST_CHECK_EQUAL(rvB.GetIndex(),1); + BOOST_CHECK_EQUAL(rvB.GetIndex(),cv1.GetResidueIndex(rvB.GetNumber())); + BOOST_CHECK_EQUAL(rvC.GetIndex(),2); + BOOST_CHECK_EQUAL(rvC.GetIndex(),cv1.GetResidueIndex(rvC.GetNumber())); + cv1.RemoveResidue(rvB); + BOOST_CHECK_EQUAL(rvA.GetIndex(),0); + BOOST_CHECK_EQUAL(rvA.GetIndex(),cv1.GetResidueIndex(rvA.GetNumber())); + BOOST_CHECK_EQUAL(rvC.GetIndex(),1); + BOOST_CHECK_EQUAL(rvC.GetIndex(),cv1.GetResidueIndex(rvC.GetNumber())); +} + +BOOST_AUTO_TEST_SUITE_END() -- GitLab