Added time parsing

This commit is contained in:
John Wiegley 2007-04-19 16:10:43 +00:00
parent 654c1c0b94
commit 12f9ddbb95
3 changed files with 29 additions and 20 deletions

View file

@ -95,7 +95,9 @@ input: date optspace ;
optspace: /* epsilon */ | TOK_SPACE ;
date: absdate {
date:
absdate opttime
{
if (timeval->tm_gmtoff != -1) {
boost::posix_time::ptime::time_duration_type offset;
offset = boost::posix_time::seconds(timeval->tm_gmtoff);
@ -193,23 +195,31 @@ absdate:
}
;
opttime: /* epsilon */ |
TOK_SPACE TOK_TWONUM ':' TOK_TWONUM ':' TOK_TWONUM
{
timeval->tm_hour = $2.ival;
timeval->tm_min = $4.ival;
timeval->tm_sec = $6.ival;
};
isodate:
year TOK_FOURNUM opttime
year TOK_FOURNUM optisotime
{
timeval->tm_year = $1.ival - 1900;
timeval->tm_mon = $2.ival / 100 - 1;
timeval->tm_mday = $3.ival % 100;
};
opttime: /* epsilon */ |
'T' TOK_FOURNUM TOK_TWONUM optzone
optisotime: /* epsilon */ |
'T' TOK_FOURNUM TOK_TWONUM optisozone
{
timeval->tm_hour = $2.ival / 100;
timeval->tm_min = $2.ival % 100;
timeval->tm_sec = $3.ival;
};
optzone: /* epsilon */ |
optisozone: /* epsilon */ |
'-' TOK_FOURNUM {
timeval->tm_gmtoff = - (($2.ival / 100) * 3600 + ($2.ival % 100) * 60);
}

View file

@ -8,19 +8,14 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CommodityTestCase, "numerics");
void CommodityTestCase::setUp() {}
void CommodityTestCase::tearDown() {}
void CommodityTestCase::testConstructors()
{
}
void CommodityTestCase::testPriceHistory()
{
ptime jan17_07 = boost::posix_time::time_from_string("2007/01/17 00:00:00");
ptime feb27_07 = boost::posix_time::time_from_string("2007/02/27 18:00:00");
ptime feb28_07 = boost::posix_time::time_from_string("2007/02/28 06:00:00");
ptime feb28_07sbm = boost::posix_time::time_from_string("2007/02/28 11:59:59");
ptime mar01_07 = boost::posix_time::time_from_string("2007/03/01 00:00:00");
ptime apr15_07 = boost::posix_time::time_from_string("2007/04/15 13:00:00");
ptime jan17_07 = parse_datetime("2007/01/17 00:00:00");
ptime feb27_07 = parse_datetime("2007/02/27 18:00:00");
ptime feb28_07 = parse_datetime("2007/02/28 06:00:00");
ptime feb28_07sbm = parse_datetime("2007/02/28 11:59:59");
ptime mar01_07 = parse_datetime("2007/03/01 00:00:00");
ptime apr15_07 = parse_datetime("2007/04/15 13:00:00");
// jww (2007-04-17): tbd
amount_t x1("100.10 AAPL");
@ -29,9 +24,15 @@ void CommodityTestCase::testPriceHistory()
// deal of their state depends on how they were seen to be used.
commodity_t& aapl(x1.commodity());
aapl.add_price(now, amount_t("$10.20"));
aapl.add_price(jan17_07, amount_t("$10.20"));
aapl.add_price(feb27_07, amount_t("$13.40"));
aapl.add_price(feb28_07, amount_t("$18.33"));
aapl.add_price(feb28_07sbm, amount_t("$18.30"));
aapl.add_price(mar01_07, amount_t("$19.50"));
aapl.add_price(apr15_07, amount_t("$21.22"));
assertEqual(amount_t("$1021.02"), x1.value(now));
assertEqual(amount_t("$1831.83"), x1.value(feb28_07sbm));
assertEqual(amount_t("$2124.12"), x1.value(now));
assertValid(x1);
}

View file

@ -7,7 +7,6 @@ class CommodityTestCase : public CPPUNIT_NS::TestCase
{
CPPUNIT_TEST_SUITE(CommodityTestCase);
CPPUNIT_TEST(testConstructors);
CPPUNIT_TEST(testPriceHistory);
CPPUNIT_TEST(testLots);
CPPUNIT_TEST(testScalingBase);
@ -22,7 +21,6 @@ public:
virtual void setUp();
virtual void tearDown();
void testConstructors();
void testPriceHistory();
void testLots();
void testScalingBase();