From d71d3c86e95a4909f24394d9dfc8077f5797e78c Mon Sep 17 00:00:00 2001 From: Jonathan Lamothe Date: Sun, 1 Sep 2019 22:50:56 -0400 Subject: [PATCH] implemented padNum --- src/Mtlstats/Format.hs | 38 ++++++++++++++++++++++++++++++ test/FormatSpec.hs | 53 ++++++++++++++++++++++++++++++++++++++++++ test/Spec.hs | 2 ++ 3 files changed, 93 insertions(+) create mode 100644 src/Mtlstats/Format.hs create mode 100644 test/FormatSpec.hs diff --git a/src/Mtlstats/Format.hs b/src/Mtlstats/Format.hs new file mode 100644 index 0000000..34f8c73 --- /dev/null +++ b/src/Mtlstats/Format.hs @@ -0,0 +1,38 @@ +{- | + +mtlstats +Copyright (C) 2019 Rhéal Lamothe + + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +-} + +module Mtlstats.Format (padNum) where + +-- | Pad an 'Int' with leading zeroes to fit a certain character width +padNum + :: Int + -- ^ The width in characters + -> Int + -- ^ The value to format + -> String +padNum size n + | n < 0 = '-' : padNum (pred size) (-n) + | otherwise = let + str = show n + sLen = length str + pLen = size - sLen + pad = replicate pLen '0' + in pad ++ str diff --git a/test/FormatSpec.hs b/test/FormatSpec.hs new file mode 100644 index 0000000..1ad965c --- /dev/null +++ b/test/FormatSpec.hs @@ -0,0 +1,53 @@ +{- + +mtlstats +Copyright (C) 2019 Rhéal Lamothe + + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +-} + +module FormatSpec (spec) where + +import Test.Hspec (Spec, context, describe, it, shouldBe) + +import Mtlstats.Format + +spec :: Spec +spec = describe "Mtlstats.Format" + padNumSpec + +padNumSpec :: Spec +padNumSpec = describe "padNum" $ do + + context "zero, four digits" $ + it "should be 0000" $ + padNum 4 0 `shouldBe` "0000" + + context "123, four digits" $ + it "should be 0123" $ + padNum 4 123 `shouldBe` "0123" + + context "12345, four digits" $ + it "should be 12345" $ + padNum 4 12345 `shouldBe` "12345" + + context "-12, four digits" $ + it "should be -012" $ + padNum 4 (-12) `shouldBe` "-012" + + context "-1234, four digits" $ + it "should be -1234" $ + padNum 4 (-1234) `shouldBe` "-1234" diff --git a/test/Spec.hs b/test/Spec.hs index aa86ce6..8982a05 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -22,9 +22,11 @@ along with this program. If not, see . import Test.Hspec (hspec) import qualified ActionsSpec as Actions +import qualified FormatSpec as Format import qualified TypesSpec as Types main :: IO () main = hspec $ do Types.spec Actions.spec + Format.spec