packages feed

HABQT-0.1.0.0: test/FidelityTests.hs

module FidelityTests
  ( testFidelity
  ) where

import HABQTlib.Data
import qualified Test.QuickCheck as QC
import TestHelpers

fidProp :: QC.Positive Dim -> QC.Property
fidProp (QC.Positive dim) =
  let gen = do
        v1 <- QC.resize dim QC.arbitrary
        v2 <- QC.resize dim QC.arbitrary
        return (v1, v2)
      fidMatch :: (PureStateVector, PureStateVector) -> QC.Property
      fidMatch (sv1, sv2) =
        QC.property $
        abs (fidelity sv1 sv2 - fidelityDM (svToDM sv1) (svToDM sv2)) <= 1e-12
   in QC.forAll gen fidMatch

testFidelity :: IO ()
testFidelity = do
  putStrLn "Testing density matrix fidelity:"
  QC.quickCheckWith QC.stdArgs {QC.maxSuccess = 1000} fidProp