-- | 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
--------------------------------------------------------------------------------