Newer
Older
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source
// & Institut Laue - Langevin
// SPDX - License - Identifier: GPL - 3.0 +
#ifndef BOUNDEDVALIDATORTEST_H_
#define BOUNDEDVALIDATORTEST_H_
#include "MantidKernel/BoundedValidator.h"
class BoundedValidatorTest : public CxxTest::TestSuite {
BoundedValidator<int> bv(2, 5);
// Test that all the base class member variables are correctly assigned to
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 2);
TS_ASSERT_EQUALS(bv.upper(), 5);
}
void testConstructorExclusive() {
BoundedValidator<int> bv(2, 5, true);
// Test that all the base class member variables are correctly assigned to
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 2);
TS_ASSERT_EQUALS(bv.upper(), 5);
TS_ASSERT(bv.isLowerExclusive());
TS_ASSERT(bv.isUpperExclusive());
void testClone() {
boost::shared_ptr<BoundedValidator<int>> bv =
boost::make_shared<BoundedValidator<int>>(1, 10, true);
IValidator_sptr vv = bv->clone();
TS_ASSERT_DIFFERS(bv, vv);
boost::shared_ptr<BoundedValidator<int>> bvv;
TS_ASSERT(bvv = boost::dynamic_pointer_cast<BoundedValidator<int>>(vv));
TS_ASSERT_EQUALS(bv->hasLower(), bvv->hasLower())
TS_ASSERT_EQUALS(bv->hasUpper(), bvv->hasUpper())
TS_ASSERT_EQUALS(bv->lower(), bvv->lower())
TS_ASSERT_EQUALS(bv->upper(), bvv->upper())
TS_ASSERT_EQUALS(bv->isLowerExclusive(), bvv->isLowerExclusive())
TS_ASSERT_EQUALS(bv->isUpperExclusive(), bvv->isUpperExclusive())
}
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 2);
TS_ASSERT_EQUALS(bv.upper(), 5);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), true);
bv.clearLower();
TS_ASSERT_EQUALS(bv.hasLower(), false);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 0);
TS_ASSERT_EQUALS(bv.upper(), 5);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), true);
bv.clearUpper();
TS_ASSERT_EQUALS(bv.hasLower(), false);
TS_ASSERT_EQUALS(bv.hasUpper(), false);
TS_ASSERT_EQUALS(bv.lower(), 0);
TS_ASSERT_EQUALS(bv.upper(), 0);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), true);
}
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 2.0);
TS_ASSERT_EQUALS(bv.upper(), 5.0);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), true);
bv.clearBounds();
TS_ASSERT_EQUALS(bv.hasLower(), false);
TS_ASSERT_EQUALS(bv.hasUpper(), false);
TS_ASSERT_EQUALS(bv.lower(), 0);
TS_ASSERT_EQUALS(bv.upper(), 0);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), true);
}
BoundedValidator<std::string> bv("A", "B");
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), "A");
TS_ASSERT_EQUALS(bv.upper(), "B");
TS_ASSERT_EQUALS(bv.isLowerExclusive(), false);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), false);
bv.clearBounds();
TS_ASSERT_EQUALS(bv.hasLower(), false);
TS_ASSERT_EQUALS(bv.hasUpper(), false);
TS_ASSERT_EQUALS(bv.lower(), "");
TS_ASSERT_EQUALS(bv.upper(), "");
TS_ASSERT_EQUALS(bv.isLowerExclusive(), false);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), false);
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), "C");
TS_ASSERT_EQUALS(bv.upper(), "D");
TS_ASSERT_EQUALS(bv.isLowerExclusive(), false);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), false);
}
BoundedValidator<std::string> bv("A", "B");
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), "A");
TS_ASSERT_EQUALS(bv.upper(), "B");
TS_ASSERT_EQUALS(bv.isLowerExclusive(), false);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), false);
bv.clearBounds();
TS_ASSERT_EQUALS(bv.hasLower(), false);
TS_ASSERT_EQUALS(bv.hasUpper(), false);
TS_ASSERT_EQUALS(bv.lower(), "");
TS_ASSERT_EQUALS(bv.upper(), "");
TS_ASSERT_EQUALS(bv.isLowerExclusive(), false);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), false);
bv.setLower("C");
bv.setLowerExclusive(true);
bv.setUpper("D");
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), "C");
TS_ASSERT_EQUALS(bv.upper(), "D");
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), false);
bv.setUpper("E");
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), "C");
TS_ASSERT_EQUALS(bv.upper(), "E");
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), false);
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
BoundedValidator<double> bv(2.0, 5.0, true);
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 2.0);
TS_ASSERT_EQUALS(bv.upper(), 5.0);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), true);
bv.setLowerExclusive(false);
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 2.0);
TS_ASSERT_EQUALS(bv.upper(), 5.0);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), false);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), true);
bv.setUpperExclusive(false);
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 2.0);
TS_ASSERT_EQUALS(bv.upper(), 5.0);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), false);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), false);
bv.setExclusive(true);
TS_ASSERT_EQUALS(bv.hasLower(), true);
TS_ASSERT_EQUALS(bv.hasUpper(), true);
TS_ASSERT_EQUALS(bv.lower(), 2.0);
TS_ASSERT_EQUALS(bv.upper(), 5.0);
TS_ASSERT_EQUALS(bv.isLowerExclusive(), true);
TS_ASSERT_EQUALS(bv.isUpperExclusive(), true);
}
void testBoundedValidator() {
std::string start("Selected value "), end(")");
Steve Williams
committed
std::string greaterThan(" is > the upper bound (");
Steve Williams
committed
std::string lessThan(" is < the lower bound (");
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
// int tests
BoundedValidator<int> pi(1, 10);
TS_ASSERT_EQUALS(pi.isValid(0), start + "0" + lessThan + "1" + end);
TS_ASSERT_EQUALS(pi.isValid(1), "");
TS_ASSERT_EQUALS(pi.isValid(10), "");
TS_ASSERT_EQUALS(pi.isValid(11), start + "11" + greaterThan + "10" + end);
pi.clearLower();
TS_ASSERT_EQUALS(pi.isValid(0), "");
TS_ASSERT_EQUALS(pi.isValid(-1), "");
TS_ASSERT_EQUALS(pi.isValid(10), "");
TS_ASSERT_EQUALS(pi.isValid(11), start + "11" + greaterThan + "10" + end);
pi.clearUpper();
TS_ASSERT_EQUALS(pi.isValid(11), "");
// double tests
BoundedValidator<double> pd(1.0, 10.0);
TS_ASSERT_EQUALS(pd.isValid(0.9), start + "0.9" + lessThan + "1" + end);
TS_ASSERT_EQUALS(pd.isValid(1.0), "");
TS_ASSERT_EQUALS(pd.isValid(10.0), "");
TS_ASSERT_EQUALS(pd.isValid(10.1),
start + "10.1" + greaterThan + "10" + end);
pd.clearUpper();
TS_ASSERT_EQUALS(pd.isValid(0.9), start + "0.9" + lessThan + "1" + end);
TS_ASSERT_EQUALS(pd.isValid(-1.0), start + "-1" + lessThan + "1" + end);
TS_ASSERT_EQUALS(pd.isValid(10.0), "");
TS_ASSERT_EQUALS(pd.isValid(10.1), "");
pd.clearLower();
TS_ASSERT_EQUALS(pd.isValid(-2.0), "");
// string tests
BoundedValidator<std::string> ps("B", "T");
TS_ASSERT_EQUALS(ps.isValid("AZ"), start + "AZ" + lessThan + "B" + end);
TS_ASSERT_EQUALS(ps.isValid("B"), "");
TS_ASSERT_EQUALS(ps.isValid("T"), "");
TS_ASSERT_EQUALS(ps.isValid("TA"), start + "TA" + greaterThan + "T" + end);
Steve Williams
committed
ps.clearLower();
TS_ASSERT_EQUALS(ps.isValid("AZ"), "");
TS_ASSERT_EQUALS(ps.isValid("B"), "");
TS_ASSERT_EQUALS(ps.isValid("T"), "");
TS_ASSERT_EQUALS(ps.isValid("TA"), start + "TA" + greaterThan + "T" + end);
Steve Williams
committed
ps.clearUpper();
TS_ASSERT_EQUALS(ps.isValid("TA"), "");
}
void testBoundedValidatorExclusive() {
std::string start("Selected value "), end(")");
std::string greaterThanEq(" is >= the upper bound (");
std::string lessThanEq(" is <= the lower bound (");
// lower bounds
TS_ASSERT_EQUALS(pi.isValid(0), start + "0" + lessThanEq + "1" + end);
TS_ASSERT_EQUALS(pi.isValid(1), start + "1" + lessThanEq + "1" + end);
TS_ASSERT_EQUALS(pi.isValid(2), "");
// upper bounds
TS_ASSERT_EQUALS(pi.isValid(9), "");
TS_ASSERT_EQUALS(pi.isValid(10), start + "10" + greaterThanEq + "10" + end);
TS_ASSERT_EQUALS(pi.isValid(11), start + "11" + greaterThanEq + "10" + end);
pi.clearLower();
TS_ASSERT_EQUALS(pi.isValid(0), "");
TS_ASSERT_EQUALS(pi.isValid(-1), "");
TS_ASSERT_EQUALS(pi.isValid(10), start + "10" + greaterThanEq + "10" + end);
TS_ASSERT_EQUALS(pi.isValid(11), start + "11" + greaterThanEq + "10" + end);
pi.clearUpper();
TS_ASSERT_EQUALS(pi.isValid(10), "");
TS_ASSERT_EQUALS(pi.isValid(11), "");
// lower bounds
TS_ASSERT_EQUALS(pd.isValid(0.9), start + "0.9" + lessThanEq + "1" + end);
TS_ASSERT_EQUALS(pd.isValid(1.0), start + "1" + lessThanEq + "1" + end);
TS_ASSERT_EQUALS(pd.isValid(9.9), "");
TS_ASSERT_EQUALS(pd.isValid(10.0),
start + "10" + greaterThanEq + "10" + end);
start + "10.1" + greaterThanEq + "10" + end);
TS_ASSERT_EQUALS(pd.isValid(0.9), start + "0.9" + lessThanEq + "1" + end);
TS_ASSERT_EQUALS(pd.isValid(-1.0), start + "-1" + lessThanEq + "1" + end);
TS_ASSERT_EQUALS(pd.isValid(9.9), "");
TS_ASSERT_EQUALS(pd.isValid(10.0), "");
TS_ASSERT_EQUALS(pd.isValid(10.1), "");
pd.clearLower();
TS_ASSERT_EQUALS(pd.isValid(-2.0), "");
BoundedValidator<std::string> ps("B", "T", true);
// lower bounds
TS_ASSERT_EQUALS(ps.isValid("AZ"), start + "AZ" + lessThanEq + "B" + end);
TS_ASSERT_EQUALS(ps.isValid("B"), start + "B" + lessThanEq + "B" + end);
TS_ASSERT_EQUALS(ps.isValid("T"), start + "T" + greaterThanEq + "T" + end);
start + "TA" + greaterThanEq + "T" + end);
ps.clearLower();
TS_ASSERT_EQUALS(ps.isValid("AZ"), "");
TS_ASSERT_EQUALS(ps.isValid("B"), "");
TS_ASSERT_EQUALS(ps.isValid("S"), "");
TS_ASSERT_EQUALS(ps.isValid("T"), start + "T" + greaterThanEq + "T" + end);
start + "TA" + greaterThanEq + "T" + end);
ps.clearUpper();
TS_ASSERT_EQUALS(ps.isValid("T"), "");
TS_ASSERT_EQUALS(ps.isValid("TA"), "");
}