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 +
Sofia Antony
committed
#ifndef RANGESTRINGPARSERTEST_H_
#define RANGESTRINGPARSERTEST_H_
#include <cxxtest/TestSuite.h>
#include "MantidKernel/UserStringParser.h"
#include <vector>
using namespace Mantid::Kernel;
class UserStringParserTest : public CxxTest::TestSuite {
Sofia Antony
committed
public:
void testColonSeparatedStrings() {
Sofia Antony
committed
UserStringParser parser;
std::string str = "2010:2020:2";
unsigned int startNum = 2010;
Sofia Antony
committed
std::vector<std::vector<unsigned int>> parsedVals = parser.parse(str);
std::vector<std::vector<unsigned int>>::const_iterator parsedValcitr;
for (parsedValcitr = parsedVals.begin(); parsedValcitr != parsedVals.end();
++parsedValcitr) {
Sofia Antony
committed
std::vector<unsigned int>::const_iterator citr;
for (citr = (*parsedValcitr).begin(); citr != (*parsedValcitr).end();
++citr) {
TS_ASSERT_EQUALS(*citr, startNum)
startNum += 2;
Sofia Antony
committed
}
}
}
void testMinusSeparatedStrings() {
Sofia Antony
committed
UserStringParser parser;
std::string str = "60-61";
unsigned int startNum = 60;
std::vector<std::vector<unsigned int>> parsedVals = parser.parse(str);
std::vector<std::vector<unsigned int>>::const_iterator parsedValcitr;
for (parsedValcitr = parsedVals.begin(); parsedValcitr != parsedVals.end();
++parsedValcitr) {
Sofia Antony
committed
std::vector<unsigned int>::const_iterator citr;
for (citr = (*parsedValcitr).begin(); citr != (*parsedValcitr).end();
++citr) {
TS_ASSERT_EQUALS(*citr, startNum)
startNum += 1;
Sofia Antony
committed
}
}
}
void testMinusSeparatedRangeofStrings() {
Sofia Antony
committed
UserStringParser parser;
std::string str = "60-85";
unsigned int startNum = 60;
std::vector<std::vector<unsigned int>> parsedVals = parser.parse(str);
std::vector<std::vector<unsigned int>>::const_iterator parsedValcitr;
for (parsedValcitr = parsedVals.begin(); parsedValcitr != parsedVals.end();
++parsedValcitr) {
Sofia Antony
committed
std::vector<unsigned int>::const_iterator citr;
for (citr = (*parsedValcitr).begin(); citr != (*parsedValcitr).end();
++citr) {
TS_ASSERT_EQUALS(*citr, startNum)
startNum += 1;
Sofia Antony
committed
}
}
}
void testPlusSeparatedStrings() {
Sofia Antony
committed
UserStringParser parser;
std::string str = "62+63";
unsigned int startNum = 62;
Sofia Antony
committed
std::vector<std::vector<unsigned int>> parsedVals = parser.parse(str);
std::vector<std::vector<unsigned int>>::const_iterator parsedValcitr;
for (parsedValcitr = parsedVals.begin(); parsedValcitr != parsedVals.end();
++parsedValcitr) {
Sofia Antony
committed
std::vector<unsigned int>::const_iterator citr;
for (citr = (*parsedValcitr).begin(); citr != (*parsedValcitr).end();
++citr) {
TS_ASSERT_EQUALS(*citr, startNum)
startNum += 1;
Sofia Antony
committed
}
}
}
void testMinusandColonSeparatedStrings() {
Sofia Antony
committed
UserStringParser parser;
std::string str = "4010-4020:2";
unsigned int startNum = 4010;
Sofia Antony
committed
std::vector<std::vector<unsigned int>> parsedVals = parser.parse(str);
std::vector<std::vector<unsigned int>>::const_iterator parsedValcitr;
for (parsedValcitr = parsedVals.begin(); parsedValcitr != parsedVals.end();
++parsedValcitr) {
Sofia Antony
committed
std::vector<unsigned int>::const_iterator citr;
for (citr = (*parsedValcitr).begin(); citr != (*parsedValcitr).end();
++citr) {
TS_ASSERT_EQUALS(*citr, startNum)
startNum += 2;
Sofia Antony
committed
}
}
}
void testCommaSeparatedComplexStrings1() {
Sofia Antony
committed
UserStringParser parser;
std::string str = "60-61,62+63,64-65";
std::vector<std::vector<unsigned int>> parsedVals = parser.parse(str);
TS_ASSERT_EQUALS(parsedVals.size(), 3)
TS_ASSERT_EQUALS((parsedVals[0][0]), 60)
TS_ASSERT_EQUALS((parsedVals[0][1]), 61)
TS_ASSERT_EQUALS((parsedVals[1][0]), 62)
TS_ASSERT_EQUALS((parsedVals[1][1]), 63)
TS_ASSERT_EQUALS((parsedVals[2][0]), 64)
TS_ASSERT_EQUALS((parsedVals[2][1]), 65)
Sofia Antony
committed
}
void testCommaSeparatedComplexStrings2() {
Sofia Antony
committed
UserStringParser parser;
std::string str = "60,61+62,64-66,68-74:2";
std::vector<std::vector<unsigned int>> parsedVals = parser.parse(str);
TS_ASSERT_EQUALS(parsedVals.size(), 4)
TS_ASSERT_EQUALS((parsedVals[0][0]), 60)
TS_ASSERT_EQUALS((parsedVals[1][0]), 61)
TS_ASSERT_EQUALS((parsedVals[1][1]), 62)
TS_ASSERT_EQUALS((parsedVals[2][0]), 64)
TS_ASSERT_EQUALS((parsedVals[2][1]), 65)
TS_ASSERT_EQUALS((parsedVals[2][2]), 66)
TS_ASSERT_EQUALS((parsedVals[3][0]), 68)
TS_ASSERT_EQUALS((parsedVals[3][1]), 70)
TS_ASSERT_EQUALS((parsedVals[3][2]), 72)
Sofia Antony
committed
}
void testCommaSeparatedComplexStrings3() {
Sofia Antony
committed
UserStringParser parser;
std::string str = "60,61,62:68";
std::vector<std::vector<unsigned int>> parsedVals = parser.parse(str);
TS_ASSERT_EQUALS(parsedVals.size(), 9)
TS_ASSERT_EQUALS((parsedVals[0][0]), 60)
TS_ASSERT_EQUALS((parsedVals[1][0]), 61)
TS_ASSERT_EQUALS((parsedVals[2][0]), 62)
TS_ASSERT_EQUALS((parsedVals[3][0]), 63)
TS_ASSERT_EQUALS((parsedVals[4][0]), 64)
TS_ASSERT_EQUALS((parsedVals[5][0]), 65)
TS_ASSERT_EQUALS((parsedVals[6][0]), 66)
TS_ASSERT_EQUALS((parsedVals[7][0]), 67)
TS_ASSERT_EQUALS((parsedVals[8][0]), 68)
Sofia Antony
committed
}
private:
};