Durations

- Removed support for ' 1 wk', namely spaces before and after the ordinal.
  This removes (some) ambiguity in more complex command lines.
- Fixed unit tests accordingly.
This commit is contained in:
Paul Beckingham 2011-08-21 23:19:10 -04:00
parent 501953a6da
commit 6ed2bcd605
2 changed files with 94 additions and 99 deletions

View file

@ -338,9 +338,7 @@ bool Duration::valid (const std::string& input)
// Assume the ordinal is 1, but look for an integer, just in case.
double value = 1;
Nibbler n (lower_input);
n.skipAll (' ');
n.getNumber (value);
n.skipAll (' ');
if (value < 0.0)
value = -value;
@ -377,11 +375,8 @@ void Duration::parse (const std::string& input)
// Assume the ordinal is 1, but look for an integer, just in case.
double value = 1;
Nibbler n (lower_input);
n.skipAll (' ');
n.getNumber (value);
n.skipAll (' ');
if (value < 0.0)
{
mNegative = true;

View file

@ -524,110 +524,110 @@ int main (int argc, char** argv)
t.ok (d.valid ("biannual"), "valid duration biannual");
t.ok (d.valid ("biyearly"), "valid duration biyearly");
t.ok (d.valid ("0 yrs"), "valid duration 0 yrs");
t.ok (d.valid ("0 yr"), "valid duration 0 yr");
t.ok (d.valid ("0yrs"), "valid duration 0yrs");
t.ok (d.valid ("0yr"), "valid duration 0yr");
t.ok (d.valid ("0y"), "valid duration 0y");
t.ok (d.valid ("1 yrs"), "valid duration 1 yrs");
t.ok (d.valid ("1 yr"), "valid duration 1 yr");
t.ok (d.valid ("1yrs"), "valid duration 1yrs");
t.ok (d.valid ("1yr"), "valid duration 1yr");
t.ok (d.valid ("1y"), "valid duration 1y");
t.ok (d.valid ("10 yrs"), "valid duration 10 yrs");
t.ok (d.valid ("10 yr"), "valid duration 10 yr");
t.ok (d.valid ("10yrs"), "valid duration 10yrs");
t.ok (d.valid ("10yr"), "valid duration 10yr");
t.ok (d.valid ("10y"), "valid duration 10y");
t.ok (d.valid ("1.1 yrs"), "valid duration 1.1 yrs");
t.ok (d.valid ("-1.1 yrs"), "valid duration -1.1 yrs");
t.ok (d.valid ("1.1yrs"), "valid duration 1.1yrs");
t.ok (d.valid ("-1.1yrs"), "valid duration -1.1yrs");
t.ok (d.valid ("1.1y"), "valid duration 1.1y");
t.ok (d.valid ("-1.1y"), "valid duration -1.1y");
t.ok (d.valid ("0 qtrs"), "valid duration 0 qtrs");
t.ok (d.valid ("0 qtr"), "valid duration 0 qtr");
t.ok (d.valid ("0qtrs"), "valid duration 0qtrs");
t.ok (d.valid ("0qtr"), "valid duration 0qtr");
t.ok (d.valid ("0q"), "valid duration 0q");
t.ok (d.valid ("1 qtrs"), "valid duration 1 qtrs");
t.ok (d.valid ("1 qtr"), "valid duration 1 qtr");
t.ok (d.valid ("1qtrs"), "valid duration 1qtrs");
t.ok (d.valid ("1qtr"), "valid duration 1qtr");
t.ok (d.valid ("1q"), "valid duration 1q");
t.ok (d.valid ("10 qtrs"), "valid duration 10 qtrs");
t.ok (d.valid ("10 qtr"), "valid duration 10 qtr");
t.ok (d.valid ("10qtrs"), "valid duration 10qtrs");
t.ok (d.valid ("10qtr"), "valid duration 10qtr");
t.ok (d.valid ("10q"), "valid duration 10q");
t.ok (d.valid ("0 mnths"), "valid duration 0 mnths");
t.ok (d.valid ("0 mnth"), "valid duration 0 mnth");
t.ok (d.valid ("0mnths"), "valid duration 0mnths");
t.ok (d.valid ("0mnth"), "valid duration 0mnth");
t.ok (d.valid ("0mo"), "valid duration 0mo");
t.ok (d.valid ("1 mnths"), "valid duration 1 mnths");
t.ok (d.valid ("1 mnth"), "valid duration 1 mnth");
t.ok (d.valid ("1mnths"), "valid duration 1mnths");
t.ok (d.valid ("1mnth"), "valid duration 1mnth");
t.ok (d.valid ("1mo"), "valid duration 1mo");
t.ok (d.valid ("10 mnths"), "valid duration 10 mnths");
t.ok (d.valid ("10 mnth"), "valid duration 10 mnth");
t.ok (d.valid ("10mnths"), "valid duration 10mnths");
t.ok (d.valid ("10mnth"), "valid duration 10mnth");
t.ok (d.valid ("10mo"), "valid duration 10mo");
t.ok (d.valid ("-1 mnths"), "valid duration -1 mnths");
t.ok (d.valid ("-1 mnth"), "valid duration -1 mnth");
t.ok (d.valid ("-1 mths"), "valid duration -1 mths");
t.ok (d.valid ("-1 mth"), "valid duration -1 mth");
t.ok (d.valid ("-1mnths"), "valid duration -1mnths");
t.ok (d.valid ("-1mnth"), "valid duration -1mnth");
t.ok (d.valid ("-1mths"), "valid duration -1mths");
t.ok (d.valid ("-1mth"), "valid duration -1mth");
t.ok (d.valid ("-1mo"), "valid duration -1mo");
t.ok (d.valid ("0m"), "valid duration 0m");
t.ok (d.valid ("1m"), "valid duration 1m");
t.ok (d.valid ("10m"), "valid duration 10m");
t.ok (d.valid ("-1m"), "valid duration -1m");
t.ok (d.valid ("0 wks"), "valid duration 0 wks");
t.ok (d.valid ("0 wk"), "valid duration 0 wk");
t.ok (d.valid ("0wks"), "valid duration 0wks");
t.ok (d.valid ("0wk"), "valid duration 0wk");
t.ok (d.valid ("0w"), "valid duration 0w");
t.ok (d.valid ("1 wks"), "valid duration 1 wks");
t.ok (d.valid ("1 wk"), "valid duration 1 wk");
t.ok (d.valid ("1wks"), "valid duration 1wks");
t.ok (d.valid ("1wk"), "valid duration 1wk");
t.ok (d.valid ("1wk"), "valid duration 1wk");
t.ok (d.valid ("1w"), "valid duration 1w");
t.ok (d.valid ("10 wks"), "valid duration 10 wks");
t.ok (d.valid ("10 wk"), "valid duration 10 wk");
t.ok (d.valid ("10wks"), "valid duration 10wks");
t.ok (d.valid ("10wk"), "valid duration 10wk");
t.ok (d.valid ("10w"), "valid duration 10w");
t.ok (d.valid ("-1 wks"), "valid duration -1 wks");
t.ok (d.valid ("-1 wk"), "valid duration -1 wk");
t.ok (d.valid ("-1wks"), "valid duration -1wks");
t.ok (d.valid ("-1wk"), "valid duration -1wk");
t.ok (d.valid ("-1wk"), "valid duration -1wk");
t.ok (d.valid ("-1w"), "valid duration -1w");
t.ok (d.valid ("0 days"), "valid duration 0 days");
t.ok (d.valid ("0 day"), "valid duration 0 day");
t.ok (d.valid ("0days"), "valid duration 0days");
t.ok (d.valid ("0day"), "valid duration 0day");
t.ok (d.valid ("0d"), "valid duration 0d");
t.ok (d.valid ("1 days"), "valid duration 1 days");
t.ok (d.valid ("1 day"), "valid duration 1 day");
t.ok (d.valid ("1days"), "valid duration 1days");
t.ok (d.valid ("1day"), "valid duration 1day");
t.ok (d.valid ("1d"), "valid duration 1d");
t.ok (d.valid ("10 days"), "valid duration 10 days");
t.ok (d.valid ("10 day"), "valid duration 10 day");
t.ok (d.valid ("10days"), "valid duration 10days");
t.ok (d.valid ("10day"), "valid duration 10day");
t.ok (d.valid ("10d"), "valid duration 10d");
t.ok (d.valid ("-1 days"), "valid duration -1 days");
t.ok (d.valid ("-1 day"), "valid duration -1 day");
t.ok (d.valid ("-1days"), "valid duration -1days");
t.ok (d.valid ("-1day"), "valid duration -1day");
t.ok (d.valid ("-1d"), "valid duration -1d");
t.ok (d.valid ("0 hrs"), "valid duration 0 hrs");
t.ok (d.valid ("0 hr"), "valid duration 0 hr");
t.ok (d.valid ("0hrs"), "valid duration 0hrs");
t.ok (d.valid ("0hr"), "valid duration 0hr");
t.ok (d.valid ("0h"), "valid duration 0h");
t.ok (d.valid ("1 hrs"), "valid duration 1 hrs");
t.ok (d.valid ("1 hr"), "valid duration 1 hr");
t.ok (d.valid ("1hrs"), "valid duration 1hrs");
t.ok (d.valid ("1hr"), "valid duration 1hr");
t.ok (d.valid ("1h"), "valid duration 1h");
t.ok (d.valid ("10 hrs"), "valid duration 10 hrs");
t.ok (d.valid ("10 hr"), "valid duration 10 hr");
t.ok (d.valid ("10hrs"), "valid duration 10hrs");
t.ok (d.valid ("10hr"), "valid duration 10hr");
t.ok (d.valid ("10h"), "valid duration 10h");
t.ok (d.valid ("-1 hrs"), "valid duration -1 hrs");
t.ok (d.valid ("-1 hr"), "valid duration -1 hr");
t.ok (d.valid ("-1hrs"), "valid duration -1hrs");
t.ok (d.valid ("-1hr"), "valid duration -1hr");
t.ok (d.valid ("-1h"), "valid duration -1h");
t.ok (d.valid ("0 mins"), "valid duration 0 mins");
t.ok (d.valid ("0 min"), "valid duration 0 min");
t.ok (d.valid ("1 mins"), "valid duration 1 mins");
t.ok (d.valid ("1 min"), "valid duration 1 min");
t.ok (d.valid ("10 mins"), "valid duration 10 mins");
t.ok (d.valid ("10 min"), "valid duration 10 min");
t.ok (d.valid ("-1 mins"), "valid duration -1 mins");
t.ok (d.valid ("-1 min"), "valid duration -1 min");
t.ok (d.valid ("0mins"), "valid duration 0mins");
t.ok (d.valid ("0min"), "valid duration 0min");
t.ok (d.valid ("1mins"), "valid duration 1mins");
t.ok (d.valid ("1min"), "valid duration 1min");
t.ok (d.valid ("10mins"), "valid duration 10mins");
t.ok (d.valid ("10min"), "valid duration 10min");
t.ok (d.valid ("-1mins"), "valid duration -1mins");
t.ok (d.valid ("-1min"), "valid duration -1min");
t.ok (d.valid ("0 secs"), "valid duration 0 secs");
t.ok (d.valid ("0 sec"), "valid duration 0 sec");
t.ok (d.valid ("0secs"), "valid duration 0secs");
t.ok (d.valid ("0sec"), "valid duration 0sec");
t.ok (d.valid ("0s"), "valid duration 0s");
t.ok (d.valid ("1 secs"), "valid duration 1 secs");
t.ok (d.valid ("1 sec"), "valid duration 1 sec");
t.ok (d.valid ("1secs"), "valid duration 1secs");
t.ok (d.valid ("1sec"), "valid duration 1sec");
t.ok (d.valid ("1s"), "valid duration 1s");
t.ok (d.valid ("10 secs"), "valid duration 10 secs");
t.ok (d.valid ("10 sec"), "valid duration 10 sec");
t.ok (d.valid ("10secs"), "valid duration 10secs");
t.ok (d.valid ("10sec"), "valid duration 10sec");
t.ok (d.valid ("10s"), "valid duration 10s");
t.ok (d.valid ("-1 secs"), "valid duration -1 secs");
t.ok (d.valid ("-1 sec"), "valid duration -1 sec");
t.ok (d.valid ("-1secs"), "valid duration -1secs");
t.ok (d.valid ("-1sec"), "valid duration -1sec");
t.ok (d.valid ("-1s"), "valid duration -1s");
t.ok (d.valid ("-"), "valid duration -");
@ -652,58 +652,58 @@ int main (int argc, char** argv)
t.is (convertDuration ("biannual"), 730, "valid duration biannual");
t.is (convertDuration ("biyearly"), 730, "valid duration biyearly");
t.is (convertDuration ("0 yrs"), 0, "valid duration 0 yrs");
t.is (convertDuration ("0 yr"), 0, "valid duration 0 yr");
t.is (convertDuration ("0yrs"), 0, "valid duration 0yrs");
t.is (convertDuration ("0yr"), 0, "valid duration 0yr");
t.is (convertDuration ("0y"), 0, "valid duration 0y");
t.is (convertDuration ("1 yrs"), 365, "valid duration 1 yrs");
t.is (convertDuration ("1 yr"), 365, "valid duration 1 yr");
t.is (convertDuration ("1yrs"), 365, "valid duration 1yrs");
t.is (convertDuration ("1yr"), 365, "valid duration 1yr");
t.is (convertDuration ("1y"), 365, "valid duration 1y");
t.is (convertDuration ("10 yrs"), 3650, "valid duration 10 yrs");
t.is (convertDuration ("10 yr"), 3650, "valid duration 10 yr");
t.is (convertDuration ("10yrs"), 3650, "valid duration 10yrs");
t.is (convertDuration ("10yr"), 3650, "valid duration 10yr");
t.is (convertDuration ("10y"), 3650, "valid duration 10y");
t.is (convertDuration ("0 qtrs"), 0, "valid duration 0 qtrs");
t.is (convertDuration ("0 qtr"), 0, "valid duration 0 qtr");
t.is (convertDuration ("0qtrs"), 0, "valid duration 0qtrs");
t.is (convertDuration ("0qtr"), 0, "valid duration 0qtr");
t.is (convertDuration ("0q"), 0, "valid duration 0q");
t.is (convertDuration ("1 qtrs"), 91, "valid duration 1 qtrs");
t.is (convertDuration ("1 qtr"), 91, "valid duration 1 qtr");
t.is (convertDuration ("1qtrs"), 91, "valid duration 1qtrs");
t.is (convertDuration ("1qtr"), 91, "valid duration 1qtr");
t.is (convertDuration ("1q"), 91, "valid duration 1q");
t.is (convertDuration ("10 qtrs"), 910, "valid duration 10 qtrs");
t.is (convertDuration ("10 qtr"), 910, "valid duration 10 qtr");
t.is (convertDuration ("10qtrs"), 910, "valid duration 10qtrs");
t.is (convertDuration ("10qtr"), 910, "valid duration 10qtr");
t.is (convertDuration ("10q"), 910, "valid duration 10q");
t.is (convertDuration ("0 mths"), 0, "valid duration 0 mths");
t.is (convertDuration ("0 mth"), 0, "valid duration 0 mth");
t.is (convertDuration ("0mths"), 0, "valid duration 0mths");
t.is (convertDuration ("0mth"), 0, "valid duration 0mth");
t.is (convertDuration ("0mo"), 0, "valid duration 0mo");
t.is (convertDuration ("1 mths"), 30, "valid duration 1 mths");
t.is (convertDuration ("1 mth"), 30, "valid duration 1 mth");
t.is (convertDuration ("1mths"), 30, "valid duration 1mths");
t.is (convertDuration ("1mth"), 30, "valid duration 1mth");
t.is (convertDuration ("1mo"), 30, "valid duration 1mo");
t.is (convertDuration ("10 mths"), 300, "valid duration 10 mths");
t.is (convertDuration ("10 mth"), 300, "valid duration 10 mth");
t.is (convertDuration ("10mths"), 300, "valid duration 10mths");
t.is (convertDuration ("10mth"), 300, "valid duration 10mth");
t.is (convertDuration ("10mo"), 300, "valid duration 10mo");
t.is (convertDuration ("0m"), 0, "valid duration 0m");
t.is (convertDuration ("1m"), 30, "valid duration 1m");
t.is (convertDuration ("10m"), 300, "valid duration 10m");
t.is (convertDuration ("-1m"), 30, "valid duration -1m");
t.is (convertDuration ("0 wks"), 0, "valid duration 0 wks");
t.is (convertDuration ("0 wk"), 0, "valid duration 0 wk");
t.is (convertDuration ("0wks"), 0, "valid duration 0wks");
t.is (convertDuration ("0wk"), 0, "valid duration 0wk");
t.is (convertDuration ("0w"), 0, "valid duration 0w");
t.is (convertDuration ("1 wks"), 7, "valid duration 1 wks");
t.is (convertDuration ("1 wk"), 7, "valid duration 1 wk");
t.is (convertDuration ("1wks"), 7, "valid duration 1wks");
t.is (convertDuration ("1wk"), 7, "valid duration 1wk");
t.is (convertDuration ("1w"), 7, "valid duration 1w");
t.is (convertDuration ("10 wks"), 70, "valid duration 10 wks");
t.is (convertDuration ("10 wk"), 70, "valid duration 10 wk");
t.is (convertDuration ("10wks"), 70, "valid duration 10wks");
t.is (convertDuration ("10wk"), 70, "valid duration 10wk");
t.is (convertDuration ("10w"), 70, "valid duration 10w");
t.is (convertDuration ("0 days"), 0, "valid duration 0 days");
t.is (convertDuration ("0 day"), 0, "valid duration 0 day");
t.is (convertDuration ("0days"), 0, "valid duration 0days");
t.is (convertDuration ("0day"), 0, "valid duration 0day");
t.is (convertDuration ("0d"), 0, "valid duration 0d");
t.is (convertDuration ("1 days"), 1, "valid duration 1 days");
t.is (convertDuration ("1 day"), 1, "valid duration 1 day");
t.is (convertDuration ("1days"), 1, "valid duration 1days");
t.is (convertDuration ("1day"), 1, "valid duration 1day");
t.is (convertDuration ("1d"), 1, "valid duration 1d");
t.is (convertDuration ("10 days"), 10, "valid duration 10 days");
t.is (convertDuration ("10 day"), 10, "valid duration 10 day");
t.is (convertDuration ("10days"), 10, "valid duration 10days");
t.is (convertDuration ("10day"), 10, "valid duration 10day");
t.is (convertDuration ("10d"), 10, "valid duration 10d");
t.is (convertDuration ("-"), 0, "valid duration -");