-------------------------------------------------------------------------------- -- See end of this file for licence information. -------------------------------------------------------------------------------- -- | -- Module : RDFDatatypeXsdIntegerTest -- Copyright : (c) 2003, Graham Klyne, 2009 Vasili I Galchin, 2011 Douglas Burke -- License : GPL V2 -- -- Maintainer : Douglas Burke -- Stability : experimental -- Portability : H98 -- -- This module contains test cases for variable binding values and -- variable binding modifier values. -- -------------------------------------------------------------------------------- module Main where import Swish.RDF.RDFDatatypeXsdInteger ( rdfDatatypeXsdInteger , rdfDatatypeValXsdInteger , typeNameXsdInteger, namespaceXsdInteger , axiomsXsdInteger, rulesXsdInteger , prefixXsdInteger ) import Swish.RDF.RDFVarBinding ( RDFVarBinding ) import Swish.RDF.RDFRuleset ( RDFRule , makeRDFGraphFromN3String ) import Swish.RDF.RDFDatatype ( RDFDatatypeMod , applyRDFDatatypeMod ) import Swish.RDF.RDFGraph ( RDFLabel(..), RDFGraph ) import Swish.RDF.ClassRestrictionRule (falseGraphStr) import Swish.RDF.Datatype ( typeName, typeRules, typeMkRules , getTypeAxiom, getTypeRule , DatatypeVal(..) , getDTMod , DatatypeMap(..) , DatatypeMod(..) , nullDatatypeMod ) import Swish.RDF.Ruleset ( Ruleset(..) , getRulesetRule ) import Swish.RDF.Rule ( Formula(..), Rule(..) , nullFormula, nullRule ) import Swish.RDF.VarBinding (makeVarBinding) import Swish.Utils.Namespace ( Namespace(..) , ScopedName(..) , makeScopedName ) import Swish.RDF.Vocabulary (namespaceDefault) import Swish.Utils.LookupMap ( LookupMap(..) , mapFindMaybe ) import Swish.Utils.ListHelpers ( equiv ) import Test.HUnit ( Test(TestCase,TestList) , Assertion , assertBool, assertEqual, assertFailure , runTestTT ) import Control.Monad (unless) import Data.Maybe (isJust, fromMaybe) ------------------------------------------------------------ -- Test case helpers ------------------------------------------------------------ assertMember :: (Eq a, Show a) => String -> a -> [a] -> Assertion assertMember preface expected actual = unless (expected `elem` actual ) (assertFailure msg) where msg = (if null preface then "" else preface ++ "\n") ++ "expected: " ++ show expected ++ "\nbut got: " ++ show actual test :: String -> Bool -> Test test lab bv = TestCase ( assertBool ("test:"++lab) bv ) testEq :: (Eq a, Show a) => String -> a -> a -> Test testEq lab a1 a2 = TestCase ( assertEqual ("testEq:"++lab) a1 a2 ) testElem :: (Eq a, Show a) => String -> a -> [a] -> Test testElem lab a1 as = TestCase ( assertMember ("testElem:"++lab) a1 as ) testLe :: (Ord a, Show a) => String -> Bool -> a -> a -> Test testLe lab eq a1 a2 = TestCase ( assertEqual ("testLe:"++lab) eq (a1<=a2) ) -- Test for Just x or Nothing testJust :: String -> Maybe a -> Test testJust lab av = TestCase ( assertBool ("testJust:"++lab) (isJust av) ) testNothing :: String -> Maybe a -> Test testNothing lab av = TestCase ( assertBool ("testJust:"++lab) (not $ isJust av) ) -- Compare lists and lists of lists and Maybe lists for set equivalence: data ListTest a = ListTest [a] instance (Eq a) => Eq (ListTest a) where (ListTest a1) == (ListTest a2) = a1 `equiv` a2 instance (Show a) => Show (ListTest a) where show (ListTest a) = show a data MaybeListTest a = MaybeListTest (Maybe [a]) instance (Eq a) => Eq (MaybeListTest a) where MaybeListTest (Just a1) == MaybeListTest (Just a2) = a1 `equiv` a2 MaybeListTest Nothing == MaybeListTest Nothing = True _ == _ = False instance (Show a) => Show (MaybeListTest a) where show (MaybeListTest a) = show a testEqv :: (Eq a, Show a) => String -> [a] -> [a] -> Test testEqv lab a1 a2 = TestCase ( assertEqual ("testEqv:"++lab) (ListTest a1) (ListTest a2) ) testEqvEqv :: (Eq a, Show a) => String -> [[a]] -> [[a]] -> Test testEqvEqv lab a1 a2 = TestCase ( assertEqual ("testEqvEqv:"++lab) ma1 ma2 ) where ma1 = ListTest $ map ListTest a1 ma2 = ListTest $ map ListTest a2 testHasEqv :: (Eq a, Show a) => String -> [a] -> [[a]] -> Test testHasEqv lab a1 a2 = TestCase ( assertMember ("testHasEqv:"++lab) ma1 ma2 ) where ma1 = ListTest a1 ma2 = map ListTest a2 testMaybeEqv :: (Eq a, Show a) => String -> Maybe [a] -> Maybe [a] -> Test testMaybeEqv lab a1 a2 = TestCase ( assertEqual ("testMaybeEqv:"++lab) ma1 ma2 ) where ma1 = (MaybeListTest a1) ma2 = (MaybeListTest a2) ------------------------------------------------------------ -- Misc values ------------------------------------------------------------ xsd_int_name :: String -> ScopedName xsd_int_name nam = ScopedName namespaceXsdInteger nam axiomXsdIntegerDT :: ScopedName axiomXsdIntegerDT = xsd_int_name "dt" ruleXsdIntegerAbs, ruleXsdIntegerNeg, ruleXsdIntegerSum, ruleXsdIntegerDiff, ruleXsdIntegerProd, ruleXsdIntegerDivMod, ruleXsdIntegerPower, ruleXsdIntegerEq, ruleXsdIntegerNe, ruleXsdIntegerLt, ruleXsdIntegerLe, ruleXsdIntegerGt, ruleXsdIntegerGe :: ScopedName ruleXsdIntegerAbs = xsd_int_name "Abs" ruleXsdIntegerNeg = xsd_int_name "Neg" ruleXsdIntegerSum = xsd_int_name "Sum" ruleXsdIntegerDiff = xsd_int_name "Diff" ruleXsdIntegerProd = xsd_int_name "Prod" ruleXsdIntegerDivMod = xsd_int_name "DivMod" ruleXsdIntegerPower = xsd_int_name "Power" ruleXsdIntegerEq = xsd_int_name "Eq" ruleXsdIntegerNe = xsd_int_name "Ne" ruleXsdIntegerLt = xsd_int_name "Lt" ruleXsdIntegerLe = xsd_int_name "Le" ruleXsdIntegerGt = xsd_int_name "Gt" ruleXsdIntegerGe = xsd_int_name "Ge" ------------------------------------------------------------ -- Basic rdfDatatypeXsdInteger tests ------------------------------------------------------------ getXsdIntegerAxiom :: ScopedName -> Formula RDFGraph getXsdIntegerAxiom scopnam = fromMaybe nullFormula $ getTypeAxiom scopnam rdfDatatypeXsdInteger getXsdIntegerRule :: ScopedName -> Rule RDFGraph getXsdIntegerRule scopnam = fromMaybe nullRule $ getTypeRule scopnam rdfDatatypeXsdInteger getXsdIntegerDTmod :: ScopedName -> DatatypeMod Integer RDFLabel RDFLabel getXsdIntegerDTmod scopnam = fromMaybe nullDatatypeMod $ getDTMod scopnam rdfDatatypeValXsdInteger testDatatypeSuite :: Test testDatatypeSuite = TestList [ testEq "testDatatype01" typeNameXsdInteger $ typeName rdfDatatypeXsdInteger , testEq "testDatatype02" namespaceXsdInteger $ rsNamespace (typeRules rdfDatatypeXsdInteger) , testEqv "testDatatype03" axiomsXsdInteger $ rsAxioms (typeRules rdfDatatypeXsdInteger) , testEqv "testDatatype04" rulesXsdInteger $ rsRules (typeRules rdfDatatypeXsdInteger) , testEq "testDatatype05" axiomXsdIntegerDT $ formName (getXsdIntegerAxiom axiomXsdIntegerDT) , testEq "testDatatype06" ruleXsdIntegerAbs $ ruleName (getXsdIntegerRule ruleXsdIntegerAbs) ] ------------------------------------------------------------ -- Basic rdfDatatypeValXsdInteger tests ------------------------------------------------------------ testDatatypeValSuite :: Test testDatatypeValSuite = TestList [ testEq "testDatatypeVal01" (Just 123) $ mapL2V (tvalMap rdfDatatypeValXsdInteger) "123" , testEq "testDatatypeVal02" (Just 0) $ mapL2V (tvalMap rdfDatatypeValXsdInteger) "0" , testEq "testDatatypeVal03" (Just 456) $ mapL2V (tvalMap rdfDatatypeValXsdInteger) "+000456" , testEq "testDatatypeVal04" (Just (-987)) $ mapL2V (tvalMap rdfDatatypeValXsdInteger) "-0987" , testEq "testDatatypeVal05" Nothing $ mapL2V (tvalMap rdfDatatypeValXsdInteger) "11x2" , testEq "testDatatypeVal06" Nothing $ mapL2V (tvalMap rdfDatatypeValXsdInteger) " 321" , testEq "testDatatypeVal07" Nothing $ mapL2V (tvalMap rdfDatatypeValXsdInteger) "321 " , testEq "testDatatypeVal11" (Just "123") $ mapV2L (tvalMap rdfDatatypeValXsdInteger) 123 , testEq "testDatatypeVal12" (Just "-987") $ mapV2L (tvalMap rdfDatatypeValXsdInteger) (-987) , testElem "testDatatypeVal21" dmodXsdIntegerAbs $ map dmName (tvalMod rdfDatatypeValXsdInteger) , testEq "testDatatypeVal22" dmodXsdIntegerAbs $ dmName (getXsdIntegerDTmod dmodXsdIntegerAbs) ] ------------------------------------------------------------ -- Variable binding modifier tests ------------------------------------------------------------ dmodXsdIntegerAbs, dmodXsdIntegerNeg, dmodXsdIntegerSum, dmodXsdIntegerDiff, dmodXsdIntegerProd, dmodXsdIntegerDivMod, dmodXsdIntegerPower, dmodXsdIntegerEq, dmodXsdIntegerNe, dmodXsdIntegerLt, dmodXsdIntegerLe, dmodXsdIntegerGt, dmodXsdIntegerGe :: ScopedName dmodXsdIntegerAbs = xsd_int_name "abs" dmodXsdIntegerNeg = xsd_int_name "neg" dmodXsdIntegerSum = xsd_int_name "sum" dmodXsdIntegerDiff = xsd_int_name "diff" dmodXsdIntegerProd = xsd_int_name "prod" dmodXsdIntegerDivMod = xsd_int_name "divmod" dmodXsdIntegerPower = xsd_int_name "power" dmodXsdIntegerEq = xsd_int_name "eq" dmodXsdIntegerNe = xsd_int_name "ne" dmodXsdIntegerLt = xsd_int_name "lt" dmodXsdIntegerLe = xsd_int_name "le" dmodXsdIntegerGt = xsd_int_name "gt" dmodXsdIntegerGe = xsd_int_name "ge" testVmodN :: [RDFLabel] -> String -> Maybe (RDFDatatypeMod Integer) -> [RDFVarBinding] -> [RDFVarBinding] -> Test testVmodN vars lab (Just dmod) ibinds obinds = testEqv lab obinds $ applyRDFDatatypeMod rdfDatatypeValXsdInteger dmod vars ibinds testVmodN _ lab Nothing _ _ = TestCase $ assertFailure $ "testVmodN:"++lab++", null variable binding modifier" testVmod2, testVmod3, testVmod4 :: String -> Maybe (RDFDatatypeMod Integer) -> [RDFVarBinding] -> [RDFVarBinding] -> Test testVmod2 = testVmodN [(Var "a"),(Var "b")] testVmod3 = testVmodN [(Var "a"),(Var "b"),(Var "c")] testVmod4 = testVmodN [(Var "a"),(Var "b"),(Var "c"),(Var "d")] -- make various kinds of RDF variable bindings rdfVR :: (String, ScopedName) -> (RDFLabel, RDFLabel) rdfVR (v,u) = (Var v,Res u) -- (Variable,Resource) rdfVB :: (String, String) -> (RDFLabel, RDFLabel) rdfVB (v,b) = (Var v,Blank b) -- (Variable,Blank) rdfVL :: (String, String) -> (RDFLabel, RDFLabel) rdfVL (v,l) = (Var v,Lit l Nothing) -- (Variable,Untyped literal) rdfVI :: (String, String) -> (RDFLabel, RDFLabel) rdfVI (v,l) = (Var v,Lit l (Just typeNameXsdInteger)) -- (Variable,Integer literal) makeBVR :: [(String,ScopedName)] -> RDFVarBinding makeBVR nls = makeVarBinding $ map rdfVR nls makeBVB :: [(String,String)] -> RDFVarBinding makeBVB nls = makeVarBinding $ map rdfVB nls makeBVI :: [(String,String)] -> RDFVarBinding makeBVI nls = makeVarBinding $ map rdfVI nls makeBVL :: [(String,String)] -> RDFVarBinding makeBVL nls = makeVarBinding $ map rdfVL nls -- Test null modifier testVarModify00 :: Test testVarModify00 = testVmod2 "testVarModify00" (Just nullDatatypeMod) [makeBVI [("a","123")]] [makeBVI [("a","123")]] -- Tests for xsd_integer:abs testVarModifyAbs01, testVarModifyAbs02, testVarModifyAbs03, testVarModifyAbs04, testVarModifyAbs05, testVarModifyAbs06, testVarModifyAbs07, testVarModifyAbs08, testVarModifyAbs09, testVarModifyAbs10 :: Test testVarModifyAbs01 = testVmod2 "testVarModifyAbs01" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVI [("b","123")]] [makeBVI [("a","123"),("b","123")]] testVarModifyAbs02 = testVmod2 "testVarModifyAbs02" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVI [("b","-123")]] [makeBVI [("a","123"),("b","-123")]] testVarModifyAbs03 = testVmod2 "testVarModifyAbs03" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVI [("a","123"),("b","123")]] [makeBVI [("a","123"),("b","123")]] testVarModifyAbs04 = testVmod2 "testVarModifyAbs04" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVI [("a","123"),("b","-123")]] [makeBVI [("a","123"),("b","-123")]] testVarModifyAbs05 = testVmod2 "testVarModifyAbs05" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVI [("a","-123"),("b","123")]] [] testVarModifyAbs06 = testVmod2 "testVarModifyAbs06" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVI [("a","123"),("b","456")]] [] testVarModifyAbs07 = testVmod2 "testVarModifyAbs07" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVI [("c","123")]] [] testVarModifyAbs08 = testVmod2 "testVarModifyAbs08" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVL [("b","123")]] [] testVarModifyAbs09 = testVmod2 "testVarModifyAbs09" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVR [("b",makeScopedName "" "http://ex.org/" "123")]] [] testVarModifyAbs10 = testVmod2 "testVarModifyAbs10" (getDTMod dmodXsdIntegerAbs rdfDatatypeValXsdInteger) [makeBVB [("b","123")]] [] -- Tests for xsd_integer:neg testVarModifyNeg01, testVarModifyNeg02, testVarModifyNeg03, testVarModifyNeg04, testVarModifyNeg05 :: Test testVarModifyNeg01 = testVmod2 "testVarModifyNeg01" (getDTMod dmodXsdIntegerNeg rdfDatatypeValXsdInteger) [makeBVI [("a","123"),("b","-123")]] [makeBVI [("a","123"),("b","-123")]] testVarModifyNeg02 = testVmod2 "testVarModifyNeg02" (getDTMod dmodXsdIntegerNeg rdfDatatypeValXsdInteger) [makeBVI [("a","-123"),("b","123")]] [makeBVI [("a","-123"),("b","123")]] testVarModifyNeg03 = testVmod2 "testVarModifyNeg03" (getDTMod dmodXsdIntegerNeg rdfDatatypeValXsdInteger) [makeBVI [("a","123"),("b","123")]] [] testVarModifyNeg04 = testVmod2 "testVarModifyNeg04" (getDTMod dmodXsdIntegerNeg rdfDatatypeValXsdInteger) [makeBVI [("b","123")]] [makeBVI [("a","-123"),("b","123")]] testVarModifyNeg05 = testVmod2 "testVarModifyNeg05" (getDTMod dmodXsdIntegerNeg rdfDatatypeValXsdInteger) [makeBVI [("a","-123")]] [makeBVI [("a","-123"),("b","123")]] -- Tests for xsd_integer:sum testVarModifySum01, testVarModifySum02, testVarModifySum03, testVarModifySum04, testVarModifySum05 :: Test testVarModifySum01 = testVmod3 "testVarModifySum01" (getDTMod dmodXsdIntegerSum rdfDatatypeValXsdInteger) [makeBVI [("a","33"),("b","22"),("c","11")]] [makeBVI [("a","33"),("b","22"),("c","11")]] testVarModifySum02 = testVmod3 "testVarModifySum02" (getDTMod dmodXsdIntegerSum rdfDatatypeValXsdInteger) [makeBVI [("b","22"),("c","11")]] [makeBVI [("a","33"),("b","22"),("c","11")]] testVarModifySum03 = testVmod3 "testVarModifySum03" (getDTMod dmodXsdIntegerSum rdfDatatypeValXsdInteger) [makeBVI [("a","33"),("c","11")]] [makeBVI [("a","33"),("b","22"),("c","11")]] testVarModifySum04 = testVmod3 "testVarModifySum04" (getDTMod dmodXsdIntegerSum rdfDatatypeValXsdInteger) [makeBVI [("a","33"),("b","22")]] [makeBVI [("a","33"),("b","22"),("c","11")]] testVarModifySum05 = testVmod3 "testVarModifySum05" (getDTMod dmodXsdIntegerSum rdfDatatypeValXsdInteger) [makeBVI [("a","44"),("b","22"),("c","11")]] [] -- Tests for xsd_integer:diff testVarModifyDiff01, testVarModifyDiff02, testVarModifyDiff03, testVarModifyDiff04, testVarModifyDiff05 :: Test testVarModifyDiff01 = testVmod3 "testVarModifyDiff01" (getDTMod dmodXsdIntegerDiff rdfDatatypeValXsdInteger) [makeBVI [("a","11"),("b","33"),("c","22")]] [makeBVI [("a","11"),("b","33"),("c","22")]] testVarModifyDiff02 = testVmod3 "testVarModifyDiff02" (getDTMod dmodXsdIntegerDiff rdfDatatypeValXsdInteger) [makeBVI [("b","33"),("c","22")]] [makeBVI [("a","11"),("b","33"),("c","22")]] testVarModifyDiff03 = testVmod3 "testVarModifyDiff03" (getDTMod dmodXsdIntegerDiff rdfDatatypeValXsdInteger) [makeBVI [("a","11"),("c","22")]] [makeBVI [("a","11"),("b","33"),("c","22")]] testVarModifyDiff04 = testVmod3 "testVarModifyDiff04" (getDTMod dmodXsdIntegerDiff rdfDatatypeValXsdInteger) [makeBVI [("a","11"),("b","33")]] [makeBVI [("a","11"),("b","33"),("c","22")]] testVarModifyDiff05 = testVmod3 "testVarModifyDiff05" (getDTMod dmodXsdIntegerDiff rdfDatatypeValXsdInteger) [makeBVI [("a","11"),("b","44"),("c","22")]] [] -- Tests for xsd_integer:prod -- -- Note: product can also be used to test if a value is -- an exact multiple of some other. testVarModifyProd01, testVarModifyProd02, testVarModifyProd03, testVarModifyProd04, testVarModifyProd05, testVarModifyProd06 :: Test testVarModifyProd01 = testVmod3 "testVarModifyProd01" (getDTMod dmodXsdIntegerProd rdfDatatypeValXsdInteger) [makeBVI [("a","6"),("b","2"),("c","3")]] [makeBVI [("a","6"),("b","2"),("c","3")]] testVarModifyProd02 = testVmod3 "testVarModifyProd02" (getDTMod dmodXsdIntegerProd rdfDatatypeValXsdInteger) [makeBVI [("b","2"),("c","3")]] [makeBVI [("a","6"),("b","2"),("c","3")]] testVarModifyProd03 = testVmod3 "testVarModifyProd03" (getDTMod dmodXsdIntegerProd rdfDatatypeValXsdInteger) [makeBVI [("a","6"),("c","3")]] [makeBVI [("a","6"),("b","2"),("c","3")]] testVarModifyProd04 = testVmod3 "testVarModifyProd04" (getDTMod dmodXsdIntegerProd rdfDatatypeValXsdInteger) [makeBVI [("a","6"),("c","3")]] [makeBVI [("a","6"),("b","2"),("c","3")]] testVarModifyProd05 = testVmod3 "testVarModifyProd05" (getDTMod dmodXsdIntegerProd rdfDatatypeValXsdInteger) [makeBVI [("a","7"),("b","2"),("c","3")]] [] testVarModifyProd06 = testVmod3 "testVarModifyProd06" (getDTMod dmodXsdIntegerProd rdfDatatypeValXsdInteger) [makeBVI [("a","7"),("b","2")]] [] -- Tests for xsd_integer:divmod -- -- Note: truncates downwards, so remainder is same sign as divisor -- cf. Haskell divMod function. testVarModifyDivMod01, testVarModifyDivMod02, testVarModifyDivMod03, testVarModifyDivMod04, testVarModifyDivMod05, testVarModifyDivMod06, testVarModifyDivMod07 :: Test testVarModifyDivMod01 = testVmod4 "testVarModifyDivMod01" (getDTMod dmodXsdIntegerDivMod rdfDatatypeValXsdInteger) [makeBVI [("a","2"),("b","1"),("c","7"),("d","3")]] [makeBVI [("a","2"),("b","1"),("c","7"),("d","3")]] testVarModifyDivMod02 = testVmod4 "testVarModifyDivMod02" (getDTMod dmodXsdIntegerDivMod rdfDatatypeValXsdInteger) [makeBVI [("c","7"),("d","3")]] [makeBVI [("a","2"),("b","1"),("c","7"),("d","3")]] testVarModifyDivMod03 = testVmod4 "testVarModifyDivMod03" (getDTMod dmodXsdIntegerDivMod rdfDatatypeValXsdInteger) [makeBVI [("c","-7"),("d","3")]] [makeBVI [("a","-3"),("b","2"),("c","-7"),("d","3")]] testVarModifyDivMod04 = testVmod4 "testVarModifyDivMod04" (getDTMod dmodXsdIntegerDivMod rdfDatatypeValXsdInteger) [makeBVI [("c","7"),("d","-3")]] [makeBVI [("a","-3"),("b","-2"),("c","7"),("d","-3")]] testVarModifyDivMod05 = testVmod4 "testVarModifyDivMod05" (getDTMod dmodXsdIntegerDivMod rdfDatatypeValXsdInteger) [makeBVI [("c","-7"),("d","-3")]] [makeBVI [("a","2"),("b","-1"),("c","-7"),("d","-3")]] testVarModifyDivMod06 = testVmod4 "testVarModifyDivMod06" (getDTMod dmodXsdIntegerDivMod rdfDatatypeValXsdInteger) [makeBVI [("a","2"),("b","5"),("c","7"),("d","3")]] [] testVarModifyDivMod07 = testVmod4 "testVarModifyDivMod07" (getDTMod dmodXsdIntegerDivMod rdfDatatypeValXsdInteger) [makeBVI [("a","2"),("b","1"),("d","3")]] [] -- Tests for xsd_integer:power testVarModifyPower01, testVarModifyPower02, testVarModifyPower03, testVarModifyPower04, testVarModifyPower05, testVarModifyPower06, testVarModifyPower07, testVarModifyPower08 :: Test testVarModifyPower01 = testVmod3 "testVarModifyPower01" (getDTMod dmodXsdIntegerPower rdfDatatypeValXsdInteger) [makeBVI [("a","8"),("b","2"),("c","3")]] [makeBVI [("a","8"),("b","2"),("c","3")]] testVarModifyPower02 = testVmod3 "testVarModifyPower02" (getDTMod dmodXsdIntegerPower rdfDatatypeValXsdInteger) [makeBVI [("b","2"),("c","3")]] [makeBVI [("a","8"),("b","2"),("c","3")]] testVarModifyPower03 = testVmod3 "testVarModifyPower03" (getDTMod dmodXsdIntegerPower rdfDatatypeValXsdInteger) [makeBVI [("a","8"),("c","3")]] [] testVarModifyPower04 = testVmod3 "testVarModifyPower04" (getDTMod dmodXsdIntegerPower rdfDatatypeValXsdInteger) [makeBVI [("a","8"),("b","2")]] [] testVarModifyPower05 = testVmod3 "testVarModifyPower05" (getDTMod dmodXsdIntegerPower rdfDatatypeValXsdInteger) [makeBVI [("a","8"),("b","3"),("c","2")]] [] testVarModifyPower06 = testVmod3 "testVarModifyPower06" (getDTMod dmodXsdIntegerPower rdfDatatypeValXsdInteger) [makeBVI [("b","55"),("c","0")]] [makeBVI [("a","1"),("b","55"),("c","0")]] testVarModifyPower07 = testVmod3 "testVarModifyPower07" (getDTMod dmodXsdIntegerPower rdfDatatypeValXsdInteger) [makeBVI [("b","-2"),("c","3")]] [makeBVI [("a","-8"),("b","-2"),("c","3")]] testVarModifyPower08 = testVmod3 "testVarModifyPower08" (getDTMod dmodXsdIntegerPower rdfDatatypeValXsdInteger) [makeBVI [("b","55"),("c","-2")]] [] -- Tests for xsd_integer:eq testVarModifyEq01, testVarModifyEq02, testVarModifyEq03, testVarModifyEq04, testVarModifyEq05 :: Test testVarModifyEq01 = testVmod2 "testVarModifyEq01" (getDTMod dmodXsdIntegerEq rdfDatatypeValXsdInteger) [makeBVI [("a","100"),("b","100")]] [makeBVI [("a","100"),("b","100")]] testVarModifyEq02 = testVmod2 "testVarModifyEq02" (getDTMod dmodXsdIntegerEq rdfDatatypeValXsdInteger) [makeBVI [("a","99"),("b","100")]] [] testVarModifyEq03 = testVmod2 "testVarModifyEq03" (getDTMod dmodXsdIntegerEq rdfDatatypeValXsdInteger) [makeBVI [("a","-99"),("b","-100")]] [] testVarModifyEq04 = testVmod2 "testVarModifyEq04" (getDTMod dmodXsdIntegerEq rdfDatatypeValXsdInteger) [makeBVI [("b","100")]] [] testVarModifyEq05 = testVmod2 "testVarModifyEq05" (getDTMod dmodXsdIntegerEq rdfDatatypeValXsdInteger) [makeBVI [("a","100")]] [] -- Tests for xsd_integer:ne testVarModifyNe01, testVarModifyNe02, testVarModifyNe03, testVarModifyNe04, testVarModifyNe05 :: Test testVarModifyNe01 = testVmod2 "testVarModifyNe01" (getDTMod dmodXsdIntegerNe rdfDatatypeValXsdInteger) [makeBVI [("a","100"),("b","100")]] [] testVarModifyNe02 = testVmod2 "testVarModifyNe02" (getDTMod dmodXsdIntegerNe rdfDatatypeValXsdInteger) [makeBVI [("a","99"),("b","100")]] [makeBVI [("a","99"),("b","100")]] testVarModifyNe03 = testVmod2 "testVarModifyNe03" (getDTMod dmodXsdIntegerNe rdfDatatypeValXsdInteger) [makeBVI [("a","-99"),("b","-100")]] [makeBVI [("a","-99"),("b","-100")]] testVarModifyNe04 = testVmod2 "testVarModifyNe04" (getDTMod dmodXsdIntegerNe rdfDatatypeValXsdInteger) [makeBVI [("b","100")]] [] testVarModifyNe05 = testVmod2 "testVarModifyNe05" (getDTMod dmodXsdIntegerNe rdfDatatypeValXsdInteger) [makeBVI [("a","100")]] [] -- Tests for xsd_integer:lt testVarModifyLt01, testVarModifyLt02, testVarModifyLt03, testVarModifyLt04, testVarModifyLt05 :: Test testVarModifyLt01 = testVmod2 "testVarModifyLt01" (getDTMod dmodXsdIntegerLt rdfDatatypeValXsdInteger) [makeBVI [("a","100"),("b","100")]] [] testVarModifyLt02 = testVmod2 "testVarModifyLt02" (getDTMod dmodXsdIntegerLt rdfDatatypeValXsdInteger) [makeBVI [("a","99"),("b","100")]] [makeBVI [("a","99"),("b","100")]] testVarModifyLt03 = testVmod2 "testVarModifyLt03" (getDTMod dmodXsdIntegerLt rdfDatatypeValXsdInteger) [makeBVI [("a","-99"),("b","-100")]] [] testVarModifyLt04 = testVmod2 "testVarModifyLt04" (getDTMod dmodXsdIntegerLt rdfDatatypeValXsdInteger) [makeBVI [("b","100")]] [] testVarModifyLt05 = testVmod2 "testVarModifyLt05" (getDTMod dmodXsdIntegerLt rdfDatatypeValXsdInteger) [makeBVI [("a","100")]] [] -- Tests for xsd_integer:le testVarModifyLe01, testVarModifyLe02, testVarModifyLe03, testVarModifyLe04, testVarModifyLe05 :: Test testVarModifyLe01 = testVmod2 "testVarModifyLe01" (getDTMod dmodXsdIntegerLe rdfDatatypeValXsdInteger) [makeBVI [("a","100"),("b","100")]] [makeBVI [("a","100"),("b","100")]] testVarModifyLe02 = testVmod2 "testVarModifyLe02" (getDTMod dmodXsdIntegerLe rdfDatatypeValXsdInteger) [makeBVI [("a","99"),("b","100")]] [makeBVI [("a","99"),("b","100")]] testVarModifyLe03 = testVmod2 "testVarModifyLe03" (getDTMod dmodXsdIntegerLe rdfDatatypeValXsdInteger) [makeBVI [("a","-99"),("b","-100")]] [] testVarModifyLe04 = testVmod2 "testVarModifyLe04" (getDTMod dmodXsdIntegerLe rdfDatatypeValXsdInteger) [makeBVI [("b","100")]] [] testVarModifyLe05 = testVmod2 "testVarModifyLe05" (getDTMod dmodXsdIntegerLe rdfDatatypeValXsdInteger) [makeBVI [("a","100")]] [] -- Tests for xsd_integer:gt testVarModifyGt01, testVarModifyGt02, testVarModifyGt03, testVarModifyGt04, testVarModifyGt05 :: Test testVarModifyGt01 = testVmod2 "testVarModifyGt01" (getDTMod dmodXsdIntegerGt rdfDatatypeValXsdInteger) [makeBVI [("a","100"),("b","100")]] [] testVarModifyGt02 = testVmod2 "testVarModifyGt02" (getDTMod dmodXsdIntegerGt rdfDatatypeValXsdInteger) [makeBVI [("a","99"),("b","100")]] [] testVarModifyGt03 = testVmod2 "testVarModifyGt03" (getDTMod dmodXsdIntegerGt rdfDatatypeValXsdInteger) [makeBVI [("a","-99"),("b","-100")]] [makeBVI [("a","-99"),("b","-100")]] testVarModifyGt04 = testVmod2 "testVarModifyGt04" (getDTMod dmodXsdIntegerGt rdfDatatypeValXsdInteger) [makeBVI [("b","100")]] [] testVarModifyGt05 = testVmod2 "testVarModifyGt05" (getDTMod dmodXsdIntegerGt rdfDatatypeValXsdInteger) [makeBVI [("a","100")]] [] -- Tests for xsd_integer:ge testVarModifyGe01, testVarModifyGe02, testVarModifyGe03, testVarModifyGe04, testVarModifyGe05 :: Test testVarModifyGe01 = testVmod2 "testVarModifyGe01" (getDTMod dmodXsdIntegerGe rdfDatatypeValXsdInteger) [makeBVI [("a","100"),("b","100")]] [makeBVI [("a","100"),("b","100")]] testVarModifyGe02 = testVmod2 "testVarModifyGe02" (getDTMod dmodXsdIntegerGe rdfDatatypeValXsdInteger) [makeBVI [("a","99"),("b","100")]] [] testVarModifyGe03 = testVmod2 "testVarModifyGe03" (getDTMod dmodXsdIntegerGe rdfDatatypeValXsdInteger) [makeBVI [("a","-99"),("b","-100")]] [makeBVI [("a","-99"),("b","-100")]] testVarModifyGe04 = testVmod2 "testVarModifyGe04" (getDTMod dmodXsdIntegerGe rdfDatatypeValXsdInteger) [makeBVI [("b","100")]] [] testVarModifyGe05 = testVmod2 "testVarModifyGe05" (getDTMod dmodXsdIntegerGe rdfDatatypeValXsdInteger) [makeBVI [("a","100")]] [] -- Full suite for variable binding modifier tests testVarModifySuite :: Test testVarModifySuite = TestList [ testVarModify00 , testVarModifyAbs01, testVarModifyAbs02, testVarModifyAbs03 , testVarModifyAbs04, testVarModifyAbs05, testVarModifyAbs06 , testVarModifyAbs07, testVarModifyAbs08, testVarModifyAbs09 , testVarModifyAbs10 , testVarModifyNeg01, testVarModifyNeg02, testVarModifyNeg03 , testVarModifyNeg04, testVarModifyNeg05 , testVarModifySum01, testVarModifySum02, testVarModifySum03 , testVarModifySum04, testVarModifySum05 , testVarModifyDiff01, testVarModifyDiff02, testVarModifyDiff03 , testVarModifyDiff04, testVarModifyDiff05 , testVarModifyProd01, testVarModifyProd02, testVarModifyProd03 , testVarModifyProd04, testVarModifyProd05, testVarModifyProd06 , testVarModifyDivMod01, testVarModifyDivMod02, testVarModifyDivMod03 , testVarModifyDivMod04, testVarModifyDivMod05, testVarModifyDivMod06 , testVarModifyDivMod07 , testVarModifyPower01, testVarModifyPower02, testVarModifyPower03 , testVarModifyPower04, testVarModifyPower05, testVarModifyPower06 , testVarModifyPower07, testVarModifyPower08 , testVarModifyEq01, testVarModifyEq02, testVarModifyEq03 , testVarModifyEq04, testVarModifyEq05 , testVarModifyNe01, testVarModifyNe02, testVarModifyNe03 , testVarModifyNe04, testVarModifyNe05 , testVarModifyLt01, testVarModifyLt02, testVarModifyLt03 , testVarModifyLt04, testVarModifyLt05 , testVarModifyLe01, testVarModifyLe02, testVarModifyLe03 , testVarModifyLe04, testVarModifyLe05 , testVarModifyGt01, testVarModifyGt02, testVarModifyGt03 , testVarModifyGt04, testVarModifyGt05 , testVarModifyGe01, testVarModifyGe02, testVarModifyGe03 , testVarModifyGe04, testVarModifyGe05 ] ------------------------------------------------------------ -- Test rules defined for datatype ------------------------------------------------------------ mkGraph :: String -> RDFGraph mkGraph grstr = makeRDFGraphFromN3String (prefixXsdInteger++base++grstr) where base = "@prefix : <"++nsURI namespaceDefault++"> . \n" testRuleFwd :: String -> Maybe (Rule RDFGraph) -> String -> [String] -> Test testRuleFwd lab (Just rule) antstr constrs = let antgr = mkGraph antstr congrs = map mkGraph constrs in testEqv lab congrs $ fwdApply rule [antgr] testRuleFwd lab Nothing _ _ = TestCase $ assertFailure $ "testRuleFwd:"++lab++", null rule supplied" testRuleBwd :: String -> Maybe (Rule RDFGraph) -> String -> [[String]] -> Test testRuleBwd lab (Just rule) antstr prestrss = let antgr = mkGraph antstr pregrss = map (map mkGraph) prestrss in testEqvEqv lab pregrss $ bwdApply rule antgr testRuleBwd lab Nothing _ _ = TestCase $ assertFailure $ "testRuleBwd:"++lab++", null rule supplied" testRuleChk :: String -> Maybe (Rule RDFGraph) -> String -> String -> Test testRuleChk lab (Just rule) antstr constr = let antgr = mkGraph antstr congr = mkGraph constr in test lab $ checkInference rule [antgr] congr testRuleChk lab Nothing _ _ = TestCase $ assertFailure $ "testRuleChk:"++lab++", null rule supplied" xsdIntRules :: Ruleset RDFGraph xsdIntRules = typeRules rdfDatatypeXsdInteger {- axdt :: Maybe (Formula RDFGraph) axdt = getRulesetAxiom axiomXsdIntegerDT xsdIntRules -} ruleabs, ruleneg, rulesum, rulediff, ruleprod, ruledivmod, rulepower, ruleeq, rulene, rulelt, rulele, rulegt, rulege :: Maybe (Rule RDFGraph) ruleabs = getRulesetRule ruleXsdIntegerAbs xsdIntRules ruleneg = getRulesetRule ruleXsdIntegerNeg xsdIntRules rulesum = getRulesetRule ruleXsdIntegerSum xsdIntRules rulediff = getRulesetRule ruleXsdIntegerDiff xsdIntRules ruleprod = getRulesetRule ruleXsdIntegerProd xsdIntRules ruledivmod = getRulesetRule ruleXsdIntegerDivMod xsdIntRules rulepower = getRulesetRule ruleXsdIntegerPower xsdIntRules ruleeq = getRulesetRule ruleXsdIntegerEq xsdIntRules rulene = getRulesetRule ruleXsdIntegerNe xsdIntRules rulelt = getRulesetRule ruleXsdIntegerLt xsdIntRules rulele = getRulesetRule ruleXsdIntegerLe xsdIntRules rulegt = getRulesetRule ruleXsdIntegerGt xsdIntRules rulege = getRulesetRule ruleXsdIntegerGe xsdIntRules -- Test cases for the arithmetic functions -- abs abs01inp :: String abs01inp = "_:a a xsd_integer:Abs ; " +++ " rdf:_2 \"1\"^^xsd:integer . " abs01fwd :: [String] abs01fwd = [ "_:a rdf:_1 \"1\"^^xsd:integer . " ] abs01bwd :: [[String]] abs01bwd = [] abs02inp :: String abs02inp = "_:a a xsd_integer:Abs ; " +++ " rdf:_2 \"-1\"^^xsd:integer . " abs02fwd :: [String] abs02fwd = [ "_:a rdf:_1 \"1\"^^xsd:integer . " ] abs02bwd :: [[String]] abs02bwd = [] abs03inp :: String abs03inp = "_:a a xsd_integer:Abs ; " +++ " rdf:_1 \"1\"^^xsd:integer . " abs03fwd :: [String] abs03fwd = [] abs03bwd :: [[String]] abs03bwd = [ [ "_:a a xsd_integer:Abs . " , "_:a rdf:_2 \"1\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Abs . " , "_:a rdf:_2 \"-1\"^^xsd:integer . " ] ] abs04inp :: String abs04inp = "_:a a xsd_integer:Abs ; " +++ " rdf:_1 \"-1\"^^xsd:integer . " abs04fwd :: [String] abs04fwd = [ falseGraphStr ] abs04bwd :: [[String]] abs04bwd = [ [ falseGraphStr ] ] -- neg neg01inp :: String neg01inp = "_:a a xsd_integer:Neg ; " +++ " rdf:_2 \"1\"^^xsd:integer . " neg01fwd :: [String] neg01fwd = [ "_:a rdf:_1 \"-1\"^^xsd:integer . " ] neg01bwd :: [[String]] neg01bwd = [ [ "_:a a xsd_integer:Neg . " , "_:a rdf:_1 \"-1\"^^xsd:integer . " ] ] neg02inp :: String neg02inp = "_:a a xsd_integer:Neg ; " +++ " rdf:_2 \"-2\"^^xsd:integer . " neg02fwd :: [String] neg02fwd = [ "_:a rdf:_1 \"2\"^^xsd:integer . " ] neg02bwd :: [[String]] neg02bwd = [ [ "_:a a xsd_integer:Neg . " , "_:a rdf:_1 \"2\"^^xsd:integer . " ] ] -- sum sum01inp :: String sum01inp = "_:a a xsd_integer:Sum ; " +++ " rdf:_2 \"31\"^^xsd:integer ; " +++ " rdf:_3 \"20\"^^xsd:integer . " sum01fwd :: [String] sum01fwd = [ "_:a rdf:_1 \"51\"^^xsd:integer . " ] sum01bwd :: [[String]] sum01bwd = [ [ "_:a a xsd_integer:Sum . " , "_:a rdf:_1 \"51\"^^xsd:integer . " , "_:a rdf:_2 \"31\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Sum . " , "_:a rdf:_1 \"51\"^^xsd:integer . " , "_:a rdf:_3 \"20\"^^xsd:integer . " ] ] sum02inp :: String sum02inp = "_:a a xsd_integer:Sum ; " +++ " rdf:_1 \"52\"^^xsd:integer ; " +++ " rdf:_3 \"21\"^^xsd:integer . " sum02fwd :: [String] sum02fwd = [ "_:a rdf:_2 \"31\"^^xsd:integer . " ] sum02bwd :: [[String]] sum02bwd = [ [ "_:a a xsd_integer:Sum . " , "_:a rdf:_1 \"52\"^^xsd:integer . " , "_:a rdf:_2 \"31\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Sum . " , "_:a rdf:_2 \"31\"^^xsd:integer . " , "_:a rdf:_3 \"21\"^^xsd:integer . " ] ] sum03inp :: String sum03inp = "_:a a xsd_integer:Sum ; " +++ " rdf:_1 \"53\"^^xsd:integer ; " +++ " rdf:_2 \"32\"^^xsd:integer . " sum03fwd :: [String] sum03fwd = [ "_:a rdf:_3 \"21\"^^xsd:integer . " ] sum03bwd :: [[String]] sum03bwd = [ [ "_:a a xsd_integer:Sum . " , "_:a rdf:_1 \"53\"^^xsd:integer . " , "_:a rdf:_3 \"21\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Sum . " , "_:a rdf:_2 \"32\"^^xsd:integer . " , "_:a rdf:_3 \"21\"^^xsd:integer . " ] ] -- diff diff01inp :: String diff01inp = "_:a a xsd_integer:Diff ; " +++ " rdf:_2 \"222\"^^xsd:integer ; " +++ " rdf:_3 \"333\"^^xsd:integer . " diff01fwd :: [String] diff01fwd = [ "_:a rdf:_1 \"-111\"^^xsd:integer . " ] diff01bwd :: [[String]] diff01bwd = [ [ "_:a a xsd_integer:Diff . " , "_:a rdf:_1 \"-111\"^^xsd:integer . " , "_:a rdf:_2 \"222\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Diff . " , "_:a rdf:_1 \"-111\"^^xsd:integer . " , "_:a rdf:_3 \"333\"^^xsd:integer . " ] ] diff02inp :: String diff02inp = "_:a a xsd_integer:Diff ; " +++ " rdf:_1 \"-111\"^^xsd:integer ; " +++ " rdf:_3 \"333\"^^xsd:integer . " diff02fwd :: [String] diff02fwd = [ "_:a rdf:_2 \"222\"^^xsd:integer . " ] diff02bwd :: [[String]] diff02bwd = [ [ "_:a a xsd_integer:Diff . " , "_:a rdf:_1 \"-111\"^^xsd:integer . " , "_:a rdf:_2 \"222\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Diff . " , "_:a rdf:_2 \"222\"^^xsd:integer . " , "_:a rdf:_3 \"333\"^^xsd:integer . " ] ] diff03inp :: String diff03inp = "_:a a xsd_integer:Diff ; " +++ " rdf:_1 \"-111\"^^xsd:integer ; " +++ " rdf:_2 \"222\"^^xsd:integer . " diff03fwd :: [String] diff03fwd = [ "_:a rdf:_3 \"333\"^^xsd:integer . " ] diff03bwd :: [[String]] diff03bwd = [ [ "_:a a xsd_integer:Diff . " , "_:a rdf:_1 \"-111\"^^xsd:integer . " , "_:a rdf:_3 \"333\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Diff . " , "_:a rdf:_2 \"222\"^^xsd:integer . " , "_:a rdf:_3 \"333\"^^xsd:integer . " ] ] -- prod prod01inp :: String prod01inp = "_:a a xsd_integer:Prod ; " +++ " rdf:_2 \"222\"^^xsd:integer ; " +++ " rdf:_3 \"3\"^^xsd:integer . " prod01fwd :: [String] prod01fwd = [ "_:a rdf:_1 \"666\"^^xsd:integer . " ] prod01bwd :: [[String]] prod01bwd = [ [ "_:a a xsd_integer:Prod . " , "_:a rdf:_1 \"666\"^^xsd:integer . " , "_:a rdf:_2 \"222\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Prod . " , "_:a rdf:_1 \"666\"^^xsd:integer . " , "_:a rdf:_3 \"3\"^^xsd:integer . " ] ] prod02inp :: String prod02inp = "_:a a xsd_integer:Prod ; " +++ " rdf:_1 \"666\"^^xsd:integer ; " +++ " rdf:_3 \"3\"^^xsd:integer . " prod02fwd :: [String] prod02fwd = [ "_:a rdf:_2 \"222\"^^xsd:integer . " ] prod02bwd :: [[String]] prod02bwd = [ [ "_:a a xsd_integer:Prod . " , "_:a rdf:_1 \"666\"^^xsd:integer . " , "_:a rdf:_2 \"222\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Prod . " , "_:a rdf:_2 \"222\"^^xsd:integer . " , "_:a rdf:_3 \"3\"^^xsd:integer . " ] ] prod03inp :: String prod03inp = "_:a a xsd_integer:Prod ; " +++ " rdf:_1 \"666\"^^xsd:integer ; " +++ " rdf:_2 \"222\"^^xsd:integer . " prod03fwd :: [String] prod03fwd = [ "_:a rdf:_3 \"3\"^^xsd:integer . " ] prod03bwd :: [[String]] prod03bwd = [ [ "_:a a xsd_integer:Prod . " , "_:a rdf:_1 \"666\"^^xsd:integer . " , "_:a rdf:_3 \"3\"^^xsd:integer . " ] , [ "_:a a xsd_integer:Prod . " , "_:a rdf:_2 \"222\"^^xsd:integer . " , "_:a rdf:_3 \"3\"^^xsd:integer . " ] ] -- divmod divmod01inp :: String divmod01inp = "_:a a xsd_integer:DivMod ; " +++ " rdf:_3 \"33\"^^xsd:integer ; " +++ " rdf:_4 \"5\"^^xsd:integer . " divmod01fwd :: [String] divmod01fwd = [ "_:a rdf:_1 \"6\"^^xsd:integer . " +++ "_:a rdf:_2 \"3\"^^xsd:integer . " ] divmod01bwd :: [[String]] divmod01bwd = [ {- "_:a a xsd_integer:DivMod . " , "_:a rdf:_1 \"6\"^^xsd:integer . " , "_:a rdf:_2 \"3\"^^xsd:integer . " , "_:a rdf:_4 \"5\"^^xsd:integer . " -} ] divmod02inp :: String divmod02inp = "_:a a xsd_integer:DivMod ; " +++ " rdf:_1 \"6\"^^xsd:integer ; " +++ " rdf:_2 \"3\"^^xsd:integer ; " +++ " rdf:_4 \"5\"^^xsd:integer . " divmod02fwd :: [String] divmod02fwd = [ ] divmod02bwd :: [[String]] divmod02bwd = [ {- "_:a a xsd_integer:DivMod . " , "_:a rdf:_3 \"33\"^^xsd:integer . " , "_:a rdf:_4 \"5\"^^xsd:integer . " -} ] divmod03inp :: String divmod03inp = "_:a a xsd_integer:DivMod ; " +++ " rdf:_3 \"-33\"^^xsd:integer ; " +++ " rdf:_4 \"5\"^^xsd:integer . " divmod03fwd :: [String] divmod03fwd = [ "_:a rdf:_1 \"-7\"^^xsd:integer . " +++ "_:a rdf:_2 \"2\"^^xsd:integer . " ] divmod03bwd :: [[String]] divmod03bwd = [ ] -- power power01inp :: String power01inp = "_:a a xsd_integer:Power ; " +++ " rdf:_2 \"2\"^^xsd:integer ; " +++ " rdf:_3 \"5\"^^xsd:integer . " power01fwd :: [String] power01fwd = [ "_:a rdf:_1 \"32\"^^xsd:integer . " ] power01bwd :: [[String]] power01bwd = [ ] power02inp :: String power02inp = "_:a a xsd_integer:Power ; " +++ " rdf:_2 \"111\"^^xsd:integer ; " +++ " rdf:_3 \"0\"^^xsd:integer . " power02fwd :: [String] power02fwd = [ "_:a rdf:_1 \"1\"^^xsd:integer . " ] power02bwd :: [[String]] power02bwd = [ ] power03inp :: String power03inp = "_:a a xsd_integer:Power ; " +++ " rdf:_2 \"22\"^^xsd:integer ; " +++ " rdf:_3 \"-33\"^^xsd:integer . " power03fwd :: [String] power03fwd = [ falseGraphStr ] power03bwd :: [[String]] power03bwd = [ [ falseGraphStr ] ] -- eq eq01inp :: String eq01inp = "_:a a xsd_integer:Eq ; " +++ " rdf:_1 \"11\"^^xsd:integer ; " +++ " rdf:_2 \"11\"^^xsd:integer . " eq01fwd :: [String] eq01fwd = [ ] eq01bwd :: [[String]] eq01bwd = [ ] eq02inp :: String eq02inp = "_:a a xsd_integer:Eq ; " +++ " rdf:_1 \"21\"^^xsd:integer ; " +++ " rdf:_2 \"22\"^^xsd:integer . " eq02fwd :: [String] eq02fwd = [ falseGraphStr ] eq02bwd :: [[String]] eq02bwd = [ [falseGraphStr] ] eq03inp :: String eq03inp = "_:a a xsd_integer:Eq ; " +++ " rdf:_1 \"31\"^^xsd:integer ; " +++ " rdf:_2 \"-32\"^^xsd:integer . " eq03fwd :: [String] eq03fwd = [ falseGraphStr ] eq03bwd :: [[String]] eq03bwd = [ [falseGraphStr] ] -- ne ne01inp :: String ne01inp = "_:a a xsd_integer:Ne ; " +++ " rdf:_1 \"11\"^^xsd:integer ; " +++ " rdf:_2 \"11\"^^xsd:integer . " ne01fwd :: [String] ne01fwd = [ falseGraphStr ] ne01bwd :: [[String]] ne01bwd = [ [falseGraphStr] ] ne02inp :: String ne02inp = "_:a a xsd_integer:Ne ; " +++ " rdf:_1 \"21\"^^xsd:integer ; " +++ " rdf:_2 \"22\"^^xsd:integer . " ne02fwd :: [String] ne02fwd = [ ] ne02bwd :: [[String]] ne02bwd = [ ] ne03inp :: String ne03inp = "_:a a xsd_integer:Ne ; " +++ " rdf:_1 \"31\"^^xsd:integer ; " +++ " rdf:_2 \"-32\"^^xsd:integer . " ne03fwd :: [String] ne03fwd = [ ] ne03bwd :: [[String]] ne03bwd = [ ] -- lt lt01inp :: String lt01inp = "_:a a xsd_integer:Lt ; " +++ " rdf:_1 \"11\"^^xsd:integer ; " +++ " rdf:_2 \"11\"^^xsd:integer . " lt01fwd :: [String] lt01fwd = [ falseGraphStr ] lt01bwd :: [[String]] lt01bwd = [ [falseGraphStr] ] lt02inp :: String lt02inp = "_:a a xsd_integer:Lt ; " +++ " rdf:_1 \"21\"^^xsd:integer ; " +++ " rdf:_2 \"22\"^^xsd:integer . " lt02fwd :: [String] lt02fwd = [ ] lt02bwd :: [[String]] lt02bwd = [ ] lt03inp :: String lt03inp = "_:a a xsd_integer:Lt ; " +++ " rdf:_1 \"31\"^^xsd:integer ; " +++ " rdf:_2 \"-32\"^^xsd:integer . " lt03fwd :: [String] lt03fwd = [ falseGraphStr ] lt03bwd :: [[String]] lt03bwd = [ [falseGraphStr] ] -- le le01inp :: String le01inp = "_:a a xsd_integer:Le ; " +++ " rdf:_1 \"11\"^^xsd:integer ; " +++ " rdf:_2 \"11\"^^xsd:integer . " le01fwd :: [String] le01fwd = [ ] le01bwd :: [[String]] le01bwd = [ ] le02inp :: String le02inp = "_:a a xsd_integer:Le ; " +++ " rdf:_1 \"21\"^^xsd:integer ; " +++ " rdf:_2 \"22\"^^xsd:integer . " le02fwd :: [String] le02fwd = [ ] le02bwd :: [[String]] le02bwd = [ ] le03inp :: String le03inp = "_:a a xsd_integer:Le ; " +++ " rdf:_1 \"31\"^^xsd:integer ; " +++ " rdf:_2 \"-32\"^^xsd:integer . " le03fwd :: [String] le03fwd = [ falseGraphStr ] le03bwd :: [[String]] le03bwd = [ [falseGraphStr] ] -- gt gt01inp :: String gt01inp = "_:a a xsd_integer:Gt ; " +++ " rdf:_1 \"11\"^^xsd:integer ; " +++ " rdf:_2 \"11\"^^xsd:integer . " gt01fwd :: [String] gt01fwd = [ falseGraphStr ] gt01bwd :: [[String]] gt01bwd = [ [falseGraphStr] ] gt02inp :: String gt02inp = "_:a a xsd_integer:Gt ; " +++ " rdf:_1 \"21\"^^xsd:integer ; " +++ " rdf:_2 \"22\"^^xsd:integer . " gt02fwd :: [String] gt02fwd = [ falseGraphStr ] gt02bwd :: [[String]] gt02bwd = [ [falseGraphStr] ] gt03inp :: String gt03inp = "_:a a xsd_integer:Gt ; " +++ " rdf:_1 \"31\"^^xsd:integer ; " +++ " rdf:_2 \"-32\"^^xsd:integer . " gt03fwd :: [String] gt03fwd = [ ] gt03bwd :: [[String]] gt03bwd = [ ] -- ge ge01inp :: String ge01inp = "_:a a xsd_integer:Ge ; " +++ " rdf:_1 \"11\"^^xsd:integer ; " +++ " rdf:_2 \"11\"^^xsd:integer . " ge01fwd :: [String] ge01fwd = [ ] ge01bwd :: [[String]] ge01bwd = [ ] ge02inp :: String ge02inp = "_:a a xsd_integer:Ge ; " +++ " rdf:_1 \"21\"^^xsd:integer ; " +++ " rdf:_2 \"22\"^^xsd:integer . " ge02fwd :: [String] ge02fwd = [ falseGraphStr ] ge02bwd :: [[String]] ge02bwd = [ [falseGraphStr] ] ge03inp :: String ge03inp = "_:a a xsd_integer:Ge ; " +++ " rdf:_1 \"31\"^^xsd:integer ; " +++ " rdf:_2 \"-32\"^^xsd:integer . " ge03fwd :: [String] ge03fwd = [ ] ge03bwd :: [[String]] ge03bwd = [ ] -- Test cases from design notes infixr 5 +++ (+++) :: String -> ShowS (+++) str = ((str++"\n")++) -- Make a vector of rules using the graph string below pvRules :: [RDFRule] -- pvRules = makeRDFDatatypeRestrictionRules rdfDatatypeValXsdInteger gr pvRules = typeMkRules rdfDatatypeXsdInteger gr where gr = (mkGraph pvRulesStr) pvRulesStr :: String pvRulesStr = ":PassengerVehicle a rdfd:GeneralRestriction ; " +++ " rdfd:onProperties (:totalCapacity :seatedCapacity :standingCapacity) ; " +++ " rdfd:constraint xsd_integer:sum . " +++ ":PassengerVehicle1 a rdfd:GeneralRestriction ; " +++ " rdfd:onProperties (:totalCapacity :seatedCapacity :standingCapacity) ; " +++ " rdfd:constraint xsd_integer:sum ; " +++ " rdfd:maxCardinality \"1\"^^xsd:nonNegativeInteger . " -- Now the test cases that use the rules created above. pvRule0, pvRule1 :: Maybe (Rule RDFGraph) pvRule0 = mapFindMaybe (ScopedName namespaceDefault "PassengerVehicle") (LookupMap pvRules) pvRule1 = mapFindMaybe (ScopedName namespaceDefault "PassengerVehicle1") (LookupMap pvRules) pv01inp :: String pv01inp = "_:a a :PassengerVehicle ; " +++ " :seatedCapacity \"30\"^^xsd:integer ; " +++ " :standingCapacity \"20\"^^xsd:integer . " pv01fwd :: [String] pv01fwd = [ "_:a :totalCapacity \"50\"^^xsd:integer . " ] pv01bwd :: [[String]] pv01bwd = [ [ "_:a a :PassengerVehicle . " , "_:a :totalCapacity \"50\"^^xsd:integer . " , "_:a :seatedCapacity \"30\"^^xsd:integer . " ] , [ "_:a a :PassengerVehicle . " , "_:a :totalCapacity \"50\"^^xsd:integer . " , "_:a :standingCapacity \"20\"^^xsd:integer . " ] ] pv02inp :: String pv02inp = "_:a a :PassengerVehicle ; " +++ " :seatedCapacity \"30\"^^xsd:integer ; " +++ " :totalCapacity \"51\"^^xsd:integer . " +++ "_:b a :PassengerVehicle ; " +++ " :standingCapacity \"20\"^^xsd:integer ; " +++ " :totalCapacity \"52\"^^xsd:integer . " pv02fwd :: [String] pv02fwd = [ "_:a :standingCapacity \"21\"^^xsd:integer . " , "_:b :seatedCapacity \"32\"^^xsd:integer . " ] pv02bwd :: [[String]] pv02bwd = [ [ "_:a a :PassengerVehicle . " , "_:a :standingCapacity \"21\"^^xsd:integer . " , "_:a :totalCapacity \"51\"^^xsd:integer . " , "_:b a :PassengerVehicle . " , "_:b :seatedCapacity \"32\"^^xsd:integer . " , "_:b :totalCapacity \"52\"^^xsd:integer . " ] , [ "_:a a :PassengerVehicle . " , "_:a :seatedCapacity \"30\"^^xsd:integer . " , "_:a :standingCapacity \"21\"^^xsd:integer . " , "_:b a :PassengerVehicle . " , "_:b :seatedCapacity \"32\"^^xsd:integer . " , "_:b :totalCapacity \"52\"^^xsd:integer . " ] , [ "_:a a :PassengerVehicle . " , "_:a :standingCapacity \"21\"^^xsd:integer . " , "_:a :totalCapacity \"51\"^^xsd:integer . " , "_:b a :PassengerVehicle . " , "_:b :seatedCapacity \"32\"^^xsd:integer . " , "_:b :standingCapacity \"20\"^^xsd:integer . " ] , [ "_:a a :PassengerVehicle . " , "_:a :seatedCapacity \"30\"^^xsd:integer . " , "_:a :standingCapacity \"21\"^^xsd:integer . " , "_:b a :PassengerVehicle . " , "_:b :seatedCapacity \"32\"^^xsd:integer . " , "_:b :standingCapacity \"20\"^^xsd:integer . " ] ] pv03inp :: String pv03inp = "_:a a :PassengerVehicle ; " +++ " :seatedCapacity \"30\"^^xsd:integer ; " +++ " :standingCapacity \"23\"^^xsd:integer ; " +++ " :totalCapacity \"53\"^^xsd:integer . " pv03fwd :: [String] pv03fwd = [] pv04inp :: String pv04inp = "_:a a :PassengerVehicle ; " +++ " :seatedCapacity \"30\"^^xsd:integer ; " +++ " :standingCapacity \"20\"^^xsd:integer ; " +++ " :totalCapacity \"54\"^^xsd:integer . " pv04fwd :: [String] pv04fwd = [ "_:a :standingCapacity \"24\"^^xsd:integer . " +++ "_:a :seatedCapacity \"34\"^^xsd:integer . " +++ "_:a :totalCapacity \"50\"^^xsd:integer . " ] pv05inp :: String pv05inp = "_:a a :PassengerVehicle1 ; " +++ " :seatedCapacity \"30\"^^xsd:integer ; " +++ " :standingCapacity \"25\"^^xsd:integer ; " +++ " :totalCapacity \"55\"^^xsd:integer . " pv05fwd :: [String] pv05fwd = [] pv06inp :: String pv06inp = "_:a a :PassengerVehicle1 ; " +++ " :seatedCapacity \"30\"^^xsd:integer ; " +++ " :standingCapacity \"20\"^^xsd:integer ; " +++ " :totalCapacity \"56\"^^xsd:integer . " pv06fwd :: [String] pv06fwd = [ falseGraphStr ] pv06bwd :: [[String]] pv06bwd = [ [ falseGraphStr ] ] pv07inp :: String pv07inp = "_:a a :PassengerVehicle ; " +++ " :totalCapacity \"57\"^^xsd:integer . " pv07fwd :: [String] pv07fwd = [] -- how come this isn't [[String]] ? pv07bwd :: [String] pv07bwd = [] -- Full suite for datatype rule tests testDatatypeRuleSuite :: Test testDatatypeRuleSuite = TestList [ testRuleFwd "testRuleFwdAbs01" ruleabs abs01inp abs01fwd , testRuleFwd "testRuleFwdAbs02" ruleabs abs02inp abs02fwd , testRuleFwd "testRuleFwdAbs03" ruleabs abs03inp abs03fwd , testRuleFwd "testRuleFwdAbs04" ruleabs abs04inp abs04fwd , testRuleFwd "testRuleFwdNeg01" ruleneg neg01inp neg01fwd , testRuleFwd "testRuleFwdNeg02" ruleneg neg02inp neg02fwd , testRuleFwd "testRuleFwdSum01" rulesum sum01inp sum01fwd , testRuleFwd "testRuleFwdSum02" rulesum sum02inp sum02fwd , testRuleFwd "testRuleFwdSum03" rulesum sum03inp sum03fwd , testRuleFwd "testRuleFwdDiff01" rulediff diff01inp diff01fwd , testRuleFwd "testRuleFwdDiff02" rulediff diff02inp diff02fwd , testRuleFwd "testRuleFwdDiff03" rulediff diff03inp diff03fwd , testRuleFwd "testRuleFwdProd01" ruleprod prod01inp prod01fwd , testRuleFwd "testRuleFwdProd02" ruleprod prod02inp prod02fwd , testRuleFwd "testRuleFwdProd03" ruleprod prod03inp prod03fwd , testRuleFwd "testRuleFwdDivMod01" ruledivmod divmod01inp divmod01fwd , testRuleFwd "testRuleFwdDivMod02" ruledivmod divmod02inp divmod02fwd , testRuleFwd "testRuleFwdDivMod03" ruledivmod divmod03inp divmod03fwd , testRuleFwd "testRuleFwdPower01" rulepower power01inp power01fwd , testRuleFwd "testRuleFwdPower02" rulepower power02inp power02fwd , testRuleFwd "testRuleFwdPower03" rulepower power03inp power03fwd , testRuleFwd "testRuleFwdEq01" ruleeq eq01inp eq01fwd , testRuleFwd "testRuleFwdEq02" ruleeq eq02inp eq02fwd , testRuleFwd "testRuleFwdEq03" ruleeq eq03inp eq03fwd , testRuleFwd "testRuleFwdNe01" rulene ne01inp ne01fwd , testRuleFwd "testRuleFwdNe02" rulene ne02inp ne02fwd , testRuleFwd "testRuleFwdNe03" rulene ne03inp ne03fwd , testRuleFwd "testRuleFwdLt01" rulelt lt01inp lt01fwd , testRuleFwd "testRuleFwdLt02" rulelt lt02inp lt02fwd , testRuleFwd "testRuleFwdLt03" rulelt lt03inp lt03fwd , testRuleFwd "testRuleFwdLe01" rulele le01inp le01fwd , testRuleFwd "testRuleFwdLe02" rulele le02inp le02fwd , testRuleFwd "testRuleFwdLe03" rulele le03inp le03fwd , testRuleFwd "testRuleFwdGt01" rulegt gt01inp gt01fwd , testRuleFwd "testRuleFwdGt02" rulegt gt02inp gt02fwd , testRuleFwd "testRuleFwdGt03" rulegt gt03inp gt03fwd , testRuleFwd "testRuleFwdGe01" rulege ge01inp ge01fwd , testRuleFwd "testRuleFwdGe02" rulege ge02inp ge02fwd , testRuleFwd "testRuleFwdGe03" rulege ge03inp ge03fwd -- backard chaining tests , testRuleBwd "testRuleBwdAbs01" ruleabs abs01inp abs01bwd , testRuleBwd "testRuleBwdAbs02" ruleabs abs02inp abs02bwd , testRuleBwd "testRuleBwdAbs03" ruleabs abs03inp abs03bwd , testRuleBwd "testRuleBwdAbs04" ruleabs abs04inp abs04bwd , testRuleBwd "testRuleBwdNeg01" ruleneg neg01inp neg01bwd , testRuleBwd "testRuleBwdNeg02" ruleneg neg02inp neg02bwd , testRuleBwd "testRuleBwdSum01" rulesum sum01inp sum01bwd , testRuleBwd "testRuleBwdSum02" rulesum sum02inp sum02bwd , testRuleBwd "testRuleBwdSum03" rulesum sum03inp sum03bwd , testRuleBwd "testRuleBwdDiff01" rulediff diff01inp diff01bwd , testRuleBwd "testRuleBwdDiff02" rulediff diff02inp diff02bwd , testRuleBwd "testRuleBwdDiff03" rulediff diff03inp diff03bwd , testRuleBwd "testRuleBwdProd01" ruleprod prod01inp prod01bwd , testRuleBwd "testRuleBwdProd02" ruleprod prod02inp prod02bwd , testRuleBwd "testRuleBwdProd03" ruleprod prod03inp prod03bwd , testRuleBwd "testRuleBwdDivMod01" ruledivmod divmod01inp divmod01bwd , testRuleBwd "testRuleBwdDivMod02" ruledivmod divmod02inp divmod02bwd , testRuleBwd "testRuleBwdDivMod03" ruledivmod divmod03inp divmod03bwd , testRuleBwd "testRuleBwdPower01" rulepower power01inp power01bwd , testRuleBwd "testRuleBwdPower02" rulepower power02inp power02bwd , testRuleBwd "testRuleBwdPower03" rulepower power03inp power03bwd , testRuleBwd "testRuleBwdEq01" ruleeq eq01inp eq01bwd , testRuleBwd "testRuleBwdEq02" ruleeq eq02inp eq02bwd , testRuleBwd "testRuleBwdEq03" ruleeq eq03inp eq03bwd , testRuleBwd "testRuleBwdNe01" rulene ne01inp ne01bwd , testRuleBwd "testRuleBwdNe02" rulene ne02inp ne02bwd , testRuleBwd "testRuleBwdNe03" rulene ne03inp ne03bwd , testRuleBwd "testRuleBwdLt01" rulelt lt01inp lt01bwd , testRuleBwd "testRuleBwdLt02" rulelt lt02inp lt02bwd , testRuleBwd "testRuleBwdLt03" rulelt lt03inp lt03bwd , testRuleBwd "testRuleBwdLe01" rulele le01inp le01bwd , testRuleBwd "testRuleBwdLe02" rulele le02inp le02bwd , testRuleBwd "testRuleBwdLe03" rulele le03inp le03bwd , testRuleBwd "testRuleBwdGt01" rulegt gt01inp gt01bwd , testRuleBwd "testRuleBwdGt02" rulegt gt02inp gt02bwd , testRuleBwd "testRuleBwdGt03" rulegt gt03inp gt03bwd , testRuleBwd "testRuleBwdGe01" rulege ge01inp ge01bwd , testRuleBwd "testRuleBwdGe02" rulege ge02inp ge02bwd , testRuleBwd "testRuleBwdGe03" rulege ge03inp ge03bwd -- test cases from design notes , testRuleFwd "testRuleFwdPv01" pvRule0 pv01inp pv01fwd , testRuleFwd "testRuleFwdPv02" pvRule0 pv02inp pv02fwd , testRuleFwd "testRuleFwdPv03" pvRule0 pv03inp pv03fwd , testRuleFwd "testRuleFwdPv04" pvRule0 pv04inp pv04fwd , testRuleFwd "testRuleFwdPv05" pvRule1 pv05inp pv05fwd , testRuleFwd "testRuleFwdPv06" pvRule1 pv06inp pv06fwd , testRuleFwd "testRuleFwdPv07" pvRule0 pv07inp pv07fwd , testRuleBwd "testRuleBwdPv01" pvRule0 pv01inp pv01bwd , testRuleBwd "testRuleBwdPv02" pvRule0 pv02inp pv02bwd , testRuleBwd "testRuleBwdPv06" pvRule1 pv06inp pv06bwd , testRuleFwd "testRuleBwdPv07" pvRule0 pv07inp pv07bwd ] ------------------------------------------------------------ -- All tests ------------------------------------------------------------ allTests :: Test allTests = TestList [ testDatatypeSuite , testDatatypeValSuite , testVarModifySuite , testDatatypeRuleSuite ] main :: IO () main = runTestTT allTests >> return () {- trules = runTestTT testDatatypeRuleSuite runTestFile t = do h <- openFile "a.tmp" WriteMode runTestText (putTextToHandle h False) t hClose h tf = runTestFile tt = runTestTT -} -------------------------------------------------------------------------------- -- -- Copyright (c) 2003, Graham Klyne, 2009 Vasili I Galchin, 2011 Douglas Burke -- All rights reserved. -- -- This file is part of Swish. -- -- Swish is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- Swish is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with Swish; if not, write to: -- The Free Software Foundation, Inc., -- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- --------------------------------------------------------------------------------