mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-07-07 20:06:36 +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 <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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue