diff options
Diffstat (limited to 'test/Spec.hs')
| -rw-r--r-- | test/Spec.hs | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/test/Spec.hs b/test/Spec.hs deleted file mode 100644 index 32bd1e7..0000000 --- a/test/Spec.hs +++ /dev/null @@ -1,80 +0,0 @@ -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# OPTIONS_GHC -fno-warn-orphans #-} -import Blessings -import Control.Exception -import Data.Sequences qualified as S -import System.IO.Unsafe -import System.Timeout -import Test.Hspec -import Test.QuickCheck - -unsafeTimeout :: Int -> a -> a -unsafeTimeout n f = - case unsafePerformIO $ timeout n (evaluate f) of - Nothing -> error "timeout" - Just y -> y - -instance Arbitrary a => Arbitrary (Blessings a) where - arbitrary = - oneof - [ Plain <$> arbitrary - , pure Empty - , (<>) <$> arbitrary <*> arbitrary - , SGR <$> arbitrary <*> arbitrary - ] - -main :: IO () -main = - hspec $ do - describe "Blessings" $ do - it "obeys the Semigroup laws" $ - property $ \(x :: Blessings String) y z -> - (x <> y) <> z == x <> (y <> z) - - it "obeys the Monoid laws" $ - property $ \(x :: Blessings String) -> - x <> mempty == x && x == mempty <> x - - it "pp (normalize x) == pp x" $ - property $ \(x :: Blessings String) -> - pp (stripSGR (normalize x)) == pp (stripSGR x) - - it "take 1 x <> drop 1 x == x" $ - property $ \(x :: Blessings String) -> - normalize (S.take 1 x <> S.drop 1 x) == normalize x - - it "uncurry (<>) (splitAt i x) == x" $ - property $ \(i :: Int, x :: Blessings String) -> - unsafeTimeout 100000 $ - normalize (uncurry (<>) (S.splitAt i x)) == normalize x - - it "splitAt produces pairs with elements of proper length" $ - property $ \(i :: Int, x :: Blessings String) -> - unsafeTimeout 100000 $ - let - (l, r) = S.splitAt i x - n = S.lengthIndex x - in - if | i <= 0 -> S.lengthIndex l == 0 && S.lengthIndex r == n - | i <= n -> S.lengthIndex l == i && S.lengthIndex r == n - i - | otherwise -> S.lengthIndex l == n && S.lengthIndex r == 0 - - let infx = mconcat (repeat (Plain "x" :: Blessings String)) - - it "can take from infinite structure" $ - property $ \(n :: NonNegative Int) -> - unsafeTimeout 100000 $ - let i = getNonNegative n in - S.lengthIndex (S.take i infx) == i - - it "can drop from infinite structure" $ - property $ \(n :: NonNegative Int) -> - unsafeTimeout 100000 $ - let i = getNonNegative n in - S.lengthIndex (S.take i (S.drop i infx)) == i - - it "can take concat of infinite structures" $ - property $ \(x :: Blessings String) -> - unsafeTimeout 100000 $ - S.lengthIndex (S.take 1 $ infx <> x) <= 1 |
