/*
* 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 .
*/
/*
* DiscreteValueTest.cpp
*
* Created on: Sep 28, 2011
* Author: heber
*/
// include config.h
#ifdef HAVE_CONFIG_H
#include
#endif
#include "DiscreteValueTest.hpp"
#include
#include
#include
#include "Parameters/ParameterExceptions.hpp"
#include "Parameters/Value.hpp"
#ifdef HAVE_TESTRUNNER
#include "UnitTestMain.hpp"
#endif /*HAVE_TESTRUNNER*/
using namespace std;
// Registers the fixture into the 'registry'
CPPUNIT_TEST_SUITE_REGISTRATION( DiscreteValueTest );
void DiscreteValueTest::setUp()
{
// failing asserts should be thrown
ASSERT_DO(Assert::Throw);
for (int i=1; i<=3;++i) {
ValidValues.push_back(i);
}
}
void DiscreteValueTest::tearDown()
{
ValidValues.clear();
}
/************************************ tests ***********************************/
/** Unit test for findIndexOfValue.
*
*/
void DiscreteValueTest::findIndexOfValueTest()
{
// create instance
Value test(ValidValues);
// check valid values indices
CPPUNIT_ASSERT_EQUAL((size_t)0, dynamic_cast &>(test.getValidator()).findIndexOfValue(1));
CPPUNIT_ASSERT_EQUAL((size_t)1, dynamic_cast &>(test.getValidator()).findIndexOfValue(2));
CPPUNIT_ASSERT_EQUAL((size_t)2, dynamic_cast &>(test.getValidator()).findIndexOfValue(3));
// check invalid ones
for (int i=-10; i<=0;++i)
CPPUNIT_ASSERT_EQUAL((size_t)-1, dynamic_cast &>(test.getValidator()).findIndexOfValue(i));
for (int i=4; i<=0;++i)
CPPUNIT_ASSERT_EQUAL((size_t)-1, dynamic_cast &>(test.getValidator()).findIndexOfValue(i));
}
/** Unit test for isValidValue.
*
*/
void DiscreteValueTest::isValidAsStringTest()
{
// create instance
Value test(ValidValues);
// checking valid values
for (int i=1; i<=3;++i)
CPPUNIT_ASSERT_EQUAL(true, test.isValidAsString(toString(i)));
// checking invalid values
for (int i=-10; i<=0;++i)
CPPUNIT_ASSERT_EQUAL(false, test.isValidAsString(toString(i)));
for (int i=4; i<=0;++i)
CPPUNIT_ASSERT_EQUAL(false, test.isValidAsString(toString(i)));
}
/** Unit test for isValid.
*
*/
void DiscreteValueTest::isValidTest()
{
// create instance
Value test(ValidValues);
// checking valid values
for (int i=1; i<=3;++i)
CPPUNIT_ASSERT_EQUAL(true, test.isValid(i));
// checking invalid values
for (int i=-10; i<=0;++i)
CPPUNIT_ASSERT_EQUAL(false, test.isValid(i));
for (int i=4; i<=0;++i)
CPPUNIT_ASSERT_EQUAL(false, test.isValid(i));
}
/** Unit test for appendValidValue.
*
*/
void DiscreteValueTest::appendValidValueTest()
{
// create instance
Value test(ValidValues);
// adding values 4,5,6
for (int i=4; i<=6;++i) {
CPPUNIT_ASSERT_EQUAL(false, test.isValid(i));
dynamic_cast &>(test.getValidator()).appendValidValue(i);
CPPUNIT_ASSERT_EQUAL(true, test.isValid(i));
}
// adding same value, throws assertion
const size_t size_before = dynamic_cast &>(test.getValidator()).getValidValues().size();
std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
for (int i=1; i<=6;++i)
CPPUNIT_ASSERT_THROW(dynamic_cast &>(test.getValidator()).appendValidValue(i), ParameterValidatorException);
CPPUNIT_ASSERT_EQUAL( size_before, dynamic_cast &>(test.getValidator()).getValidValues().size() );
// checking valid values
for (int i=1; i<=6;++i)
CPPUNIT_ASSERT_EQUAL(true, test.isValid(i));
// checking invalid values
for (int i=-10; i<=0;++i)
CPPUNIT_ASSERT_EQUAL(false, test.isValid(i));
// checking invalid values
for (int i=7; i<=10;++i)
CPPUNIT_ASSERT_EQUAL(false, test.isValid(i));
}
/** Unit test for setters and getters.
*
*/
void DiscreteValueTest::settergetterTest()
{
// create instance
Value test(ValidValues);
// unset calling of get, throws
std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
CPPUNIT_ASSERT_THROW(test.get(), ParameterValueException);
// setting invalid and getting it, throws
test.set(4);
std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
CPPUNIT_ASSERT_THROW(test.get(), ParameterValueException);
test.set(0);
std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
CPPUNIT_ASSERT_THROW(test.get(), ParameterValueException);
// checking all valid ones
for (int i=1; i<=3;++i) {
test.set(i);
CPPUNIT_ASSERT_EQUAL(i, test.get());
}
}
/** Unit test for setValue and getValue.
*
*/
void DiscreteValueTest::settergetterAsStringTest()
{
// create instance
Value test(ValidValues);
// unset calling of get, throws
std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
CPPUNIT_ASSERT_THROW(test.getAsString(), ParameterValueException);
// setting invalid and getting it, throws
test.setAsString(toString(4));
std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
CPPUNIT_ASSERT_THROW(test.getAsString(), ParameterValueException);
test.setAsString(toString(0));
std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
CPPUNIT_ASSERT_THROW(test.getAsString(), ParameterValueException);
// checking all valid ones
for (int i=1; i<=3;++i) {
test.setAsString(toString(i));
CPPUNIT_ASSERT_EQUAL(toString(i), test.getAsString());
}
}
/** Unit test for comparator.
*
*/
void DiscreteValueTest::comparatorTest()
{
{
// create instance
Value test(ValidValues);
Value instance(ValidValues);
test.set(1);
instance.set(1);
// same value, same range
{
CPPUNIT_ASSERT(test == instance);
}
// different value, same range
{
const int oldvalue = instance.get();
instance.set(2);
CPPUNIT_ASSERT(test != instance);
instance.set(oldvalue);
}
}
{
Value test(ValidValues);
Value instance(ValidValues);
dynamic_cast &>(instance.getValidator()).appendValidValue(4);
test.set(1);
instance.set(1);
// same value, same range
{
CPPUNIT_ASSERT(test != instance);
}
// different value, same range
{
const int oldvalue = instance.get();
instance.set(2);
CPPUNIT_ASSERT(test != instance);
instance.set(oldvalue);
}
}
}