Added time parsing
This commit is contained in:
parent
654c1c0b94
commit
12f9ddbb95
3 changed files with 29 additions and 20 deletions
20
parsetime.yy
20
parsetime.yy
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue