- Migrated methods and unit tests from OldDuration to Duration.
This commit is contained in:
Paul Beckingham 2014-05-28 22:41:29 -04:00
parent f77074785b
commit 965284875c
3 changed files with 79 additions and 2 deletions

View file

@ -25,10 +25,12 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#include <cmake.h> #include <cmake.h>
#include <string>
#include <stdlib.h> #include <stdlib.h>
#include <Nibbler.h> #include <Nibbler.h>
#include <Lexer.h> #include <Lexer.h>
#include <Duration.h> #include <Duration.h>
#include <text.h>
#define DAY 86400 #define DAY 86400
#define HOUR 3600 #define HOUR 3600
@ -107,11 +109,50 @@ Duration::Duration ()
{ {
} }
////////////////////////////////////////////////////////////////////////////////
Duration::Duration (const std::string& input)
: _secs (0)
{
if (digitsOnly (input))
{
time_t value = (time_t) strtol (input.c_str (), NULL, 10);
if (value == 0 || value > 60)
{
_secs = value;
return;
}
}
std::string::size_type idx = 0;
parse (input, idx);
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Duration::~Duration () Duration::~Duration ()
{ {
} }
////////////////////////////////////////////////////////////////////////////////
bool Duration::operator< (const Duration& other)
{
return _secs < other._secs;
}
////////////////////////////////////////////////////////////////////////////////
bool Duration::operator> (const Duration& other)
{
return _secs > other._secs;
}
////////////////////////////////////////////////////////////////////////////////
Duration& Duration::operator= (const Duration& other)
{
if (this != &other)
_secs = other._secs;
return *this;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Duration::operator time_t () const Duration::operator time_t () const
{ {

View file

@ -34,9 +34,12 @@ class Duration
{ {
public: public:
Duration (); // Default constructor Duration (); // Default constructor
Duration (const std::string&); // Parse
~Duration (); // Destructor ~Duration (); // Destructor
Duration (const Duration&); // Unimplemented Duration (const Duration&); // Unimplemented
Duration& operator= (const Duration&); // Unimplemented bool operator< (const Duration&);
bool operator> (const Duration&);
Duration& operator= (const Duration&);
operator time_t () const; operator time_t () const;
bool parse (const std::string&, std::string::size_type&); bool parse (const std::string&, std::string::size_type&);
void clear (); void clear ();

View file

@ -51,7 +51,7 @@ void testParse (
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
UnitTest t (812); UnitTest t (835);
Duration dur; Duration dur;
std::string::size_type start = 0; std::string::size_type start = 0;
@ -389,6 +389,39 @@ int main (int argc, char** argv)
testParse (t, "10sennight", 10, 140 * day); testParse (t, "10sennight", 10, 140 * day);
testParse (t, "1.5sennight", 11, 21 * day); testParse (t, "1.5sennight", 11, 21 * day);
Duration left, right;
// operator<
left = Duration ("1sec"); right = Duration ("2secs"); t.ok (left < right, "duration 1sec < 2secs");
left = Duration ("-2secs"); right = Duration ("-1sec"); t.ok (left < right, "duration -2secs < -1sec");
left = Duration ("1sec"); right = Duration ("1min"); t.ok (left < right, "duration 1sec < 1min");
left = Duration ("1min"); right = Duration ("1hr"); t.ok (left < right, "duration 1min < 1hr");
left = Duration ("1hr"); right = Duration ("1d"); t.ok (left < right, "duration 1hr < 1d");
left = Duration ("1d"); right = Duration ("1w"); t.ok (left < right, "duration 1d < 1w");
left = Duration ("1w"); right = Duration ("1mo"); t.ok (left < right, "duration 1w < 1mo");
left = Duration ("1mo"); right = Duration ("1q"); t.ok (left < right, "duration 1mo < 1q");
left = Duration ("1q"); right = Duration ("1y"); t.ok (left < right, "duration 1q < 1y");
left = Duration ("-3s"); right = Duration ("-6s"); t.ok (right < left, "duration -6s < -3s");
// operator>
left = Duration ("2secs"); right = Duration ("1sec"); t.ok (left > right, "2sec > 1secs");
left = Duration ("-1sec"); right = Duration ("-2secs"); t.ok (left > right, "-1secs > -2sec");
left = Duration ("1min"); right = Duration ("1sec"); t.ok (left > right, "1min > 1sec");
left = Duration ("1hr"); right = Duration ("1min"); t.ok (left > right, "1hr > 1min");
left = Duration ("1d"); right = Duration ("1hr"); t.ok (left > right, "1d > 1hr");
left = Duration ("1w"); right = Duration ("1d"); t.ok (left > right, "1w > 1d");
left = Duration ("1mo"); right = Duration ("1w"); t.ok (left > right, "1mo > 1w");
left = Duration ("1q"); right = Duration ("1mo"); t.ok (left > right, "1q > 1mo");
left = Duration ("1y"); right = Duration ("1q"); t.ok (left > right, "1y > 1q");
left = Duration ("-3s"); right = Duration ("-6s"); t.ok (left > right, "duration -3s > -6s");
// operator<=
left = Duration ("1sec"); right = Duration ("2secs"); t.ok (left <= right, "duration 1sec <= 2secs");
left = Duration ("2secs"); right = Duration ("2secs"); t.ok (left <= right, "duration 1sec <= 2secs");
left = Duration ("2secs"); right = Duration ("1secs"); t.notok (left <= right, "duration NOT 1sec <= 2secs");
// TODO Formatting. // TODO Formatting.
return 0; return 0;