The first of several conversions from String to (strict) Text, hopefully reducing space and time usage. This one shows a small improvement, with GHC 7.10.3 and text-1.2.2.1: hledger -f data/100x100x10.journal stats string: <<ghc: 39471064 bytes, 77 GCs, 198421/275048 avg/max bytes residency (3 samples), 2M in use, 0.000 INIT (0.001 elapsed), 0.015 MUT (0.020 elapsed), 0.010 GC (0.014 elapsed) :ghc>> text: <<ghc: 39268024 bytes, 77 GCs, 197018/270840 avg/max bytes residency (3 samples), 2M in use, 0.000 INIT (0.002 elapsed), 0.016 MUT (0.022 elapsed), 0.009 GC (0.011 elapsed) :ghc>> hledger -f data/1000x100x10.journal stats string: <<ghc: 318555920 bytes, 617 GCs, 2178997/7134472 avg/max bytes residency (7 samples), 16M in use, 0.000 INIT (0.001 elapsed), 0.129 MUT (0.136 elapsed), 0.067 GC (0.077 elapsed) :ghc>> text: <<ghc: 314248496 bytes, 612 GCs, 2074045/6617960 avg/max bytes residency (7 samples), 16M in use, 0.000 INIT (0.003 elapsed), 0.137 MUT (0.145 elapsed), 0.067 GC (0.079 elapsed) :ghc>> hledger -f data/10000x100x10.journal stats string: <<ghc: 3114763608 bytes, 6026 GCs, 18858950/75552024 avg/max bytes residency (11 samples), 201M in use, 0.000 INIT (0.000 elapsed), 1.331 MUT (1.372 elapsed), 0.699 GC (0.812 elapsed) :ghc>> text: <<ghc: 3071468920 bytes, 5968 GCs, 14120344/62951360 avg/max bytes residency (9 samples), 124M in use, 0.000 INIT (0.003 elapsed), 1.272 MUT (1.349 elapsed), 0.513 GC (0.578 elapsed) :ghc>> hledger -f data/100000x100x10.journal stats string: <<ghc: 31186579432 bytes, 60278 GCs, 135332581/740228992 avg/max bytes residency (13 samples), 1697M in use, 0.000 INIT (0.008 elapsed), 14.677 MUT (15.508 elapsed), 7.081 GC (8.074 elapsed) :ghc>> text: <<ghc: 30753427672 bytes, 59763 GCs, 117595958/666457240 avg/max bytes residency (14 samples), 1588M in use, 0.000 INIT (0.008 elapsed), 13.713 MUT (13.966 elapsed), 6.220 GC (7.108 elapsed) :ghc>>
72 lines
2.0 KiB
Haskell
72 lines
2.0 KiB
Haskell
-- {-# OPTIONS_GHC -F -pgmF htfpp #-}
|
|
{-# LANGUAGE CPP #-}
|
|
{- |
|
|
|
|
A simple test runner for hledger's built-in unit tests.
|
|
|
|
-}
|
|
|
|
module Hledger.Cli.Tests (
|
|
testmode
|
|
,test'
|
|
)
|
|
where
|
|
|
|
import Control.Monad
|
|
-- import Data.Text (Text)
|
|
import qualified Data.Text as T
|
|
import System.Exit
|
|
import Test.HUnit
|
|
|
|
import Hledger
|
|
import Hledger.Cli
|
|
|
|
#ifdef TESTS
|
|
|
|
import Test.Framework
|
|
import {-@ HTF_TESTS @-} Hledger.Read.JournalReader
|
|
|
|
-- | Run HTF unit tests and exit with success or failure.
|
|
test' :: CliOpts -> IO ()
|
|
test' _opts = htfMain htf_importedTests
|
|
|
|
#else
|
|
|
|
-- | Run HUnit unit tests and exit with success or failure.
|
|
test' :: CliOpts -> IO ()
|
|
test' opts = do
|
|
results <- runTests opts
|
|
if errors results > 0 || failures results > 0
|
|
then exitFailure
|
|
else exitWith ExitSuccess
|
|
|
|
testmode = (defCommandMode ["test"]) {
|
|
modeHelp = "run built-in self-tests"
|
|
,modeArgs = ([], Just $ argsFlag "[REGEXPS]")
|
|
,modeGroupFlags = Group {
|
|
groupUnnamed = []
|
|
,groupHidden = []
|
|
,groupNamed = [generalflagsgroup3]
|
|
}
|
|
}
|
|
|
|
-- | Run all or just the matched unit tests and return their HUnit result counts.
|
|
runTests :: CliOpts -> IO Counts
|
|
runTests = liftM (fst . flip (,) 0) . runTestTT . flatTests
|
|
|
|
-- -- | Run all or just the matched unit tests until the first failure or
|
|
-- -- error, returning the name of the problem test if any.
|
|
-- runTestsTillFailure :: CliOpts -> IO (Maybe String)
|
|
-- runTestsTillFailure _ = undefined -- do
|
|
-- -- let ts = flatTests opts
|
|
-- -- results = liftM (fst . flip (,) 0) $ runTestTT $
|
|
-- -- firstproblem = find (\counts -> )
|
|
|
|
-- | All or pattern-matched tests, as a flat list to show simple names.
|
|
flatTests opts = TestList $ filter (matchesAccount (queryFromOpts nulldate $ reportopts_ opts) . T.pack . testName) $ flattenTests tests_Hledger_Cli
|
|
|
|
-- -- | All or pattern-matched tests, in the original suites to show hierarchical names.
|
|
-- hierarchicalTests opts = filterTests (matchesAccount (queryFromOpts nulldate $ reportopts_ opts) . testName) tests_Hledger_Cli
|
|
|
|
#endif
|