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 ; optspace: /* epsilon */ | TOK_SPACE ;
date: absdate { date:
absdate opttime
{
if (timeval->tm_gmtoff != -1) { if (timeval->tm_gmtoff != -1) {
boost::posix_time::ptime::time_duration_type offset; boost::posix_time::ptime::time_duration_type offset;
offset = boost::posix_time::seconds(timeval->tm_gmtoff); 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: isodate:
year TOK_FOURNUM opttime year TOK_FOURNUM optisotime
{ {
timeval->tm_year = $1.ival - 1900; timeval->tm_year = $1.ival - 1900;
timeval->tm_mon = $2.ival / 100 - 1; timeval->tm_mon = $2.ival / 100 - 1;
timeval->tm_mday = $3.ival % 100; timeval->tm_mday = $3.ival % 100;
}; };
opttime: /* epsilon */ | optisotime: /* epsilon */ |
'T' TOK_FOURNUM TOK_TWONUM optzone 'T' TOK_FOURNUM TOK_TWONUM optisozone
{ {
timeval->tm_hour = $2.ival / 100; timeval->tm_hour = $2.ival / 100;
timeval->tm_min = $2.ival % 100; timeval->tm_min = $2.ival % 100;
timeval->tm_sec = $3.ival; timeval->tm_sec = $3.ival;
}; };
optzone: /* epsilon */ | optisozone: /* epsilon */ |
'-' TOK_FOURNUM { '-' TOK_FOURNUM {
timeval->tm_gmtoff = - (($2.ival / 100) * 3600 + ($2.ival % 100) * 60); 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::setUp() {}
void CommodityTestCase::tearDown() {} void CommodityTestCase::tearDown() {}
void CommodityTestCase::testConstructors()
{
}
void CommodityTestCase::testPriceHistory() void CommodityTestCase::testPriceHistory()
{ {
ptime jan17_07 = boost::posix_time::time_from_string("2007/01/17 00:00:00"); ptime jan17_07 = parse_datetime("2007/01/17 00:00:00");
ptime feb27_07 = boost::posix_time::time_from_string("2007/02/27 18:00:00"); ptime feb27_07 = parse_datetime("2007/02/27 18:00:00");
ptime feb28_07 = boost::posix_time::time_from_string("2007/02/28 06:00:00"); ptime feb28_07 = parse_datetime("2007/02/28 06:00:00");
ptime feb28_07sbm = boost::posix_time::time_from_string("2007/02/28 11:59:59"); ptime feb28_07sbm = parse_datetime("2007/02/28 11:59:59");
ptime mar01_07 = boost::posix_time::time_from_string("2007/03/01 00:00:00"); ptime mar01_07 = parse_datetime("2007/03/01 00:00:00");
ptime apr15_07 = boost::posix_time::time_from_string("2007/04/15 13:00:00"); ptime apr15_07 = parse_datetime("2007/04/15 13:00:00");
// jww (2007-04-17): tbd // jww (2007-04-17): tbd
amount_t x1("100.10 AAPL"); 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. // deal of their state depends on how they were seen to be used.
commodity_t& aapl(x1.commodity()); 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); assertValid(x1);
} }

View file

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