hahp-0.1.3: src/HAHP/Validation/Alternatives.hs
module HAHP.Validation.Alternatives where
import Control.Parallel.Strategies
import Data.Map (notMember)
import Data.Maybe
import HAHP.Data
import HAHP.Validation.Unique
validateAlternatives :: AHPDataSet
-> [AlternativesError]
validateAlternatives dataSet = validate' dataSet testsList
validate' :: AHPDataSet
-> [AHPDataSet -> Maybe AlternativesError]
-> [AlternativesError]
validate' dataSet checks = catMaybes $ parMap rseq (\check -> check dataSet) checks
testsList :: [AHPDataSet -> Maybe AlternativesError]
testsList = [ noAlternativesTest
, alternativesUnicityTest
, indicatorsValuesExistenceTest
]
noAlternativesTest :: AHPDataSet
-> Maybe AlternativesError
noAlternativesTest (_, alts) =
if not . null $ alts
then Nothing
else Just NoAlternativesError
alternativesUnicityTest :: AHPDataSet
-> Maybe AlternativesError
alternativesUnicityTest (_, alts) =
if null repeatedAlternativesNames
then Nothing
else Just AlternativesUnicityError {repeatedAlternativesNames = repeatedAlternativesNames}
where repeatedAlternativesNames = repeated . map altName $ alts
indicatorsValuesExistenceTest :: AHPDataSet
-> Maybe AlternativesError
indicatorsValuesExistenceTest (ahpTree, alts) =
if null errors
then Nothing
else Just IndicatorsValuesExistenceError { indValuesErrors = errors}
where indicatorsNames = map name (getTreeLeaves ahpTree)
errors = [ (alt, ind)
| alt <- alts
, ind <- indicatorsNames
, notMember ind . indValues $ alt
]