source: src/Fragmentation/Summation/SetValues/unittests/IndexedVectorsUnitTest.cpp@ bd8b57

Add_FitFragmentPartialChargesAction Fix_ChargeSampling_PBC Fix_FitPartialCharges
Last change on this file since bd8b57 was bd8b57, checked in by Frederik Heber <heber@…>, 9 years ago

Extracted IndexedValue from IndexedVectors.

  • we may now sum up indexed values of arbitrary type, i.e. an arbitrary class that fulfills a certain interface, and each instance connected to a specific index (within index sets).
  • added detail::force where std::vector<double> is specialized for three components.
  • IndexedVectors is now a specialization of IndexedValue for detail::force.
  • adapated usage signatures in AnalyseFragmentationResultsAction, InterfaceVMGJob, and MPQCCommandJob.
  • slight changes in IndexedVectorsUnitTest because boost::assign is no longer used for detail::force.
  • Property mode set to 100644
File size: 6.6 KB
RevLine 
[7d92f1]1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2012 University of Bonn. All rights reserved.
[5aaa43]5 * Copyright (C) 2013 Frederik Heber. All rights reserved.
[7d92f1]6 *
7 *
8 * This file is part of MoleCuilder.
9 *
10 * MoleCuilder is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * MoleCuilder is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with MoleCuilder. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24/*
25 * IndexedVectorsUnitTest.cpp
26 *
27 * Created on: Jul 29, 2012
28 * Author: heber
29 */
30
31// include config.h
32#ifdef HAVE_CONFIG_H
33#include <config.h>
34#endif
35
36using namespace std;
37
38#include <cppunit/CompilerOutputter.h>
39#include <cppunit/extensions/TestFactoryRegistry.h>
40#include <cppunit/ui/text/TestRunner.h>
41
42#include "IndexedVectorsUnitTest.hpp"
43
44#include <cmath>
45#include <limits>
46
47#include <boost/assign.hpp>
48
49#include "CodePatterns/Assert.hpp"
50
51#ifdef HAVE_TESTRUNNER
52#include "UnitTestMain.hpp"
53#endif /*HAVE_TESTRUNNER*/
54
55using namespace boost::assign;
56
57/********************************************** Test classes **************************************/
58
59// Registers the fixture into the 'registry'
60CPPUNIT_TEST_SUITE_REGISTRATION( IndexedVectorsTest );
61
62
63void IndexedVectorsTest::setUp()
64{
65 // failing asserts should be thrown
66 ASSERT_DO(Assert::Throw);
67
68 // create two vector_t
[bd8b57]69 ones(1.,1.,1.);
70 twos(2.,2.,2.);
71 threes(3.,3.,3.);
72 CPPUNIT_ASSERT_EQUAL( IndexedVectors::value_t::FixedSize, ones.size() );
73 CPPUNIT_ASSERT_EQUAL( IndexedVectors::value_t::FixedSize, twos.size() );
74 CPPUNIT_ASSERT_EQUAL( IndexedVectors::value_t::FixedSize, threes.size() );
75
76 // create values
77
78 IndexedVectors::values_t values;
79 values.push_back(ones);
80 values.push_back(twos);
81 IndexedVectors::values_t othervalues;
82 othervalues.push_back(threes);
83 othervalues.push_back(threes);
[7d92f1]84
85 // create two indices
86 IndexedVectors::indices_t indices;
87 indices += 1,2;
88 IndexedVectors::indices_t otherindices;
89 otherindices += 1,3;
90
[bd8b57]91 // create indexed values
92 ivectors = new IndexedVectors(indices, values);
93 otherivectors = new IndexedVectors(otherindices, othervalues);
[7d92f1]94}
95
96
97void IndexedVectorsTest::tearDown()
98{
99 delete ivectors;
100 delete otherivectors;
101}
102
[bd8b57]103static void checkValueInIndexedVectors(
104 const IndexedVectors &_vectors,
105 const IndexedVectors::index_t &_index,
106 const IndexedVectors::value_t &_compareto
107 )
108{
109 const IndexedVectors::indexedvalues_t &indexedvalues = _vectors.getValues();
110 IndexedVectors::indexedvalues_t::const_iterator iter = indexedvalues.find(_index);
111 CPPUNIT_ASSERT( iter != indexedvalues.end() );
112 CPPUNIT_ASSERT( _compareto == iter->second );
113}
[a67a04]114
115/** UnitTest for cstor's
116 */
117void IndexedVectorsTest::Constructor_Test()
118{
119 // check whether -1 is dropped
120 IndexedVectors::indices_t indices;
121 indices += 1,-1,3;
[bd8b57]122 IndexedVectors::values_t values;
123 values.push_back(ones);
124 values.push_back(twos);
125 values.push_back(threes);
126 IndexedVectors testivectors(indices, values);
127
128 CPPUNIT_ASSERT_EQUAL( (size_t)2, testivectors.getValues().size() );
129 checkValueInIndexedVectors(testivectors, 1, ones);
130 checkValueInIndexedVectors(testivectors, 3, threes);
131 CPPUNIT_ASSERT( testivectors.getValues().find(-1) == testivectors.getValues().end() );
[a67a04]132}
133
[7d92f1]134/** UnitTest for operator+=()
135 */
136void IndexedVectorsTest::operatorPlusEqual_Test()
137{
138 // safeguard initial sizes
[bd8b57]139 CPPUNIT_ASSERT_EQUAL( (size_t)2, ivectors->getValues().size() );
140 CPPUNIT_ASSERT_EQUAL( (size_t)2, otherivectors->getValues().size() );
[7d92f1]141
142 // perform operation
143 *ivectors += *otherivectors;
144
145 // check new and ole sizes
[bd8b57]146 CPPUNIT_ASSERT_EQUAL( (size_t)3, ivectors->getValues().size() );
147 CPPUNIT_ASSERT_EQUAL( (size_t)2, otherivectors->getValues().size() );
[7d92f1]148
149 // then check result
[bd8b57]150 IndexedVectors::value_t result;
151 CPPUNIT_ASSERT_EQUAL( IndexedVectors::value_t::FixedSize, result.size() );
152 for (size_t i=0; i<IndexedVectors::value_t::FixedSize; ++i)
[7d92f1]153 result[i] = ones[i] + threes[i];
[bd8b57]154 for (IndexedVectors::indexedvalues_t::const_iterator iter = ivectors->getValues().begin();
155 iter != ivectors->getValues().end(); ++iter) {
156 CPPUNIT_ASSERT_EQUAL( IndexedVectors::value_t::FixedSize, iter->second.size() );
[7d92f1]157 }
[bd8b57]158 checkValueInIndexedVectors(*ivectors, 1, result);
159 checkValueInIndexedVectors(*ivectors, 2, twos);
160 checkValueInIndexedVectors(*ivectors, 3, threes);
[7d92f1]161}
162
163/** UnitTest for operator-=()
164 */
165void IndexedVectorsTest::operatorMinusEqual_Test()
166{
167 // safeguard initial sizes
[bd8b57]168 CPPUNIT_ASSERT_EQUAL( (size_t)2, ivectors->getValues().size() );
169 CPPUNIT_ASSERT_EQUAL( (size_t)2, otherivectors->getValues().size() );
[7d92f1]170
171 // perform operation
172 *ivectors -= *otherivectors;
173
174 // check new and ole sizes
[bd8b57]175 CPPUNIT_ASSERT_EQUAL( (size_t)3, ivectors->getValues().size() );
176 CPPUNIT_ASSERT_EQUAL( (size_t)2, otherivectors->getValues().size() );
[7d92f1]177
178 // then check result
[bd8b57]179 IndexedVectors::value_t result;
180 IndexedVectors::value_t thirdresult;
181 CPPUNIT_ASSERT_EQUAL( IndexedVectors::value_t::FixedSize, result.size() );
182 for (size_t i=0; i<IndexedVectors::value_t::FixedSize; ++i) {
[7d92f1]183 result[i] = ones[i] - threes[i];
184 thirdresult[i] = -threes[i];
185 }
[bd8b57]186 for (IndexedVectors::indexedvalues_t::const_iterator iter = ivectors->getValues().begin();
187 iter != ivectors->getValues().end(); ++iter) {
188 CPPUNIT_ASSERT_EQUAL( IndexedVectors::value_t::FixedSize, iter->second.size() );
[7d92f1]189 }
[bd8b57]190 checkValueInIndexedVectors(*ivectors, 1, result);
191 checkValueInIndexedVectors(*ivectors, 2, twos);
192 checkValueInIndexedVectors(*ivectors, 3, thirdresult);
[7d92f1]193}
194
[955051]195
196/** UnitTest for operator==()
197 */
198void IndexedVectorsTest::equality_Test()
199{
200 CPPUNIT_ASSERT( !(*ivectors == *otherivectors) );
201 CPPUNIT_ASSERT( *ivectors != *otherivectors );
202
203 // test against empty ivectors
204 IndexedVectors emptyivectors;
205 CPPUNIT_ASSERT( !(*ivectors == emptyivectors) );
206 CPPUNIT_ASSERT( *ivectors != emptyivectors );
207
208 // tests against themselves
209 CPPUNIT_ASSERT( *ivectors == *ivectors );
210 CPPUNIT_ASSERT( *otherivectors == *otherivectors );
211 CPPUNIT_ASSERT( emptyivectors == emptyivectors );
212
213 // check against ZeroInstance
214 CPPUNIT_ASSERT( *ivectors != ZeroInstance<IndexedVectors>() );
215 CPPUNIT_ASSERT( *otherivectors != ZeroInstance<IndexedVectors>() );
216}
Note: See TracBrowser for help on using the repository browser.