From ab2d3adcafbb574cb16b73faba508756e5612599 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorsten=20Wi=C3=9Fmann?= <edu@thorsten-wissmann.de>
Date: Fri, 16 May 2014 20:17:28 +0200
Subject: [PATCH] Add basic testcase checking

---
 src/testsuite/Testsuite.ml      | 54 ++++++++++++++++++++++++++++++---
 src/testsuite/Testsuite.mli     |  8 +++--
 src/testsuite/cool-testsuite.ml | 14 +++++++--
 3 files changed, 68 insertions(+), 8 deletions(-)

diff --git a/src/testsuite/Testsuite.ml b/src/testsuite/Testsuite.ml
index 22359e2..fecf354 100644
--- a/src/testsuite/Testsuite.ml
+++ b/src/testsuite/Testsuite.ml
@@ -1,6 +1,7 @@
 
 
 module CM = CoAlgMisc
+module PF = Printf
 
 module CR = CoAlgReasoner
 
@@ -8,9 +9,54 @@ module CR = CoAlgReasoner
     sorts = [| (parseFunctor Sys.argv.(2), [0]) |]
 *)
 
-type satCheck = bool * (CoAlgMisc.sortTable) * string (* sat * functors * formula *)
+type testResult = | Sat
+                  | Unsat
+                  | ParseError
+
+type satCheck = testResult * (CoAlgMisc.sortTable) * string (* sat * functors * formula *)
+
+
+
+let colored_string_of_testResult tr =
+    match tr with
+    | Sat -> ("1;33","sat")
+    | Unsat -> ("1;34","unsat")
+    | ParseError -> ("31","unparseable")
+
+let colored_string col str =
+    "\027["^col^"m"^str^"\027[0m"
+
+let terminal_string_of_testResult tr =
+    let (col,str) = colored_string_of_testResult tr in
+    colored_string col str
+
+let runSatCheck (_,logic,input) =
+  try
+      let nomTable name =
+        assert (CoAlgFormula.isNominal name);
+        Some 0
+      in
+      let (tbox, f) = CoAlgFormula.importQuery input in
+      let res = CoAlgReasoner.isSat logic nomTable tbox f in
+      if res then Sat else Unsat
+  with | Stream.Error _ -> ParseError
+       | CoAlgFormula.CoAlgException _ -> ParseError
+
+
+let runSatCheckVerbose (sc:satCheck) =
+    let cs = colored_string in
+    let sotr = terminal_string_of_testResult in
+    let (expectation,_,title) = sc in
+    PF.printf "Is %-50s " (cs "1" title);
+    PF.printf "%s?… " (sotr expectation);
+    let res = runSatCheck sc in
+    if (res = expectation)
+    then PF.printf "%s\n" (cs "1;32" "Yes")
+    else PF.printf "%s\n  -> %s: Expected %s but got %s!\n"
+                    (cs "1;31" "No")
+                    (cs "1;31" "Failure")
+                    (sotr expectation)
+                    (sotr res)
+
 
-type testResult = | Correct | WrongAnswer | ParseError
 
-let runSatCheck sc =
-    WrongAnswer
diff --git a/src/testsuite/Testsuite.mli b/src/testsuite/Testsuite.mli
index ae17962..2276f95 100644
--- a/src/testsuite/Testsuite.mli
+++ b/src/testsuite/Testsuite.mli
@@ -4,9 +4,13 @@
     sorts = [| (parseFunctor Sys.argv.(2), [0]) |]
 *)
 
-type satCheck = bool * (CoAlgMisc.sortTable) * string (* sat * functors * formula *)
 
-type testResult = | Correct | WrongAnswer | ParseError
+type testResult = | Sat
+                  | Unsat
+                  | ParseError
+
+type satCheck = testResult * (CoAlgMisc.sortTable) * string (* expected * functors * formula *)
 
 val runSatCheck : satCheck -> testResult
+val runSatCheckVerbose : satCheck -> unit
 
diff --git a/src/testsuite/cool-testsuite.ml b/src/testsuite/cool-testsuite.ml
index ab625be..2d610c3 100644
--- a/src/testsuite/cool-testsuite.ml
+++ b/src/testsuite/cool-testsuite.ml
@@ -10,9 +10,19 @@ let kd  = [| (CM.MultiModalKD, [0]) |]
 let cl  = [| (CM.CoalitionLogic, [0]) |]
 let gml = [| (CM.GML, [0]) |]
 
-let main =
-    print_endline "todo"
+(* ============ multi modal K ============ *)
+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}" *)
+    ]
 
+let main =
+    foreach_l k_testcases (fun tc ->
+        runSatCheckVerbose tc
+    )
 
 let _ = main
 
-- 
GitLab