packages feed

serokell-util-0.9.0: test/Test/Serokell/Data/Memory/UnitsSpec.hs

{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE ScopedTypeVariables       #-}

module Test.Serokell.Data.Memory.UnitsSpec
       ( spec
       ) where

import Universum

import Test.Hspec (Spec, describe)
import Test.Hspec.QuickCheck (prop)
import Test.QuickCheck ((===))

import Serokell.Arbitrary ()

import qualified Serokell.Data.Memory.Units as S

spec :: Spec
spec = describe "Unit conversion" $
           describe "Identity Properties" $ do
               prop "Byte" $
                   \(a :: S.Byte) -> a === bytesMid a
               prop "Kilobyte" $
                   \(a :: S.Kilobyte) -> a === bytesMid a
               prop "Megabyte" $
                   \(a :: S.Megabyte) -> a === bytesMid a
               prop "Gigabyte" $
                   \(a :: S.Gigabyte) -> a === bytesMid a
               prop "Terabyte" $
                   \(a :: S.Terabyte) -> a === bytesMid a

bytesMid :: forall u. S.MemoryUnit u => u -> u
bytesMid = S.convertUnit