packages feed

ollama-haskell-0.3.0.0: test/Test/Ollama/Property/Roundtrip.hs

module Test.Ollama.Property.Roundtrip (tests) where

import Data.Aeson (decode, encode)
import Data.Text qualified as T
import Ollama
import Test.Ollama.Property.Arbitrary ()
import Test.Tasty
import Test.Tasty.QuickCheck

tests :: TestTree
tests =
  testGroup
    "Property & Roundtrip QuickCheck Tests"
    [ testProperty "Role JSON roundtrip: ∀ x. decode (encode x) == Just x" $
        \(r :: Role) -> decode (encode r) === Just r
    , testProperty "Message JSON roundtrip: ∀ x. decode (encode x) == Just x" $
        \(msg :: Message) -> decode (encode msg) === Just msg
    , testProperty "ModelName JSON roundtrip: ∀ x. decode (encode x) == Just x" $
        \(m :: ModelName) -> decode (encode m) === Just m
    , testProperty "Think JSON roundtrip: ∀ x. decode (encode x) == Just x" $
        \(t :: Think) -> decode (encode t) === Just t
    , testProperty "Digest JSON roundtrip: ∀ x. decode (encode x) == Just x" $
        \(d :: Digest) -> decode (encode d) === Just d
    , testProperty "Duration JSON roundtrip: ∀ x. decode (encode x) == Just x" $
        \(dur :: Duration) -> decode (encode dur) === Just dur
    , testProperty "Idempotency property: ∀ x. encode (decoded x) == encode x" $
        \(msg :: Message) -> case decode (encode msg) :: Maybe Message of
          Nothing -> property False
          Just decoded -> encode decoded === encode msg
    , testProperty "Smart constructor invariant: mkModelName never returns empty ModelName" $
        \txt -> case mkModelName (T.pack txt) of
          Left err -> err === "Model name cannot be empty"
          Right (ModelName name) -> not (T.null name) === True
    ]