support for floating ponit strides

This commit is contained in:
Ken Martin 2004-06-08 17:36:30 -04:00
parent 6037cc8b3b
commit 8de4534d69
1 changed files with 44 additions and 5 deletions

View File

@ -5186,6 +5186,43 @@ inline int GetNextNumber(std::string const& in,
} }
} }
// get the next number in a string with numbers separated by ,
// pos is the start of the search and pos2 is the end of the search
// pos becomes pos2 after a call to GetNextNumber.
// -1 is returned at the end of the list.
inline int GetNextRealNumber(std::string const& in,
double& val,
std::string::size_type& pos,
std::string::size_type& pos2)
{
pos2 = in.find(',', pos);
if(pos2 != in.npos)
{
if(pos2-pos == 0)
{
val = -1;
}
else
{
val = atof(in.substr(pos, pos2-pos).c_str());
}
pos = pos2+1;
return 1;
}
else
{
if(in.size()-pos == 0)
{
val = -1;
}
else
{
val = atof(in.substr(pos, in.size()-pos).c_str());
}
return 0;
}
}
void cmCTest::SetTestsToRunInformation(const char* in) void cmCTest::SetTestsToRunInformation(const char* in)
{ {
@ -5211,7 +5248,7 @@ void cmCTest::ExpandTestsToRunInformation(int numTests)
int start; int start;
int end = -1; int end = -1;
int stride = -1; double stride = -1;
std::string::size_type pos = 0; std::string::size_type pos = 0;
std::string::size_type pos2; std::string::size_type pos2;
// read start // read start
@ -5221,7 +5258,7 @@ void cmCTest::ExpandTestsToRunInformation(int numTests)
if(GetNextNumber(this->TestsToRunString, end, pos, pos2)) if(GetNextNumber(this->TestsToRunString, end, pos, pos2))
{ {
// read stride // read stride
if(GetNextNumber(this->TestsToRunString, stride, pos, pos2)) if(GetNextRealNumber(this->TestsToRunString, stride, pos, pos2))
{ {
int val =0; int val =0;
// now read specific numbers // now read specific numbers
@ -5253,11 +5290,13 @@ void cmCTest::ExpandTestsToRunInformation(int numTests)
} }
// if we have a range then add it // if we have a range then add it
if(end != -1 && start != -1) if(end != -1 && start != -1 && stride > 0)
{ {
for(int i =start; i <= end; i+= stride) int i = 0;
while (i*stride + start <= end)
{ {
m_TestsToRun.push_back(i); m_TestsToRun.push_back(static_cast<int>(i*stride+start));
++i;
} }
} }