{-# LANGUAGE OverloadedStrings #-} import Control.Monad import Data.Int import qualified Data.Monoid import qualified Data.Semigroup import qualified Data.Text.Lazy as LT import Formatting as F import Test.Hspec main :: IO () main = hspec spec spec :: Spec spec = do describe "Regression tests" (do describe "https://github.com/chrisdone/formatting/issues/36" (do it "format (later id <> later id) \"x\"" (shouldBe (format (later id Data.Monoid.<> later id) "x") "xx") it "format (later id <> later id) \"x\"" (shouldBe (format (later id Data.Semigroup.<> later id) "x") "xx")) describe "https://github.com/chrisdone/formatting/issues/31" (do it "10^6-1" (shouldBe (F.format F.int (10 ^ (16 :: Int) - 1 :: Int)) "9999999999999999")) describe "https://github.com/chrisdone/formatting/issues/28" (do it "-100" (shouldBe (sformat (groupInt 3 ',') (-100 :: Int)) "-100") it "-100,000,000" (shouldBe (sformat (groupInt 3 ',') (-100000000 :: Int)) "-100,000,000") it "100,000,000" (shouldBe (sformat (groupInt 3 ',') (-100000000 :: Int)) "-100,000,000")) describe "https://github.com/bos/text-format/issues/18" (do it "build (minBound :: Int)" (shouldBe (format build (minBound :: Int64)) "-9223372036854775808")) it "build (maxBound :: Int)" (shouldBe (format build (maxBound :: Int)) "9223372036854775807")) describe "Floating point" (do it "Fixed" (shouldBe (format (fixed 4) (12.123456 :: Double)) "12.1235") it "Variable" (shouldBe (format float (12.123456 :: Double)) "12.123456")) describe "Buildable a => Buildable [a]" (do it "\"\" :: [Char] (backwards compatibility)" (shouldBe (format build ("" :: String)) "") it "\"hi\" :: [Char] (backwards compatibility)" (shouldBe (format build ("hi" :: String)) "hi") it "[1,2,3] :: [Int]" (shouldBe (format build ([1,2,3] :: [Int])) "[1,2,3]") it "[] :: [Int]" (shouldBe (format build ([] :: [Int])) "[]")) describe "ords" $ do let tests :: [(Int, String)] tests = [ ( 1, "1st") , ( 2, "2nd") , ( 3, "3rd") , ( 4, "4th") , ( 5, "5th") , ( 6, "6th") , ( 7, "7th") , ( 8, "8th") , ( 9, "9th") , (10, "10th") , (11, "11th") , (12, "12th") , (13, "13th") , (14, "14th") , (15, "15th") , (16, "16th") , (17, "17th") , (18, "18th") , (19, "19th") , (20, "20th") , (21, "21st") , (22, "22nd") , (23, "23rd") , (24, "24th") , (25, "25th") , (26, "26th") , (27, "27th") , (28, "28th") , (29, "29th") , (30, "30th") , (31, "31st") , (31, "31st") , (32, "32nd") , (33, "33rd") , (34, "34th") ] forM_ tests $ \(input, output) -> it output $ format ords input `shouldBe` (LT.pack output)