packages feed

th-instance-reification-0.1.3: src/HTFTestSuite.hs

{-# OPTIONS_GHC -F -pgmF htfpp #-}

import Test.Framework
import THInstanceReification.Prelude.Basic
import THInstanceReification.Prelude.TH
import THInstanceReification
import HTFTestSuite.Prerequisites


main = htfMain $ htf_thisModulesTests



test_existingInstance = do
  assertBool $ read $( do
      t <- [t| (Int, Int) |]
      r <- isProperInstance ''Show [t]
      stringE $ show $ r
    )

test_nonExistingInstance = do
  assertBool $ not $ read $( do
      t <- [t| (Int, A) |]
      r <- isProperInstance ''Show [t]
      stringE $ show $ r
    )

test_existingInstanceOnMultiParamClass = do
  assertBool $ read $( do
      int <- [t|Int|]
      char <- [t|Char|]
      stringE . show =<< isProperInstance ''MultiParamClass [int, int, char]
    )

test_nonExistingInstanceOnMultiParamClass = do
  assertBool $ not $ read $( do
      int <- [t|Int|]
      char <- [t|Char|]
      a <- [t|A|]
      stringE . show =<< isProperInstance ''MultiParamClass [a, int, char]
    )


test_compositeTypes = do
  assertBool $ read $( do
      t <- [t|(Int, Char, Char)|]
      stringE . show =<< isProperInstance ''Show [t]
    )

test_compositeTypesMultiParam = do
  assertBool $ read $( do
      t <- [t|(Int, Char, Char)|]
      int <- [t|Int|]
      char <- [t|Char|]
      stringE . show =<< isProperInstance ''MultiParamClass [t, int, char]
    )


test_polyTypes = do
  assertBool $ read $( do
      t <- [t|(B Char)|]
      stringE . show =<< isProperInstance ''Show [t]
    )

test_synonyms = do
  assertBool $ read $( do
      t <- [t|C|]
      stringE . show =<< isProperInstance ''Show [t]
    )