packages feed

data-extend-generic-0.1.0.0: test/Spec.hs

{-# LANGUAGE DeriveGeneric #-}

import Test.Hspec
import Data.Extend
import GHC.Generics


data Test = Test | TestA {
      f1 :: Int,
      f2 :: Maybe Int,
      f3 :: Maybe Int
   } | TestB {
      g1 :: Int,
      g2 :: Maybe Int,
      g3 :: Maybe Int
   } deriving (Show, Generic, Eq)

test1A = TestA 1 (Just 1) Nothing
test2A = TestA 0 Nothing (Just 2)

test1B = TestB 1 (Just 1) Nothing
test2B = TestB 0 Nothing (Just 2)



instance Extend Test

main :: IO ()
main = hspec $
   describe "Data.Extend" $ do
      specify "Int" $
         (2 `extend` 1) `shouldBe` (2 :: Int)
      specify "String" $
         ("b" `extend` "a") `shouldBe` "b"
      specify "data 0" $
         (Test `extend` Test) `shouldBe` Test
      specify "data 1" $
         (test2A `extend` test1A) `shouldBe` TestA 0 (Just 1) (Just 2)
      specify "data 2" $
         (test2B `extend` test1B) `shouldBe` TestB 0 (Just 1) (Just 2)
      specify "data 3" $
         (test2B `extend` test1A) `shouldBe` test2B
      specify "data 4" $
         (test1A `extend` test2B) `shouldBe` test1A
      specify "data 5" $
         (test2A `extend` test1B) `shouldBe` test2A
      specify "data 6" $
         (test1B `extend` test2A) `shouldBe` test1B