/*
* 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 .
*/
/*
* BoxUnitTest.cpp
*
* Created on: Jul 30, 2010
* Author: crueger
*/
// include config.h
#ifdef HAVE_CONFIG_H
#include
#endif
#include
#include
#include
#include "LinearAlgebra/Vector.hpp"
#include "LinearAlgebra/RealSpaceMatrix.hpp"
#include "Box.hpp"
#include "CodePatterns/Assert.hpp"
#include "BoxUnitTest.hpp"
#include "stubs/ObserverStub.hpp"
#ifdef HAVE_TESTRUNNER
#include "UnitTestMain.hpp"
#endif /*HAVE_TESTRUNNER*/
/********************************************** Test classes **************************************/
// Registers the fixture into the 'registry'
CPPUNIT_TEST_SUITE_REGISTRATION( BoxUnittest );
void BoxUnittest::setUp(){
// failing asserts should be thrown
ASSERT_DO(Assert::Throw);
unit = new RealSpaceMatrix;
unit->setIdentity();
zero = new RealSpaceMatrix;
invertible = new RealSpaceMatrix;
invertible->diagonal() = Vector(1,2,3);
uninvertible = new RealSpaceMatrix;
uninvertible->column(0) = Vector(1,0,1);
uninvertible->column(2) = Vector(1,0,1);
RealSpaceMatrix boxMat;
unitBox = new Box;
stretchedBox1 = new Box;
boxMat.setIdentity();
boxMat.diagonal() = Vector(1,2,3);
stretchedBox1->setM(boxMat);
stretchedBox2 = new Box;
boxMat.setIdentity();
boxMat.diagonal() = Vector(2,3,1);
stretchedBox2->setM(boxMat);
stretchedBox3 = new Box;
boxMat.setIdentity();
boxMat.diagonal() = Vector(3,1,2);
stretchedBox3->setM(boxMat);
stretchedBox4 = new Box;
boxMat.setIdentity();
boxMat.diagonal() = Vector(2,2,2);
stretchedBox4->setM(boxMat);
tiltedBox1 = new Box;
boxMat.setIdentity();
boxMat.column(0) = Vector(1,0,1);
tiltedBox1->setM(boxMat);
tiltedBox2 = new Box;
boxMat.setIdentity();
boxMat.column(0) = Vector(1,1,1);
tiltedBox2->setM(boxMat);
tiltedBox3 = new Box;
boxMat.setIdentity();
boxMat.column(1) = Vector(0,1,1);
tiltedBox3->setM(boxMat);
tiltedBox4 = new Box;
boxMat.setIdentity();
boxMat.column(0) = Vector(1,1,1);
boxMat.column(1) = Vector(0,1,1);
tiltedBox4->setM(boxMat);
}
void BoxUnittest::tearDown(){
delete unit;
delete zero;
delete invertible;
delete uninvertible;
delete unitBox;
delete stretchedBox1;
delete stretchedBox2;
delete stretchedBox3;
delete stretchedBox4;
delete tiltedBox1;
delete tiltedBox2;
delete tiltedBox3;
delete tiltedBox4;
}
void BoxUnittest::setBoxTest(){
Box testBox;
CPPUNIT_ASSERT_NO_THROW(testBox.setM(*unit));
CPPUNIT_ASSERT_NO_THROW(testBox = *unit);
CPPUNIT_ASSERT_NO_THROW(testBox.setM(*invertible));
CPPUNIT_ASSERT_NO_THROW(testBox = *invertible);
#ifndef NDEBUG
CPPUNIT_ASSERT_THROW(testBox.setM(*zero),Assert::AssertionFailure);
CPPUNIT_ASSERT_THROW(testBox = *zero,Assert::AssertionFailure);
CPPUNIT_ASSERT_THROW(testBox.setM(*uninvertible),Assert::AssertionFailure);
CPPUNIT_ASSERT_THROW(testBox = *uninvertible,Assert::AssertionFailure);
#endif
}
void BoxUnittest::translateInOutTest(){
Vector testVector;
{
testVector=Vector(0,0,0);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(0.5,0.5,0.5);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(1,1,1);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(2,1,1);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(1,2,1);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(1,1,2);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(3,1,1);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(1,3,1);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(1,1,3);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
{
testVector=Vector(2,2,2);
CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
}
}
void BoxUnittest::isInsideTest(){
Vector testVector(0,0,0);
CPPUNIT_ASSERT( unitBox->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
testVector = Vector(0.5,0.5,0.5);
CPPUNIT_ASSERT( unitBox->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
testVector = Vector(1,1,1);
CPPUNIT_ASSERT( unitBox->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
testVector = Vector(2,1,1);
CPPUNIT_ASSERT(!unitBox->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
testVector = Vector(1,2,1);
CPPUNIT_ASSERT(!unitBox->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
testVector = Vector(1,1,2);
CPPUNIT_ASSERT(!unitBox->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
testVector = Vector(3,1,1);
CPPUNIT_ASSERT(!unitBox->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
testVector = Vector(1,3,1);
CPPUNIT_ASSERT(!unitBox->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
testVector = Vector(1,1,3);
CPPUNIT_ASSERT(!unitBox->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
testVector = Vector(2,2,2);
CPPUNIT_ASSERT(!unitBox->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
testVector = Vector(3,3,3);
CPPUNIT_ASSERT(!unitBox->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
}
bool testWrapExplode(VECTORSET(std::vector) &set,Vector &point, Box* box){
bool res = true;
Vector wrappedPoint = box->enforceBoundaryConditions(point);
for(std::vector::iterator iter = set.begin(); iter!=set.end();++iter){
Vector wrapped = box->enforceBoundaryConditions(*iter);
bool equals = (wrapped == wrappedPoint);
res = res && equals;
if(!equals){
std::cout << "Wrapped vector " << wrapped << " produced from vector " << (*iter)
<< " does not match target " << wrappedPoint << std::endl;
}
}
return res;
}
void BoxUnittest::WrapExplodeTest(){
Vector testVector(0,0,0);
VECTORSET(std::vector) res;
// we only can explode those vectors that are actually inside the box
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(1,1,1);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(2,1,1);
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
}
{
testVector = Vector(1,2,1);
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
}
{
testVector = Vector(1,1,2);
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(3,1,1);
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
}
{
testVector = Vector(1,3,1);
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
}
{
testVector = Vector(1,1,3);
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
}
{
testVector = Vector(2,2,2);
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
}
// Higher level explosions
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(1,1,1);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(2,1,1);
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
}
{
testVector = Vector(1,2,1);
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
}
{
testVector = Vector(1,1,2);
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(3,1,1);
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
}
{
testVector = Vector(1,3,1);
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
}
{
testVector = Vector(1,1,3);
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
}
{
testVector = Vector(2,2,2);
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
}
// one more set of higher level explosions
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(1,1,1);
res = unitBox->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(2,1,1);
res = stretchedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
}
{
testVector = Vector(1,2,1);
res = stretchedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
}
{
testVector = Vector(1,1,2);
res = stretchedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(3,1,1);
res = stretchedBox3->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
}
{
testVector = Vector(1,3,1);
res = stretchedBox2->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
}
{
testVector = Vector(1,1,3);
res = stretchedBox1->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
}
{
testVector = Vector(2,2,2);
res = stretchedBox4->explode(testVector,3);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
}
}
void BoxUnittest::BoundaryBounceTest(){
Vector testVector(0,0,0);
VECTORSET(std::vector) res;
unitBox->setCondition(0,BoundaryConditions::Bounce);
stretchedBox1->setCondition(0,BoundaryConditions::Bounce);
stretchedBox2->setCondition(0,BoundaryConditions::Bounce);
stretchedBox3->setCondition(0,BoundaryConditions::Bounce);
stretchedBox4->setCondition(0,BoundaryConditions::Bounce);
tiltedBox1->setCondition(0,BoundaryConditions::Bounce);
tiltedBox2->setCondition(0,BoundaryConditions::Bounce);
tiltedBox3->setCondition(0,BoundaryConditions::Bounce);
tiltedBox4->setCondition(0,BoundaryConditions::Bounce);
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
unitBox->setCondition(1,BoundaryConditions::Bounce);
stretchedBox1->setCondition(1,BoundaryConditions::Bounce);
stretchedBox2->setCondition(1,BoundaryConditions::Bounce);
stretchedBox3->setCondition(1,BoundaryConditions::Bounce);
stretchedBox4->setCondition(1,BoundaryConditions::Bounce);
tiltedBox1->setCondition(1,BoundaryConditions::Bounce);
tiltedBox2->setCondition(1,BoundaryConditions::Bounce);
tiltedBox3->setCondition(1,BoundaryConditions::Bounce);
tiltedBox4->setCondition(1,BoundaryConditions::Bounce);
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
unitBox->setCondition(2,BoundaryConditions::Bounce);
stretchedBox1->setCondition(2,BoundaryConditions::Bounce);
stretchedBox2->setCondition(2,BoundaryConditions::Bounce);
stretchedBox3->setCondition(2,BoundaryConditions::Bounce);
stretchedBox4->setCondition(2,BoundaryConditions::Bounce);
tiltedBox1->setCondition(2,BoundaryConditions::Bounce);
tiltedBox2->setCondition(2,BoundaryConditions::Bounce);
tiltedBox3->setCondition(2,BoundaryConditions::Bounce);
tiltedBox4->setCondition(2,BoundaryConditions::Bounce);
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
}
void BoxUnittest::BoundaryIgnoreTest(){
Vector testVector(0,0,0);
VECTORSET(std::vector) res;
unitBox->setCondition(0,BoundaryConditions::Ignore);
stretchedBox1->setCondition(0,BoundaryConditions::Ignore);
stretchedBox2->setCondition(0,BoundaryConditions::Ignore);
stretchedBox3->setCondition(0,BoundaryConditions::Ignore);
stretchedBox4->setCondition(0,BoundaryConditions::Ignore);
tiltedBox1->setCondition(0,BoundaryConditions::Ignore);
tiltedBox2->setCondition(0,BoundaryConditions::Ignore);
tiltedBox3->setCondition(0,BoundaryConditions::Ignore);
tiltedBox4->setCondition(0,BoundaryConditions::Ignore);
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
unitBox->setCondition(1,BoundaryConditions::Ignore);
stretchedBox1->setCondition(1,BoundaryConditions::Ignore);
stretchedBox2->setCondition(1,BoundaryConditions::Ignore);
stretchedBox3->setCondition(1,BoundaryConditions::Ignore);
stretchedBox4->setCondition(1,BoundaryConditions::Ignore);
tiltedBox1->setCondition(1,BoundaryConditions::Ignore);
tiltedBox2->setCondition(1,BoundaryConditions::Ignore);
tiltedBox3->setCondition(1,BoundaryConditions::Ignore);
tiltedBox4->setCondition(1,BoundaryConditions::Ignore);
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
unitBox->setCondition(2,BoundaryConditions::Ignore);
stretchedBox1->setCondition(2,BoundaryConditions::Ignore);
stretchedBox2->setCondition(2,BoundaryConditions::Ignore);
stretchedBox3->setCondition(2,BoundaryConditions::Ignore);
stretchedBox4->setCondition(2,BoundaryConditions::Ignore);
tiltedBox1->setCondition(2,BoundaryConditions::Ignore);
tiltedBox2->setCondition(2,BoundaryConditions::Ignore);
tiltedBox3->setCondition(2,BoundaryConditions::Ignore);
tiltedBox4->setCondition(2,BoundaryConditions::Ignore);
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
}
void BoxUnittest::BoundaryMixedTest(){
Vector testVector(0,0,0);
VECTORSET(std::vector) res;
unitBox->setCondition(0,BoundaryConditions::Bounce);
unitBox->setCondition(1,BoundaryConditions::Ignore);
unitBox->setCondition(2,BoundaryConditions::Wrap);
stretchedBox1->setCondition(0,BoundaryConditions::Bounce);
stretchedBox1->setCondition(1,BoundaryConditions::Ignore);
stretchedBox1->setCondition(2,BoundaryConditions::Wrap);
stretchedBox2->setCondition(0,BoundaryConditions::Bounce);
stretchedBox2->setCondition(1,BoundaryConditions::Ignore);
stretchedBox2->setCondition(2,BoundaryConditions::Wrap);
stretchedBox3->setCondition(0,BoundaryConditions::Bounce);
stretchedBox3->setCondition(1,BoundaryConditions::Ignore);
stretchedBox3->setCondition(2,BoundaryConditions::Wrap);
stretchedBox4->setCondition(0,BoundaryConditions::Bounce);
stretchedBox4->setCondition(1,BoundaryConditions::Ignore);
stretchedBox4->setCondition(2,BoundaryConditions::Wrap);
tiltedBox1->setCondition(0,BoundaryConditions::Bounce);
tiltedBox1->setCondition(1,BoundaryConditions::Ignore);
tiltedBox1->setCondition(2,BoundaryConditions::Wrap);
tiltedBox2->setCondition(0,BoundaryConditions::Bounce);
tiltedBox2->setCondition(1,BoundaryConditions::Ignore);
tiltedBox2->setCondition(2,BoundaryConditions::Wrap);
tiltedBox3->setCondition(0,BoundaryConditions::Bounce);
tiltedBox3->setCondition(1,BoundaryConditions::Ignore);
tiltedBox3->setCondition(2,BoundaryConditions::Wrap);
tiltedBox4->setCondition(0,BoundaryConditions::Bounce);
tiltedBox4->setCondition(1,BoundaryConditions::Ignore);
tiltedBox4->setCondition(2,BoundaryConditions::Wrap);
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,1);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0,0,0);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
{
testVector = Vector(0.5,0.5,0.5);
res = unitBox->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
res = stretchedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
res = stretchedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
res = stretchedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
res = stretchedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
res = tiltedBox1->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
res = tiltedBox2->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
res = tiltedBox3->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
res = tiltedBox4->explode(testVector,2);
CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
}
}
/** Unit test on whether observer is working.
*
*/
void BoxUnittest::ObserverTest()
{
// create some observers
UpdateCountObserver *observer_general = new UpdateCountObserver();
NotificationObserver *observer_matrix = new NotificationObserver(
stretchedBox1->getChannel(Box::MatrixChanged));
NotificationObserver *observer_bc = new NotificationObserver(
stretchedBox1->getChannel(Box::BoundaryConditionsChanged));
CPPUNIT_ASSERT_EQUAL((int)0, observer_general->updates);
CPPUNIT_ASSERT_EQUAL(false, observer_matrix->wasNotified);
CPPUNIT_ASSERT_EQUAL(false, observer_bc->wasNotified);
stretchedBox1->signOn(observer_general);
stretchedBox1->signOn(observer_matrix, Box::MatrixChanged);
stretchedBox1->signOn(observer_bc, Box::BoundaryConditionsChanged);
// create update MatrixChanged
stretchedBox1->setM(*unit);
CPPUNIT_ASSERT_EQUAL((int)1, observer_general->updates);
CPPUNIT_ASSERT_EQUAL(true, observer_matrix->wasNotified);
CPPUNIT_ASSERT_EQUAL(false, observer_bc->wasNotified);
observer_matrix->wasNotified = false;
// same matrix does not notify but update
stretchedBox1->setM(*unit);
CPPUNIT_ASSERT_EQUAL((int)2, observer_general->updates);
CPPUNIT_ASSERT_EQUAL(false, observer_matrix->wasNotified);
CPPUNIT_ASSERT_EQUAL(false, observer_bc->wasNotified);
// create update BoundaryConditionsChanged
stretchedBox1->setCondition(0, BoundaryConditions::Bounce);
CPPUNIT_ASSERT_EQUAL((int)3, observer_general->updates);
CPPUNIT_ASSERT_EQUAL(false, observer_matrix->wasNotified);
CPPUNIT_ASSERT_EQUAL(true, observer_bc->wasNotified);
observer_bc->wasNotified = false;
// set same conditions does not notify but update
stretchedBox1->setCondition(0, BoundaryConditions::Bounce);
CPPUNIT_ASSERT_EQUAL((int)4, observer_general->updates);
CPPUNIT_ASSERT_EQUAL(false, observer_matrix->wasNotified);
CPPUNIT_ASSERT_EQUAL(false, observer_bc->wasNotified);
// remove observers again
stretchedBox1->signOff(observer_general);
stretchedBox1->signOff(observer_matrix, Box::MatrixChanged);
stretchedBox1->signOff(observer_bc, Box::BoundaryConditionsChanged);
delete observer_general;
delete observer_matrix;
delete observer_bc;
}