From bb0de3dec2a610a3789c0fd02dd9e018e239b487 Mon Sep 17 00:00:00 2001 From: William Carroll Date: Sat, 18 Jan 2020 17:05:32 +0000 Subject: [PATCH] Begin tests for Haskell File module Cameron sent over some property tests for his File.split function, which is a part of a larger effort to port f.el, a nice library for working with file paths, over to Haskell. --- haskell-file/f.hs | 17 +++++++++++++++++ haskell-file/tests.hs | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 haskell-file/tests.hs diff --git a/haskell-file/f.hs b/haskell-file/f.hs index 9ddb930ee..295575f3f 100644 --- a/haskell-file/f.hs +++ b/haskell-file/f.hs @@ -1,7 +1,14 @@ module F ( join + , split ) where +-------------------------------------------------------------------------------- +-- Dependencies +-------------------------------------------------------------------------------- + +import Data.List (span) +import System.FilePath (FilePath, pathSeparator) import System.FilePath.Posix (FilePath) import qualified System.FilePath.Posix as F @@ -25,6 +32,16 @@ simpleAssert x y = join :: [FilePath] -> FilePath join = F.joinPath +-- | Split path and return list containing parts. +split :: FilePath -> [String] +split = splitJoin . span (/= pathSeparator) + where + splitJoin :: (String, String) -> [String] + splitJoin ([], []) = [] + splitJoin (a, []) = [a] + splitJoin (a, [_]) = [a] + splitJoin (a, _:b) = a : split b + -------------------------------------------------------------------------------- -- Tests -------------------------------------------------------------------------------- diff --git a/haskell-file/tests.hs b/haskell-file/tests.hs new file mode 100644 index 000000000..e3967b77d --- /dev/null +++ b/haskell-file/tests.hs @@ -0,0 +1,39 @@ +module FTest where +-------------------------------------------------------------------------------- +import Test.Tasty +import Test.Tasty.Hedgehog +import Hedgehog +-------------------------------------------------------------------------------- +import qualified Hedgehog as H +import qualified Hedgehog.Gen as Gen +import qualified Hedgehog.Range as Range +-------------------------------------------------------------------------------- +import Data.List (intercalate) +import System.FilePath (pathSeparator) +-------------------------------------------------------------------------------- +import F +-------------------------------------------------------------------------------- +main :: IO () +main + = defaultMain + . localOption (HedgehogTestLimit $ Just 50) + $ testGroup "f functions" + [ test_split + ] +-------------------------------------------------------------------------------- +test_split :: TestTree +test_split + = testGroup "split function" + [ testProperty "splits parts properly" splitSuccess + ] +splitSuccess :: Property +splitSuccess = property $ do + -- separator + -- <- H.forAll + -- $ Gen.element ['/', '\\'] + parts + <- H.forAll + . Gen.list (Range.linear 0 10) + $ Gen.list (Range.linear 1 10) Gen.alphaNum + let path = intercalate [pathSeparator] parts + F.split path === parts