Ignore:
Timestamp:
Oct 2, 2016, 1:49:57 PM (9 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Fix_FitPotential_needs_atomicnumbers
Children:
a13e21
Parents:
f6f761
git-author:
Frederik Heber <heber@…> (10/02/16 13:24:41)
git-committer:
Frederik Heber <heber@…> (10/02/16 13:49:57)
Message:

MPQCData additionally stores the atomic number per nuclei.

Location:
src/Fragmentation/Summation/SetValues/unittests
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.cpp

    rf6f761 r8d5db8  
    8181  pos[2] = 1.;
    8282  positions += pos;
     83  atomicnumbers += 1, 2, 3, 4;
    8384  charges += 1., 2., 3., 4.;
    8485  CPPUNIT_ASSERT_EQUAL( (size_t)3, pos.size() );
    8586  CPPUNIT_ASSERT( positions.size() == charges.size() );
    86 
    87   fragment = new Fragment(positions, charges);
     87  CPPUNIT_ASSERT( atomicnumbers.size() == charges.size() );
     88
     89  fragment = new Fragment(positions, atomicnumbers, charges);
    8890}
    8991
     
    110112}
    111113
     114static Fragment::nuclei_t createNucleiFromTriple(
     115    const Fragment::positions_t &_positions,
     116    const Fragment::atomicnumbers_t &_atomicnumbers,
     117    const Fragment::charges_t &_charges
     118    )
     119{
     120  Fragment::nuclei_t returnnuclei;
     121  Fragment::positions_t::const_iterator piter = _positions.begin();
     122  Fragment::atomicnumbers_t::const_iterator aiter = _atomicnumbers.begin();
     123  Fragment::charges_t::const_iterator citer = _charges.begin();
     124  for (;piter != _positions.end(); ++piter)
     125    returnnuclei.push_back( Fragment::createNucleus(*piter, *aiter, *citer) );
     126  return returnnuclei;
     127}
    112128
    113129/** UnitTest for containsNuclei()
     
    117133  {
    118134    // tests present ones for containment
    119     Fragment::nuclei_t validnuclei(positions.size());
    120     std::transform(positions.begin(), positions.end(),
    121         charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     135    Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    122136    BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    123137      CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
     
    129143    Fragment::nuclei_t invalidnuclei;
    130144    Fragment::position_t pos(3, -1.);
    131     invalidnuclei += Fragment::createNucleus(pos, 1.);
     145    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    132146    pos[0] = 0.;
    133     invalidnuclei += Fragment::createNucleus(pos, 1.);
     147    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    134148    pos[1] = 0.;
    135     invalidnuclei += Fragment::createNucleus(pos, 1.);
     149    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    136150    pos[2] = -std::numeric_limits<double>::epsilon()*1e+4;
    137     invalidnuclei += Fragment::createNucleus(pos, 1.);
     151    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    138152    BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    139153      CPPUNIT_ASSERT( !fragment->containsNuclei(nucleus) );
     
    149163    // tests present ones for removal
    150164    size_t size = fragment->nuclei.size();
    151     Fragment::nuclei_t validnuclei(positions.size());
    152     std::transform(positions.begin(), positions.end(),
    153         charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     165    Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    154166    BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    155167      CPPUNIT_ASSERT_NO_THROW( fragment->removeNuclei(nucleus) );
     
    161173    Fragment::nuclei_t invalidnuclei;
    162174    Fragment::position_t pos(3, -1.);
    163     invalidnuclei += Fragment::createNucleus(pos, 1.);
     175    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    164176    pos[0] = 0;
    165     invalidnuclei += Fragment::createNucleus(pos, 1.);
     177    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    166178    pos[1] = 0;
    167     invalidnuclei += Fragment::createNucleus(pos, 1.);
     179    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    168180    pos[2] = -std::numeric_limits<double>::epsilon()*1e+4;
    169     invalidnuclei += Fragment::createNucleus(pos, 1.);
     181    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    170182    BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    171183      CPPUNIT_ASSERT_NO_THROW( fragment->removeNuclei(nucleus) );
     
    178190void FragmentTest::equalityNucleus_Test()
    179191{
    180   Fragment::nuclei_t validnuclei(positions.size());
    181   std::transform(positions.begin(), positions.end(),
    182       charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     192  Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    183193  {
    184194    // create some nuclei
     
    191201    // create nucleus at other position
    192202    Fragment::position_t pos(3, 2.);
    193     Fragment::nucleus_t unequalposnucleus(pos, 1.);
     203    Fragment::nucleus_t unequalposnucleus( Fragment::createNucleus(pos, 1, 1.) );
    194204    BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    195205      CPPUNIT_ASSERT( nucleus != unequalposnucleus );
     
    200210    // create nucleus with different charge
    201211    Fragment::position_t pos(3, 1.);
    202     Fragment::nucleus_t unequalchargenucleus(pos, 5.);
     212    Fragment::nucleus_t unequalchargenucleus( Fragment::createNucleus(pos, 5, 5.) );
    203213    BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    204214      CPPUNIT_ASSERT( nucleus != unequalchargenucleus );
     
    219229  otherpos[1] = 0.;
    220230  otherpositions += otherpos;
     231  Fragment::atomicnumbers_t otheratomicnumbers;
     232  otheratomicnumbers += 1, 2, 3;
    221233  Fragment::charges_t othercharges;
    222234  othercharges += 1., 2., 3.;
    223   Fragment otherfragment(otherpositions, othercharges);
     235  Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    224236
    225237  CPPUNIT_ASSERT( !(*fragment == otherfragment) );
     
    253265  otherpos[1] = 0.;
    254266  otherpositions += otherpos;
     267  Fragment::atomicnumbers_t otheratomicnumbers;
     268  otheratomicnumbers += 1, 2, 3;
    255269  Fragment::charges_t othercharges;
    256270  othercharges += 1., 2., 3.;
    257   Fragment otherfragment(otherpositions, othercharges);
     271  Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    258272
    259273  // check for inequality
     
    282296    otherpos[1] = 0.;
    283297    otherpositions += otherpos;
     298    Fragment::atomicnumbers_t otheratomicnumbers;
     299    otheratomicnumbers += 1, 2, 3;
    284300    Fragment::charges_t othercharges;
    285301    othercharges += 1., 2., 3.;
    286     Fragment otherfragment(otherpositions, othercharges);
     302    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    287303    const size_t othersize = otherfragment.nuclei.size();
    288304    const size_t size = fragment->nuclei.size();
     
    292308    {
    293309      // tests all for containment
    294       Fragment::nuclei_t validnuclei(positions.size()+otherpositions.size());
    295       Fragment::nuclei_t::iterator iter =
    296           std::transform(positions.begin(), positions.end(),
    297           charges.begin(), validnuclei.begin(), Fragment::createNucleus);
    298       std::transform(otherpositions.begin(), otherpositions.end(),
    299           othercharges.begin(), iter, Fragment::createNucleus);
     310      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
     311      Fragment::nuclei_t othervalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
     312      validnuclei.insert(validnuclei.end(), othervalidnuclei.begin(), othervalidnuclei.end());
    300313      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    301314        CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
     
    304317    {
    305318      // tests positions for no containment in otherfragment
    306       Fragment::nuclei_t invalidnuclei(positions.size());
    307       std::transform(positions.begin(), positions.end(),
    308           charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     319      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    309320      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    310321        CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
     
    313324    {
    314325      // tests otherpositions for containment in otherfragment
    315       Fragment::nuclei_t validnuclei(otherpositions.size());
    316       std::transform(otherpositions.begin(), otherpositions.end(),
    317           othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
     326      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    318327      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    319328        CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
     
    336345    otherpos[1] = 2.;
    337346    otherpositions += otherpos;
     347    Fragment::atomicnumbers_t otheratomicnumbers;
     348    otheratomicnumbers += 1, 2, 3;
    338349    Fragment::charges_t othercharges;
    339350    othercharges += 1., 2., 3.;
    340     Fragment otherfragment(otherpositions, othercharges);
     351    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    341352    const size_t othersize = otherfragment.nuclei.size();
    342353    const size_t size = fragment->nuclei.size();
     
    346357    {
    347358      // tests all for containment
    348       Fragment::nuclei_t validnuclei(positions.size()+otherpositions.size());
    349       Fragment::nuclei_t::iterator iter =
    350           std::transform(positions.begin(), positions.end(),
    351           charges.begin(), validnuclei.begin(), Fragment::createNucleus);
    352       std::transform(otherpositions.begin(), otherpositions.end(),
    353           othercharges.begin(), iter, Fragment::createNucleus);
     359      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
     360      Fragment::nuclei_t othervalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
     361      validnuclei.insert(validnuclei.end(), othervalidnuclei.begin(), othervalidnuclei.end());
    354362      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    355363        CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
     
    358366    {
    359367      // tests positions for no containment in otherfragment (but last)
    360       Fragment::nuclei_t invalidnuclei(positions.size()-1);
    361       std::transform(positions.begin(), --positions.end(),
    362           charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     368      Fragment::positions_t lesspositions(positions.begin(), --positions.end());
     369      Fragment::atomicnumbers_t lessatomicnumbers(atomicnumbers.begin(), --atomicnumbers.end());
     370      Fragment::charges_t lesscharges(charges.begin(), --charges.end());
     371      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(lesspositions, lessatomicnumbers, lesscharges) );
    363372      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    364373        CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
     
    367376    {
    368377      // tests otherpositions for containment in otherfragment
    369       Fragment::nuclei_t validnuclei(otherpositions.size());
    370       std::transform(otherpositions.begin(), otherpositions.end(),
    371           othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
     378      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    372379      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    373380        CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
     
    390397    otherpos[1] = 0.;
    391398    otherpositions += otherpos;
     399    Fragment::atomicnumbers_t otheratomicnumbers;
     400    otheratomicnumbers += 1, 2, 3;
    392401    Fragment::charges_t othercharges;
    393402    othercharges += 1., 2., 3.;
    394     Fragment otherfragment(otherpositions, othercharges);
     403    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    395404    const size_t othersize = otherfragment.nuclei.size();
    396405    const size_t size = fragment->nuclei.size();
     
    400409    {
    401410      // tests positions for containment
    402       Fragment::nuclei_t validnuclei(positions.size());
    403       std::transform(positions.begin(), positions.end(),
    404           charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     411      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    405412      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    406413        CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
     
    409416    {
    410417      // tests otherpositions for no containment
    411       Fragment::nuclei_t invalidnuclei(otherpositions.size());
    412       std::transform(otherpositions.begin(), otherpositions.end(),
    413           othercharges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     418      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    414419      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    415420        CPPUNIT_ASSERT( !fragment->containsNuclei(nucleus) );
     
    418423    {
    419424      // tests positions for no containment in otherfragment
    420       Fragment::nuclei_t invalidnuclei(positions.size());
    421       std::transform(positions.begin(), positions.end(),
    422           charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     425      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    423426      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    424427        CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
     
    427430    {
    428431      // tests otherpositions for containment in otherfragment
    429       Fragment::nuclei_t validnuclei(otherpositions.size());
    430       std::transform(otherpositions.begin(), otherpositions.end(),
    431           othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
     432      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    432433      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    433434        CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
     
    450451    otherpos[1] = 2.;
    451452    otherpositions += otherpos;
     453    Fragment::atomicnumbers_t otheratomicnumbers;
     454    otheratomicnumbers += 1, 2, 3;
    452455    Fragment::charges_t othercharges;
    453456    othercharges += 1., 2., 3.;
    454     Fragment otherfragment(otherpositions, othercharges);
     457    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    455458    const size_t othersize = otherfragment.nuclei.size();
    456459    const size_t size = fragment->nuclei.size();
     
    461464    {
    462465      // tests all but last for containment
    463       Fragment::nuclei_t validnuclei(positions.size());
    464       std::transform(positions.begin(), positions.end(),
    465           charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     466      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    466467      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    467468        if (Fragment::isPositionEqual(nucleus.first, otherpositions[0])) // only test position
     
    473474    {
    474475      // tests positions for no containment in otherfragment
    475       Fragment::nuclei_t invalidnuclei(positions.size()-1);
    476       std::transform(positions.begin(), --positions.end(),
    477           charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     476      Fragment::positions_t lesspositions(positions.begin(), --positions.end());
     477      Fragment::atomicnumbers_t lessatomicnumbers(atomicnumbers.begin(), --atomicnumbers.end());
     478      Fragment::charges_t lesscharges(charges.begin(), --charges.end());
     479      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(lesspositions, lessatomicnumbers, lesscharges) );
    478480      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    479481        CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
     
    482484    {
    483485      // tests otherpositions for containment in otherfragment
    484       Fragment::nuclei_t validnuclei(otherpositions.size());
    485       std::transform(otherpositions.begin(), otherpositions.end(),
    486           othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
     486      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    487487      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    488488        CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
  • src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.hpp

    rf6f761 r8d5db8  
    5555      Fragment *fragment;
    5656      Fragment::positions_t positions;
     57      Fragment::atomicnumbers_t atomicnumbers;
    5758      Fragment::charges_t charges;
    5859};
Note: See TracChangeset for help on using the changeset viewer.