packages feed

nonempty-wrapper-0.1.0.0: test/Data/NonEmptySpec.hs

module Data.NonEmptySpec
  ( main,
    spec,
  )
where

import Data.NonEmpty
import Data.Proxy
import Test.Hspec

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
  it "Singleton creation should be equivalent to a single element list" $
    singleton (Proxy @[Int]) 42 `shouldBe` trustedNonEmpty [42]
  it "nonEmpty creation on filled list should be equivalent to the wrapped list" $
    nonEmpty @[Int] [1, 2, 3] `shouldBe` Just (trustedNonEmpty [1, 2, 3])
  it "nonEmpty creation on empty list should be Nothing" $
    nonEmpty @[Int] [] `shouldBe` Nothing
  it "prepend should use semigroup" $
    singleton (Proxy @[Int]) 1 <| [2] `shouldBe` trustedNonEmpty [1, 2]
  it "append should use semigroup" $
    [1] |> singleton (Proxy @[Int]) 2 `shouldBe` trustedNonEmpty [1, 2]