/* This file is part of MAUS: http:// micewww.pp.rl.ac.uk:8080/projects/maus
*
* MAUS 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 3 of the License, or
* (at your option) any later version.
*
* MAUS 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 MAUS. If not, see .
*/
/* Author: Peter Lane
*/
#include
#include
#include
#include
#include "gtest/gtest.h"
#include "Interface/Squeal.hh"
#include "src/common_cpp/Optics/PhaseSpaceVector.hh"
#include "Maths/Vector.hh"
using MAUS::PhaseSpaceVector;
using MAUS::Vector;
using MAUS::operator ==;
using MAUS::operator !=;
using MAUS::operator +;
using MAUS::operator +=;
using MAUS::operator -;
using MAUS::operator -=;
using MAUS::operator *;
using MAUS::operator *=;
using MAUS::operator /;
class PhaseSpaceVectorTest : public testing::Test {
public:
PhaseSpaceVectorTest() {
}
protected:
static const double kData[10];
};
// *************************************************
// PhaseSpaceVectorTest static const initializations
// *************************************************
const double PhaseSpaceVectorTest::kData[10]
= {3.1, 4.1, 5.9, 2.6, 5.3, 5.8, 9.7, 9.3, 2.3, 8.4}; // 10 elem.
// ***********
// test cases
// ***********
TEST_F(PhaseSpaceVectorTest, DefaultConstructor) {
const PhaseSpaceVector ps_vector;
ASSERT_EQ(ps_vector.size(), (size_t) 6);
for (size_t index = 0; index < 6; ++index) {
EXPECT_EQ(ps_vector[index], 0.0);
}
}
TEST_F(PhaseSpaceVectorTest, VectorConstructor) {
const Vector vector(kData, 10);
const PhaseSpaceVector ps_vector(vector);
ASSERT_EQ(ps_vector.size(), (size_t) 6);
for (size_t index = 0; index < 6; ++index) {
EXPECT_EQ(ps_vector[index], kData[index]);
}
const Vector bad_vector(kData, 4);
bool testpass = true;
try {
const PhaseSpaceVector bad_ps_vector(bad_vector);
testpass = false;
} catch (Squeal squeal) {}
ASSERT_TRUE(testpass);
}
TEST_F(PhaseSpaceVectorTest, ArrayConstructor) {
const PhaseSpaceVector ps_vector(kData);
ASSERT_EQ(ps_vector.size(), (size_t) 6);
for (size_t index = 0; index < 6; ++index) {
EXPECT_EQ(ps_vector[index], kData[index]);
}
}
TEST_F(PhaseSpaceVectorTest, CopyConstructor) {
const PhaseSpaceVector ps_vector(kData);
const PhaseSpaceVector ps_vector_copy(ps_vector);
ASSERT_EQ(ps_vector_copy.size(), (size_t) 6);
for (size_t index = 0; index < 6; ++index) {
EXPECT_EQ(ps_vector_copy[index], kData[index]);
}
}
TEST_F(PhaseSpaceVectorTest, ParameterConstructor) {
const PhaseSpaceVector ps_vector(
kData[0], kData[1], kData[2],
kData[3], kData[4], kData[5]);
ASSERT_EQ(ps_vector.size(), (size_t) 6);
for (size_t index = 0; index < 6; ++index) {
EXPECT_EQ(ps_vector[index], kData[index]);
}
}
TEST_F(PhaseSpaceVectorTest, Accessors) {
const PhaseSpaceVector ps_vector(kData);
EXPECT_EQ(ps_vector.time(), kData[0]);
EXPECT_EQ(ps_vector.t(), kData[0]);
EXPECT_EQ(ps_vector.energy(), kData[1]);
EXPECT_EQ(ps_vector.E(), kData[1]);
EXPECT_EQ(ps_vector.x(), kData[2]);
EXPECT_EQ(ps_vector.x_momentum(), kData[3]);
EXPECT_EQ(ps_vector.Px(), kData[3]);
EXPECT_EQ(ps_vector.y(), kData[4]);
EXPECT_EQ(ps_vector.y_momentum(), kData[5]);
EXPECT_EQ(ps_vector.Py(), kData[5]);
}
TEST_F(PhaseSpaceVectorTest, Mutators) {
PhaseSpaceVector ps_vector;
ps_vector.set_time(kData[0]);
ps_vector.set_energy(kData[1]);
ps_vector.set_x(kData[2]);
ps_vector.set_x_momentum(kData[3]);
ps_vector.set_y(kData[4]);
ps_vector.set_y_momentum(kData[5]);
for (size_t index = 0; index < 6; ++index) {
EXPECT_EQ(ps_vector[index], kData[index]);
ps_vector[index] = 0.0;
}
ps_vector.set_t(kData[0]);
ps_vector.set_E(kData[1]);
ps_vector.set_x(kData[2]);
ps_vector.set_Px(kData[3]);
ps_vector.set_y(kData[4]);
ps_vector.set_Py(kData[5]);
for (size_t index = 0; index < 6; ++index) {
EXPECT_EQ(ps_vector[index], kData[index]);
}
}