From 568cb32677e4439d752d947da27c56cbf1d4b38f Mon Sep 17 00:00:00 2001 From: Dmitry Astapov Date: Wed, 11 Sep 2019 23:19:21 +0100 Subject: [PATCH] lib: more runPeriodicTransaction tests (lifted from #1085 and spanIntervalIntersect) --- .../Hledger/Data/PeriodicTransaction.hs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/hledger-lib/Hledger/Data/PeriodicTransaction.hs b/hledger-lib/Hledger/Data/PeriodicTransaction.hs index 153d67e87..3f986cff5 100644 --- a/hledger-lib/Hledger/Data/PeriodicTransaction.hs +++ b/hledger-lib/Hledger/Data/PeriodicTransaction.hs @@ -45,6 +45,17 @@ _ptgen str = do nullperiodictransaction{ ptperiodexpr=t , ptspan=s, ptinterval=i, ptpostings=["a" `post` usd 1] } nulldatespan +_ptgenspan str span = do + let + t = T.pack str + (i,s) = parsePeriodExpr' nulldate t + case checkPeriodicTransactionStartDate i s t of + Just e -> error' e + Nothing -> + mapM_ (putStr . showTransaction) $ + runPeriodicTransaction + nullperiodictransaction{ ptperiodexpr=t , ptspan=s, ptinterval=i, ptpostings=["a" `post` usd 1] } + span --deriving instance Show PeriodicTransaction -- for better pretty-printing: @@ -199,6 +210,28 @@ instance Show PeriodicTransaction where -- >>> let reportperiod="daily from 2018/01/03" in let (i,s) = parsePeriodExpr' nulldate reportperiod in runPeriodicTransaction (nullperiodictransaction{ptperiodexpr=reportperiod, ptspan=s, ptinterval=i, ptpostings=["a" `post` usd 1]}) (DateSpan (Just $ parsedate "2018-01-01") (Just $ parsedate "2018-01-03")) -- [] -- +-- >>> _ptgenspan "every 3 months from 2019-05" (mkdatespan "2020-01-01" "2020-02-01") +-- +-- >>> _ptgenspan "every 3 months from 2019-05" (mkdatespan "2020-02-01" "2020-03-01") +-- 2020/02/01 +-- ; generated-transaction:~ every 3 months from 2019-05 +-- a $1.00 +-- +-- >>> _ptgenspan "every 3 days from 2018" (mkdatespan "2018-01-01" "2018-01-05") +-- 2018/01/01 +-- ; generated-transaction:~ every 3 days from 2018 +-- a $1.00 +-- +-- 2018/01/04 +-- ; generated-transaction:~ every 3 days from 2018 +-- a $1.00 +-- +-- >>> _ptgenspan "every 3 days from 2018" (mkdatespan "2018-01-02" "2018-01-05") +-- 2018/01/04 +-- ; generated-transaction:~ every 3 days from 2018 +-- a $1.00 +-- + runPeriodicTransaction :: PeriodicTransaction -> DateSpan -> [Transaction] runPeriodicTransaction PeriodicTransaction{..} requestedspan = [ t{tdate=d} | (DateSpan (Just d) _) <- alltxnspans, spanContainsDate requestedspan d ]