/* * Project: MoleCuilder * Description: creates and alters molecular systems * Copyright (C) 2010-2012 University of Bonn. All rights reserved. * * * This file is part of MoleCuilder. * * MoleCuilder is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * MoleCuilder is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MoleCuilder. If not, see . */ /* * MoleculeDescriptorTest.cpp * * Created on: Mar 4, 2010 * Author: crueger */ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include "World.hpp" #include "molecule.hpp" #include "MoleculeDescriptorUnitTest.hpp" #ifdef HAVE_TESTRUNNER #include "UnitTestMain.hpp" #endif /*HAVE_TESTRUNNER*/ /********************************************** Test classes **************************************/ // Registers the fixture into the 'registry' CPPUNIT_TEST_SUITE_REGISTRATION( MoleculeDescriptorTest ); // set up and tear down void MoleculeDescriptorTest::setUp(){ World::getInstance(); for(int i=0;igetId(); } } void MoleculeDescriptorTest::tearDown(){ World::purgeInstance(); } // some helper functions static bool hasAllMolecules( std::vector &molecules, moleculeId_t ids[MOLECULE_COUNT], std::set excluded = std::set()) { for(int i=0;i::const_iterator iter; bool res=false; for(iter=molecules.begin();iter!=molecules.end();++iter){ res |= (*iter)->getId() == id; } if(!res) { cout << "Molecule " << id << " missing in returned list" << endl; return false; } } } return true; } static bool hasNoDuplicateMolecules(std::vector &molecules){ std::set found; std::vector::const_iterator iter; for(iter=molecules.begin();iter!=molecules.end();++iter){ int id = (*iter)->getId(); if(found.count(id)) return false; found.insert(id); } return true; } void MoleculeDescriptorTest::MoleculeBaseSetsTest(){ std::vector allMolecules = const_cast(World::getInstance()).getAllMolecules(AllMolecules()); CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(allMolecules,moleculeIds)); CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(allMolecules)); std::vector noMolecules = const_cast(World::getInstance()).getAllMolecules(NoMolecules()); CPPUNIT_ASSERT_EQUAL( true , noMolecules.empty()); } void MoleculeDescriptorTest::MoleculeIdTest(){ // test Molecules from boundaries and middle of the set const molecule* testMolecule; testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeById(moleculeIds[0])); CPPUNIT_ASSERT(testMolecule); CPPUNIT_ASSERT_EQUAL( moleculeIds[0], testMolecule->getId()); testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeById(moleculeIds[MOLECULE_COUNT/2])); CPPUNIT_ASSERT(testMolecule); CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT/2], testMolecule->getId()); testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeById(moleculeIds[MOLECULE_COUNT-1])); CPPUNIT_ASSERT(testMolecule); CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT-1], testMolecule->getId()); // find some ID that has not been created moleculeId_t outsideId=0; bool res = false; for(outsideId=0;!res;++outsideId) { res = true; for(int i = 0; i < MOLECULE_COUNT; ++i){ res &= moleculeIds[i]!=outsideId; } } // test from outside of set testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeById(outsideId)); CPPUNIT_ASSERT(!testMolecule); } void MoleculeDescriptorTest::MoleculeCalcTest(){ // test some elementary set operations { std::vector testMolecules = const_cast(World::getInstance()).getAllMolecules(AllMolecules()||NoMolecules()); CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds)); CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules)); } { std::vector testMolecules = const_cast(World::getInstance()).getAllMolecules(NoMolecules()||AllMolecules()); CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds)); CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules)); } { std::vector testMolecules = const_cast(World::getInstance()).getAllMolecules(NoMolecules()&&AllMolecules()); CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty()); } { std::vector testMolecules = const_cast(World::getInstance()).getAllMolecules(AllMolecules()&&NoMolecules()); CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty()); } { std::vector testMolecules = const_cast(World::getInstance()).getAllMolecules(!AllMolecules()); CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty()); } { std::vector testMolecules = const_cast(World::getInstance()).getAllMolecules(!NoMolecules()); CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds)); CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules)); } // exclude and include some molecules { std::vector testMolecules = const_cast(World::getInstance()).getAllMolecules(AllMolecules()&&(!MoleculeById(moleculeIds[MOLECULE_COUNT/2]))); std::set excluded; excluded.insert(moleculeIds[MOLECULE_COUNT/2]); CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds,excluded)); CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules)); CPPUNIT_ASSERT_EQUAL( (size_t)(MOLECULE_COUNT-1), testMolecules.size()); } { std::vector testMolecules = const_cast(World::getInstance()).getAllMolecules(NoMolecules()||(MoleculeById(moleculeIds[MOLECULE_COUNT/2]))); CPPUNIT_ASSERT_EQUAL( (size_t)1, testMolecules.size()); CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT/2], testMolecules[0]->getId()); } } void MoleculeDescriptorTest::MoleculeNameTest() { const molecule* testMolecule; // name each molecule for(int i=1;i<=MOLECULE_COUNT;++i) molecules[i-1]->setName(toString(i)); // retrieve each for(int i=1;i<=MOLECULE_COUNT;++i) { testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeByName(toString(i))); CPPUNIT_ASSERT_EQUAL( moleculeIds[i-1], testMolecule->getId()); } // check for non-present name testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeByName("not present")); CPPUNIT_ASSERT(!testMolecule); } void MoleculeDescriptorTest::MoleculeOrderTest() { const molecule* testMolecule; // test in normal order: 1, 2, ... for(int i=1;i<=MOLECULE_COUNT;++i){ testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeByOrder(i)); CPPUNIT_ASSERT_EQUAL( moleculeIds[i-1], testMolecule->getId()); } // test in reverse order: -1, -2, ... for(int i=1; i<= MOLECULE_COUNT;++i){ testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeByOrder(-i)); CPPUNIT_ASSERT_EQUAL( moleculeIds[(int)MOLECULE_COUNT-i], testMolecule->getId()); } // test from outside of set testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeByOrder(MOLECULE_COUNT+1)); CPPUNIT_ASSERT(!testMolecule); testMolecule = const_cast(World::getInstance()). getMolecule(MoleculeByOrder(-MOLECULE_COUNT-1)); CPPUNIT_ASSERT(!testMolecule); }