implemented SubFix.Internal.encodeTime function

This commit is contained in:
Jonathan Lamothe 2020-11-10 15:29:46 -05:00
parent ee4dc1db48
commit 0310142814
4 changed files with 58 additions and 2 deletions

View File

@ -52,7 +52,15 @@ decodeTime = runStateT $ do
-- | Encodes a timestamp from a number of milliseconds -- | Encodes a timestamp from a number of milliseconds
encodeTime :: Integer -> String encodeTime :: Integer -> String
encodeTime = undefined encodeTime ms = let
(s, ms') = ms `divMod` 1000
(m, s') = s `divMod` 60
(h, m') = m `divMod` 60
in
mkNum 2 h ++ ":" ++
mkNum 2 m' ++ ":" ++
mkNum 2 s' ++ "," ++
mkNum 3 ms'
-- | Converts hours, minutes, seconds and milliseconds into the total -- | Converts hours, minutes, seconds and milliseconds into the total
-- number of milliseconds -- number of milliseconds
@ -99,4 +107,8 @@ nextChar = get >>= \case
put str put str
return ch return ch
mkNum :: Int -> Integer -> String
mkNum digits val =
reverse $ take digits $ reverse (show val) ++ repeat '0'
--jl --jl

View File

@ -4,7 +4,7 @@ cabal-version: 1.12
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: ce33ad286b77569617c489030c5bec8597e68ad69f7a34c12d95ad54614a59f2 -- hash: 0d6580c85ab3588e866980c3fede7319b7d6e699369dc88af2ec75c093c399cf
name: subfix name: subfix
version: 0.0.0 version: 0.0.0
@ -60,6 +60,7 @@ test-suite subfix-test
SubFix.ConvertSpec SubFix.ConvertSpec
SubFix.DecodeSpec SubFix.DecodeSpec
SubFix.Internal.DecodeTimeSpec SubFix.Internal.DecodeTimeSpec
SubFix.Internal.EncodeTimeSpec
SubFix.Internal.TimestampSpec SubFix.Internal.TimestampSpec
SubFix.InternalSpec SubFix.InternalSpec
SubFixSpec SubFixSpec

View File

@ -0,0 +1,41 @@
{-
subfix
Copyright (C) Jonathan Lamothe <jonathan@jlamothe.net>
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 <https://www.gnu.org/licenses/>.
-}
module SubFix.Internal.EncodeTimeSpec (spec) where
import Test.Hspec (Spec, context, describe, it, shouldBe)
import SubFix.Internal (encodeTime, timestamp)
spec :: Spec
spec = describe "encodeTime" $ mapM_
( \(label, input, expected) ->
context label $
it ("should be: " ++ expected) $
encodeTime input `shouldBe` expected
)
-- label, input, expected
[ ( "single digit", timestamp 1 2 3 4, "01:02:03,004" )
, ( "double digits", timestamp 10 11 12 13, "10:11:12,013" )
, ( "no padding", timestamp 10 11 12 123, "10:11:12,123" )
]
--jl

View File

@ -23,11 +23,13 @@ module SubFix.InternalSpec (spec) where
import Test.Hspec (Spec, describe) import Test.Hspec (Spec, describe)
import qualified SubFix.Internal.DecodeTimeSpec as DecodeTime import qualified SubFix.Internal.DecodeTimeSpec as DecodeTime
import qualified SubFix.Internal.EncodeTimeSpec as EncodeTime
import qualified SubFix.Internal.TimestampSpec as Timestamp import qualified SubFix.Internal.TimestampSpec as Timestamp
spec :: Spec spec :: Spec
spec = describe "Internal" $ do spec = describe "Internal" $ do
DecodeTime.spec DecodeTime.spec
EncodeTime.spec
Timestamp.spec Timestamp.spec
--jl --jl