mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-08-20 04:13:07 +02:00
Duration
- Migrated methods and unit tests from OldDuration to Duration.
This commit is contained in:
parent
f77074785b
commit
965284875c
3 changed files with 79 additions and 2 deletions
|
@ -25,10 +25,12 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <cmake.h>
|
||||
#include <string>
|
||||
#include <stdlib.h>
|
||||
#include <Nibbler.h>
|
||||
#include <Lexer.h>
|
||||
#include <Duration.h>
|
||||
#include <text.h>
|
||||
|
||||
#define DAY 86400
|
||||
#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 ()
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
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
|
||||
{
|
||||
|
|
|
@ -34,9 +34,12 @@ class Duration
|
|||
{
|
||||
public:
|
||||
Duration (); // Default constructor
|
||||
Duration (const std::string&); // Parse
|
||||
~Duration (); // Destructor
|
||||
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;
|
||||
bool parse (const std::string&, std::string::size_type&);
|
||||
void clear ();
|
||||
|
|
|
@ -51,7 +51,7 @@ void testParse (
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
int main (int argc, char** argv)
|
||||
{
|
||||
UnitTest t (812);
|
||||
UnitTest t (835);
|
||||
|
||||
Duration dur;
|
||||
std::string::size_type start = 0;
|
||||
|
@ -389,6 +389,39 @@ int main (int argc, char** argv)
|
|||
testParse (t, "10sennight", 10, 140 * 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.
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue