th-printf-0.8: tests/printf/format.hs
{-# LANGUAGE QuasiQuotes #-}
{-# OPTIONS_GHC -Wwarn #-}
module Main where
import qualified Data.Text as S
import qualified Data.Text.Lazy as L
import Foreign.Ptr
import GeneratedSpec
import Language.Haskell.Printf
import Test.HUnit
import Test.Hspec
main :: IO ()
main = hspec $ describe "th-printf" $ do
GeneratedSpec.spec
it "text" $ do
-- sanity checking that text can be rendered
-- all the actual string formatting is in GeneratedSpec
[s|Hello, %Q!|] (S.pack "world") @?= "Hello, world!"
[s|Hello, %q!|] (L.pack "world") @?= "Hello, world!"
it "hexadecimal float" $ do
[s|%a|] 0.857421875 @?= "0x1.b7p-1"
[s|%A|] 3.1415926 @?= "0X1.921FB4D12D84AP+1"
[s|%.3a|] 1.999999999 @?= "0x1.000p+1"
[s|%.0a|] 1.999999999 @?= "0x1p+1"
[s|%#.0a|] 1.999999999 @?= "0x1.p+1"
[s|%.3a|] 0.7576 @?= "0x1.83ep-1"
[s|%015.3a|] 0.7576 @?= "0x000001.83ep-1"
[s|% 15.3a|] 0.7576 @?= " 0x1.83ep-1"
it "Show instances" $ do
[s|%?|] () @?= "()"
[s|%10?|] () @?= " ()"
it "pointer" $ do
[s|%p|] nullPtr @?= "0x0"
[s|%15p|] fakePtr @?= " 0xdeadbeef"
-- sign flag does nothing
[s|%+p|] fakePtr @?= "0xdeadbeef"
-- prefix flag does nothing
[s|%#p|] fakePtr @?= "0xdeadbeef"
-- zero flag does nothing
[s|%015p|] fakePtr @?= " 0xdeadbeef"
-- left-pad flag does nothing
[s|%-15p|] fakePtr @?= " 0xdeadbeef"
fakePtr :: Ptr ()
fakePtr = nullPtr `plusPtr` 0xdeadbeef