#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); } /// test the clone function 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_ */