Skip to content
Snippets Groups Projects
cool-testsuite.ml 3.82 KiB
Newer Older
  • Learn to ignore specific revisions
  • open CoolUtils
    open Testsuite
    
    module DL98 = DL98TestCases
    
    module CF = CoAlgFormula
    module CR = CoAlgReasoner
    module CM = CoAlgMisc
    module L = List
    
    module FP = FunctorParsing
    
    
    let k   = [| (CM.MultiModalK,  [0]) |]
    let kd  = [| (CM.MultiModalKD, [0]) |]
    let cl  = [| (CM.CoalitionLogic, [0]) |]
    let gml = [| (CM.GML, [0]) |]
    
    
    let k_testcases: satCheck list =
        let c a b = (a,k,b) in
        [ c Sat   "True"
        ; c Unsat "False"
        ; c ParseError  "{Fsdf"
        (*; c ParseError  "Fsdf}" *)
    
    Thorsten Wißmann's avatar
    Thorsten Wißmann committed
        ; c Unsat "<R> True & [R] False"
        ; c Unsat "C |- <R> ~C"
        ; c Sat   "C |- [R] ~C"
    
        ; c Unsat "<R> ((<R> C) & (<S> False))"
        ; c Unsat "<X> (<S> False) | <R> ((<R> C) & (<S> False))"
        ; c Unsat "<X> (<S> False) | <R> ((<R> C) & (<S> False))"
    
        ; c Sat   "<R> A & <R> B |- [R] C"
        ; c Unsat "<R> A & <R> B |- [R] (~A & ~B)"
        ; c Unsat "<R> A & <R> B |- [R] ~B"
        ; c Sat   "<R> A & <R> ~A |- [R] B"
        ; c Unsat "<R> A & <R> ~A & (B => [R] ~A) |- [R] B"
        ; c Sat   "<R> A & <R> ~A & (B => [R] ~A) & (C => ~D) & (D => ~E) & <R> C & <R> D & <R> E |- True"
        ; c Unsat "<R> D & <R> E & ((<R> D & <R> E) => [R] E) & ~(D & E) |- True"
        ; c Sat   "(<R> D | <R> E) & ((<R> D & <R> E) => [R] E) & ~(D & E) |- True"
        ; c Sat   "<R> D & <R> E & ((<R> D & <R> E) => [R] E) & (D & E => <R> ~(D&E)) |- True"
    
    
    let nominal_testcases =
        let c a b = (a,k,b) in
        [ c Sat "@ i' <r> p"
        ; c Sat "@ i' <r>  i'"
        ; c Unsat "@ i' <r>  i' & @i' [r] ~ i'"
        ; c Sat "@ i' [r] (@ i' (~i')) "
        ]
    
    
    Thorsten Wißmann's avatar
    Thorsten Wißmann committed
    let kd_testcases =
        let c a b = (a,kd,b) in
        [ c Sat   "True"
        ; c Unsat "False"
        ; c ParseError  "{Fsdf"
        (*; c ParseError  "Fsdf}" *)
        ; c Unsat "<R> True & [R] False"
        ; c Unsat "C |- <R> ~C"
        ; c Unsat "C |- [R] ~C"
        ]
    
    
    let cl_testcases : satCheck list =
    
    Thorsten Wißmann's avatar
    Thorsten Wißmann committed
        let c a b = (a,cl,b) in
        [ c Unsat "[{1}] C & [{ 2 }] ~C"
        ; c Sat   "[{1}] C & <{ 2 }> ~C"
        ; c Unsat "[{1}] C & <{ 1 2 }> ~C"
        ; c Sat   "<{ 1 2 }> C & <{ 1 2 }> ~C"
        ; c Unsat "<{ 1 2 }> C & [{ 1 2 }] ~C"
        ; c Sat   "([{1 3}] C) & ([{ 2 3 }] ~C )"
        ]
    
    
    let kAndKd = FunctorParsing.sortTableFromString "K * KD"
    
    let kAndKd_testcases : satCheck list =
        let c a b = (a,kAndKd,b) in
        [ c Sat   "[pi1]True"
        ; c Sat   "[pi1][R]False"
        ; c Unsat "[pi2][R]False"
        ; c Sat   "i' => [pi1][R] i'"
        ; c Sat   "i' & [pi1][R] i'"
    
        ; c Unsat "i' => [pi2][R] (~i') |- i' & [pi2] [R] i'"
        ]
    
    let kOrKd = [| (CoAlgMisc.Choice, [1; 2]);
                   (CoAlgMisc.MultiModalK, [0]);
                   (CoAlgMisc.MultiModalKD, [0])
                |]
    let kOrKd_testcases : satCheck list =
        let c a b = (a,kOrKd,b) in
        [ c Sat   "( True + False )"
        ; c Sat   "(([R] False) + ([R] False))"
        ; c Unsat "((False) + ([R] False))"
    
    Thorsten Wißmann's avatar
    Thorsten Wißmann committed
    let testcases =
        let c name table = (name,table) in
    
        [ c "DL98 (Sat)"    DL98.satCasesList
        ; c "DL98 (Unsat)"  DL98.unsatCasesList
        ; c "K"  k_testcases
    
        ; c "Nominals" nominal_testcases
    
    Thorsten Wißmann's avatar
    Thorsten Wißmann committed
        ; c "KD" kd_testcases
    
    Thorsten Wißmann's avatar
    Thorsten Wißmann committed
        ; c "CL" cl_testcases
    
        ; c "K×KD" kAndKd_testcases
    
        ; c "K+KD" kOrKd_testcases
    
    let main =
    
        let success = ref 0 in
        let failed = ref 0 in
    
    Thorsten Wißmann's avatar
    Thorsten Wißmann committed
        foreach_l testcases (fun (name,table) ->
    
            Printf.printf "==== Testing %s ====\n" name;
    
            let (_,sorts,_) = List.hd table in
            Printf.printf "sortTable = %s\n" (FP.stringFromSortTable sorts);
    
            foreach_l table (fun sc ->
                let (expected,_,_) = sc in
                let actual = runSatCheckVerbose sc in
                (* compare the expected and the actual result *)
                if actual = expected
                then success := !success + 1
                else failed := !failed + 1
            );
            Printf.printf "\n"
        );
        let s n = if n = 1 then "testcase" else "testcases" in
        Printf.printf "=> %d %s succeeded, %d %s failed.\n"
            !success (s !success)
            !failed (s !failed)