packages feed

coincident-root-loci-0.2: test/Tests/Dual.hs

-- | Tests involving the cohomological dual


{-# LANGUAGE Rank2Types, GADTs, TypeFamilies #-}
module Tests.Dual where

--------------------------------------------------------------------------------

import Data.Proxy

import Math.Combinat.Classes
import Math.Combinat.Partitions

import Math.RootLoci.Algebra
import Math.RootLoci.Geometry
import Math.RootLoci.Misc

import qualified Math.RootLoci.Dual.Restriction  as MSc
import qualified Math.RootLoci.Dual.Localization as FNR

import qualified Math.RootLoci.CSM.Equivariant.Direct as Direct

import Math.RootLoci.Classic
import Math.RootLoci.CSM.Aluffi

import Tests.Common

import Test.Tasty
import Test.Tasty.HUnit

--------------------------------------------------------------------------------

all_tests = testGroup "dual classes"
  [ testCase "lemma 9.1.3"                         (forAllPartPos 15 "failed" prop_lemma913       ) 
  , testCase "proj degree matches Hilbert"         (forAllPartPos 15 "failed" prop_degree_Hilbert )
  , testCase "proj degree matches Aluffi"          (forAllPartPos 14 "failed" prop_degree_Aluffi  )
  , testCase "dual class agrees with localization" (forAllPartPos 14 "failed" prop_msc_equals_local)
  
  , testCase "dual class = lowest deg part of open CSM"   (forAllPartPos 10 "failed" prop_msc_equals_lowest_csm_open  )
  , testCase "dual class = lowest deg part of closed CSM" (forAllPartPos 10 "failed" prop_msc_equals_lowest_csm_closed)
  ]

prop_lemma913 part = and [ MSc.lemma913 part k | k<-[0..m] ] where m = numberOfParts part
 
prop_degree_Hilbert part = (MSc.degreeMSc part == hilbert      part)
prop_degree_Aluffi  part = (MSc.degreeMSc part == aluffiDegree part)

prop_msc_equals_local part = FNR.localizeDual part == chernToAB (MSc.affineDualMSc part)

prop_msc_equals_lowest_csm_open   part = MSc.dualClassFromProjCSM (Direct.directOpenCSM   part) == MSc.affineDualMSc part
prop_msc_equals_lowest_csm_closed part = MSc.dualClassFromProjCSM (Direct.directClosedCSM part) == MSc.affineDualMSc part

--------------------------------------------------------------------------------