Skip to content
Snippets Groups Projects
ArrayLengthValidatorTest.h 3.58 KiB
Newer Older
#ifndef MANTID_KERNEL_ARRAYLENGTHVALIDATORTEST_H_
#define MANTID_KERNEL_ARRAYLENGTHVALIDATORTEST_H_

#include <cxxtest/TestSuite.h>
#include "MantidKernel/Timer.h"
#include "MantidKernel/System.h"
#include <iostream>
#include <iomanip>
#include <vector>

#include "MantidKernel/ArrayLengthValidator.h"

using namespace Mantid;
using namespace Mantid::Kernel;

class ArrayLengthValidatorTest : public CxxTest::TestSuite
{
public:
  // This pair of boilerplate methods prevent the suite being created statically
  // This means the constructor isn't called when running other tests
  static ArrayLengthValidatorTest *createSuite() { return new ArrayLengthValidatorTest(); }
  static void destroySuite( ArrayLengthValidatorTest *suite ) { delete suite; }

  /// test constructors, both empty and with length, also hasLength and getLength
  void testConstructor()
  {
    ArrayLengthValidator<int> av1,av2(3),av3(4,5);
    TS_ASSERT_EQUALS(av1.hasLength(),false);
    TS_ASSERT_EQUALS(av1.hasMinLength(),false);
    TS_ASSERT_EQUALS(av1.hasMaxLength(),false);
    TS_ASSERT_EQUALS(av2.hasLength(),true);
    TS_ASSERT_EQUALS(av2.hasMinLength(),false);
    TS_ASSERT_EQUALS(av2.hasMaxLength(),false);
    TS_ASSERT_EQUALS(av2.getLength(),3);
    TS_ASSERT_EQUALS(av3.hasLength(),false);
    TS_ASSERT_EQUALS(av3.hasMinLength(),true);
    TS_ASSERT_EQUALS(av3.hasMaxLength(),true);
    TS_ASSERT_EQUALS(av3.getMinLength(),4);
    TS_ASSERT_EQUALS(av3.getMaxLength(),5);
  void testClone()
  {
    boost::shared_ptr<ArrayLengthValidator<int> > vi(new ArrayLengthValidator<int>);
    IValidator_sptr vvi = vi->clone();
    TS_ASSERT_DIFFERS( vi, vvi );
  }

  /// test for setLength and clearLength
  void testSetClear()
  {
    ArrayLengthValidator<int> av1;
    TS_ASSERT_EQUALS(av1.hasLength(),false);
    TS_ASSERT_EQUALS(av1.hasMinLength(),false);
    TS_ASSERT_EQUALS(av1.hasMaxLength(),false);
    av1.setLength(4);
    TS_ASSERT_EQUALS(av1.hasLength(),true);
    TS_ASSERT_EQUALS(av1.getLength(),4);
    TS_ASSERT_EQUALS(av1.hasMinLength(),false);
    TS_ASSERT_EQUALS(av1.hasMaxLength(),false);
    av1.clearLength();
    TS_ASSERT_EQUALS(av1.hasLength(),false);
    TS_ASSERT_EQUALS(av1.getLength(),0);
    TS_ASSERT_EQUALS(av1.hasMinLength(),false);
    TS_ASSERT_EQUALS(av1.hasMaxLength(),false);
    av1.setLengthMax(4);
    TS_ASSERT_EQUALS(av1.hasLength(),false);
    TS_ASSERT_EQUALS(av1.getMaxLength(),4);
    TS_ASSERT_EQUALS(av1.hasMinLength(),false);
    TS_ASSERT_EQUALS(av1.hasMaxLength(),true);
    av1.setLengthMin(2);
    TS_ASSERT_EQUALS(av1.hasLength(),false);
    TS_ASSERT_EQUALS(av1.getMinLength(),2);
    TS_ASSERT_EQUALS(av1.hasMinLength(),true);
    TS_ASSERT_EQUALS(av1.hasMaxLength(),true);
    av1.clearLengthMax();
    TS_ASSERT_EQUALS(av1.hasLength(),false);
    TS_ASSERT_EQUALS(av1.hasMinLength(),true);
    TS_ASSERT_EQUALS(av1.hasMaxLength(),false);
  /// test validator, both for OK and for different length
  void testValidator()
  {
    ArrayLengthValidator<int> vi(3);
    std::vector<int> a;
    a.push_back(3);
    TS_ASSERT_DIFFERS(vi.isValid(a).length(),0);
    a.push_back(-1);
    a.push_back(11);
    TS_ASSERT_EQUALS(vi.isValid(a).length(),0);
  }

  void testValidatorRange()
  {
    ArrayLengthValidator<int> vi(2,3);
    std::vector<int> a;
    a.push_back(3);
    TS_ASSERT_DIFFERS(vi.isValid(a).length(),0);
    a.push_back(11);
    TS_ASSERT_EQUALS(vi.isValid(a).length(),0);
    a.push_back(12);
    TS_ASSERT_EQUALS(vi.isValid(a).length(),0);
    a.push_back(21);
    TS_ASSERT_DIFFERS(vi.isValid(a).length(),0);
  }
};


#endif /* MANTID_KERNEL_ARRAYLENGTHVALIDATORTEST_H_ */