packages feed

what4-1.7.1.0: test/PrinterTests.hs

{-# LANGUAGE DataKinds #-}

import Data.Parameterized (knownNat)
import Prettyprinter
import Test.Tasty
import Test.Tasty.HUnit
import What4.BaseTypes (FloatPrecisionRepr (FloatingPointPrecisionRepr), NatRepr, StringInfoRepr (Char16Repr, Char8Repr, UnicodeRepr))
import What4.InterpretedFloatingPoint (FloatInfoRepr (DoubleDoubleFloatRepr, DoubleFloatRepr, HalfFloatRepr, QuadFloatRepr, SingleFloatRepr, X86_80FloatRepr))

testPrettyPrint :: (Pretty a) => String -> a -> String -> TestTree
testPrettyPrint tcName obj expected =
  testCase tcName $
    let s = show $ pretty obj
     in assertEqual "Should be equal" expected s

testPrintHalfFloatRepr :: TestTree
testPrintHalfFloatRepr = testPrettyPrint "Print half repr" HalfFloatRepr "Half"

testPrintFloatInfoRepr :: TestTree
testPrintFloatInfoRepr = testPrettyPrint "Print single repr" SingleFloatRepr "Float"

testPrintDoubleInfoRepr :: TestTree
testPrintDoubleInfoRepr = testPrettyPrint "Print double repr" DoubleFloatRepr "Double"

testPrintQuadInfoRepr :: TestTree
testPrintQuadInfoRepr = testPrettyPrint "Print quad repr" QuadFloatRepr "Quad"

testPrintX86_80InfoRepr :: TestTree
testPrintX86_80InfoRepr = testPrettyPrint "Print X86_80 repr" X86_80FloatRepr "X86_80"

testPrintDoubleDoubleInfoRepr :: TestTree
testPrintDoubleDoubleInfoRepr = testPrettyPrint "Print double double repr" DoubleDoubleFloatRepr "DoubleDouble"

five :: NatRepr 5
five = knownNat

eleven :: NatRepr 11
eleven = knownNat

main :: IO ()
main =
  defaultMain $
    testGroup "printers" $
      [ testGroup "Float printers" $
          [ testPrintFloatInfoRepr,
            testPrintHalfFloatRepr,
            testPrintDoubleInfoRepr,
            testPrintQuadInfoRepr,
            testPrintX86_80InfoRepr,
            testPrintDoubleDoubleInfoRepr
          ],
        testGroup "String repr printers" $
          [ testPrettyPrint "Print unicode repr" UnicodeRepr "Unicode",
            testPrettyPrint "Print char16 repr" Char16Repr "Char16",
            testPrettyPrint "Print char8 repr" Char8Repr "Char8"
          ],
        testGroup "Float precision repr prints" $
          [ testPrettyPrint "Print float precision repr" (FloatingPointPrecisionRepr five eleven) "(FloatingPrecision 5 11)"
          ]
      ]