From b6e1c3bfa9ff1cb7814fc9aa7de9d33fa9ad10ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Bobot?= <francois.bobot@cea.fr>
Date: Wed, 30 Sep 2020 23:00:12 +0200
Subject: [PATCH] Tests add journal directory

---
 Makefile                                  |  2 +-
 ptests/ptests.ml                          |  5 ++-
 src/plugins/value/Eva.mli                 | 52 ++++++++++++-----------
 tests/journal/control.i                   |  8 ++--
 tests/journal/control2.c                  |  9 ++--
 tests/journal/intra.i                     |  4 +-
 tests/journal/oracle/control.0.res.oracle |  3 +-
 tests/journal/oracle/control.1.res.oracle |  6 +--
 tests/journal/oracle/control2.res.oracle  | 10 ++---
 tests/journal/oracle/control2_sav.res     | 12 +++---
 tests/journal/oracle/intra.res.oracle     | 32 +++++++-------
 11 files changed, 73 insertions(+), 70 deletions(-)

diff --git a/Makefile b/Makefile
index 229bb16d7d4..2480471e21d 100644
--- a/Makefile
+++ b/Makefile
@@ -168,7 +168,7 @@ force-reconfigure:
 ##############################################################################
 .PHONY: tests clean-tests
 
-TESTS=builtins callgraph cil constant_propagation float idct impact libc metrics misc occurrence pdg rte rte_manual scope slicing sparecode syntax test value jcdb
+TESTS=builtins callgraph cil constant_propagation float idct impact libc metrics misc occurrence pdg rte rte_manual scope slicing sparecode syntax test value jcdb journal
 tests: config.sed
 	find tests -name dune | grep -e "oracle.*/\|result.*/" | xargs --no-run-if-empty rm
 	dune exec -- ptests/ptests.exe
diff --git a/ptests/ptests.ml b/ptests/ptests.ml
index 0a8c10a46d3..824dce6ed06 100644
--- a/ptests/ptests.ml
+++ b/ptests/ptests.ml
@@ -1061,6 +1061,7 @@ module Fmt = struct
   let quote pr fmt s = Format.fprintf fmt "%S" (Format.asprintf "%a" pr s)
   let list pr fmt l = List.iter (fun s -> Format.fprintf fmt " %a" pr s) l
   let var_libavailable pr fmt s = Format.fprintf fmt "%%{lib-available:%a}" pr s
+  let package_as_deps pr fmt s = Format.fprintf fmt "(package %a)" pr s
 end
 
 let command_string ~result_fmt ~oracle_fmt command =
@@ -1137,7 +1138,6 @@ let command_string ~result_fmt ~oracle_fmt command =
    * in *)
   let macros = get_macros command in
   let deps = List.map (Macros.expand macros) command.deps in
-  let package_as_deps pr fmt s = Format.fprintf fmt "(package %a)" pr s in
   Format.fprintf result_fmt
     "(rule\n  \
      (targets %S %S %a)\n  \
@@ -1717,10 +1717,13 @@ let dispatcher ~result_fmt ~oracle_fmt file directory config =
       Format.fprintf result_fmt "\
       (rule
        (alias ptests)
+       (deps %a (package frama-c)%a)
        (targets %a %a)
 (action (system %S))
 )
 "
+        print_list config.dc_deps
+        Fmt.(list (package_as_deps (quote plugin_as_package))) config.dc_plugins
         print_list res.ex_log
         print_list res.ex_bin
         res.ex_cmd
diff --git a/src/plugins/value/Eva.mli b/src/plugins/value/Eva.mli
index 096db791027..12777dde807 100644
--- a/src/plugins/value/Eva.mli
+++ b/src/plugins/value/Eva.mli
@@ -22,6 +22,33 @@
 
 (** Analysis for values and pointers *)
 
+
+(** For internal use *)
+
+module Private: sig
+  module Abstractions = Abstractions
+  module Analysis = Analysis
+  module Alarmset = Alarmset
+  module Main_values = Main_values
+  module Value_parameters =Value_parameters
+  module Eval = Eval
+  module Eval_terms = Eval_terms
+  module Red_statuses = Red_statuses
+  module Abstract_value = Abstract_value
+  module Abstract_domain = Abstract_domain
+  module Mark_noresults = Mark_noresults
+  module Simple_memory = Simple_memory
+  module Structure = Structure
+  module Eval_typ = Eval_typ
+  module Eval_op = Eval_op
+  module Value_util = Value_util
+  module Value_results = Value_results
+  module Domain_builder = Domain_builder
+  module Main_locations = Main_locations
+  module Eval_annots = Eval_annots
+end
+
+
 module Value_results: sig
   type results
 
@@ -97,28 +124,3 @@ module Eva_annotations: sig
   val add_subdivision_annot : emitter:Emitter.t -> loc:Cil_types.location ->
     Cil_types.stmt -> int -> unit
 end
-
-(** For internal use *)
-
-module Private: sig
-  module Abstractions = Eva__Abstractions
-  module Analysis = Eva__Analysis
-  module Alarmset = Eva__Alarmset
-  module Main_values = Eva__Main_values
-  module Value_parameters =Eva__Value_parameters
-  module Eval = Eva__Eval
-  module Eval_terms = Eva__Eval_terms
-  module Red_statuses = Eva__Red_statuses
-  module Abstract_value = Eva__Abstract_value
-  module Abstract_domain = Eva__Abstract_domain
-  module Mark_noresults = Eva__Mark_noresults
-  module Simple_memory = Eva__Simple_memory
-  module Structure = Eva__Structure
-  module Eval_typ = Eva__Eval_typ
-  module Eval_op = Eva__Eval_op
-  module Value_util = Eva__Value_util
-  module Value_results = Eva__Value_results
-  module Domain_builder = Eva__Domain_builder
-  module Main_locations = Eva__Main_locations
-  module Eval_annots = Eva__Eval_annots
-end
diff --git a/tests/journal/control.i b/tests/journal/control.i
index 9a666496980..7611474cf1e 100644
--- a/tests/journal/control.i
+++ b/tests/journal/control.i
@@ -1,12 +1,12 @@
 /* run.config
    COMMENT: do not compare generated journals since they depend on current time
-   EXECNOW: BIN control_journal.ml BIN control_journal_bis.ml (frama-c -journal-enable -check -eva -deps -out @EVA_OPTIONS@ -main f -journal-name control_journal.ml control.i && cp control_journal.ml control_journal_bis.ml) > /dev/null 2> /dev/null
+   EXECNOW: BIN control_journal.ml BIN control_journal_bis.ml (frama-c -journal-enable -check -eva -deps -out @EVA_CONFIG@ -main f -journal-name control_journal.ml control.i && cp control_journal.ml control_journal_bis.ml) > /dev/null 2> /dev/null
   CMD: frama-c
-  OPT: -load-script control_journal -journal-disable
+  OPT: -load-script %{dep:control_journal.ml} -journal-disable
   CMD: frama-c
-  OPT: -load-script control_journal_bis -calldeps -journal-disable
+  OPT: -load-script %{dep:control_journal_bis.ml} -calldeps -journal-disable
   CMXS: abstract_cpt
-  EXECNOW: BIN abstract_cpt_journal.ml frama-c -journal-enable -load-module abstract_cpt -load-script %{dep:use_cpt.ml} -journal-name abstract_cpt_journal.ml > /dev/null 2> /dev/null
+  EXECNOW: BIN abstract_cpt_journal.ml frama-c -journal-enable -load-module %{dep:abstract_cpt.cmxs} -load-script %{dep:use_cpt.ml} -journal-name abstract_cpt_journal.ml > /dev/null 2> /dev/null
   CMD: frama-c
   OPT: -load-script %{dep:abstract_cpt_journal.ml} -load-module abstract_cpt -load-script %{dep:use_cpt.ml}
 */
diff --git a/tests/journal/control2.c b/tests/journal/control2.c
index 8b8d36c5130..1f948050fe0 100644
--- a/tests/journal/control2.c
+++ b/tests/journal/control2.c
@@ -1,8 +1,9 @@
 /* run.config
-  EXECNOW: BIN control_journal2.ml ./bin/toplevel.opt -journal-enable -eva -deps -out -main f -journal-name result/control_journal2.ml control2.c > /dev/null 2> /dev/null
-  EXECNOW: LOG control2_sav.res LOG control2_sav.err BIN control_journal_next2.ml FRAMAC_LIB=lib/fc ./bin/toplevel.byte -journal-enable -load-script %{dep:control_journal2} -lib-entry -journal-name control_journal_next2.ml control2.c > ./result/control2_sav.res 2> ./result/control2_sav.err
-  CMD: FRAMAC_LIB=lib/fc ./bin/toplevel.byte
-  OPT: -load-script result/control_journal_next2
+  PLUGIN: callgraph
+  EXECNOW: BIN control_journal2.ml PTESTS_ITS_NOT_FRAMAC=yes frama-c -no-autoload-plugins -load-plugin from,inout,eva,scope,variadic -journal-enable -eva -deps -out -main f -journal-name control_journal2.ml control2.c > /dev/null 2> /dev/null
+  EXECNOW: LOG control2_sav.res LOG control2_sav.err BIN control_journal_next2.ml PTESTS_ITS_NOT_FRAMAC=yes frama-c -no-autoload-plugins -load-plugin from,inout,eva,scope,variadic -journal-enable -load-script %{dep:control_journal2.ml} -lib-entry -journal-name control_journal_next2.ml control2.c  > control2_sav.res 2> control2_sav.err
+  CMD: PTESTS_ITS_NOT_FRAMAC=yes frama-c
+  OPT: -load-script %{dep:control_journal_next2.ml}
 */
 
 int x,y,c,d;
diff --git a/tests/journal/intra.i b/tests/journal/intra.i
index 268a1ad8530..cadfe3ac742 100644
--- a/tests/journal/intra.i
+++ b/tests/journal/intra.i
@@ -1,9 +1,9 @@
 /* run.config
    PLUGIN: sparecode
    CMXS: @PTEST_NAME@
-   EXECNOW: BIN intra_journal.ml @frama-c@ -eva-show-progress -load-module %{dep:@PTEST_NAME@.cmxs} -journal-enable -journal-name result/intra_journal.ml @PTEST_DIR@/@PTEST_NAME@.i > /dev/null 2> /dev/null
+   EXECNOW: BIN intra_journal.ml PTESTS_IT_IS_NOT_FRAMAC=yes @frama-c@ -eva-show-progress -no-autoload-plugins -load-plugin from,inout,eva,scope,variadic,sparecode -load-module %{dep:@PTEST_NAME@.cmxs} -journal-enable -journal-name intra_journal.ml @PTEST_NAME@.i > /dev/null 2> /dev/null
    CMD: @frama-c@ -load-module %{dep:@PTEST_NAME@.cmxs}
-   OPT: -load-script result/intra_journal -journal-disable
+   OPT: -load-script %{dep:intra_journal.ml} -journal-disable
 */
 
 /* Waiting for results such as:
diff --git a/tests/journal/oracle/control.0.res.oracle b/tests/journal/oracle/control.0.res.oracle
index c03380ec1e4..cde4638dac2 100644
--- a/tests/journal/oracle/control.0.res.oracle
+++ b/tests/journal/oracle/control.0.res.oracle
@@ -8,8 +8,7 @@
   c ∈ {0}
   d ∈ {0}
 [eva] control.i:18: starting to merge loop iterations
-[eva:alarm] control.i:21: Warning: 
-  signed overflow. assert x + 1 ≤ 2147483647;
+[eva:alarm] control.i:21: Warning: signed overflow. assert x + 1 ≤ 2147483647;
 [eva] Recording results for f
 [eva] done for function f
 [eva] ====== VALUES COMPUTED ======
diff --git a/tests/journal/oracle/control.1.res.oracle b/tests/journal/oracle/control.1.res.oracle
index ee218e0dec6..bcba463677d 100644
--- a/tests/journal/oracle/control.1.res.oracle
+++ b/tests/journal/oracle/control.1.res.oracle
@@ -8,8 +8,7 @@
   c ∈ {0}
   d ∈ {0}
 [eva] control.i:18: starting to merge loop iterations
-[eva:alarm] control.i:21: Warning: 
-  signed overflow. assert x + 1 ≤ 2147483647;
+[eva:alarm] control.i:21: Warning: signed overflow. assert x + 1 ≤ 2147483647;
 [eva] Recording results for f
 [eva] done for function f
 [eva] ====== VALUES COMPUTED ======
@@ -44,8 +43,7 @@
   y ∈ {0}
   c ∈ {0}
   d ∈ {0}
-[eva:alarm] control.i:21: Warning: 
-  signed overflow. assert x + 1 ≤ 2147483647;
+[eva:alarm] control.i:21: Warning: signed overflow. assert x + 1 ≤ 2147483647;
 [eva] Recording results for f
 [from] Computing for function f
 [from] Done for function f
diff --git a/tests/journal/oracle/control2.res.oracle b/tests/journal/oracle/control2.res.oracle
index acf4746fb0c..92d19a0804c 100644
--- a/tests/journal/oracle/control2.res.oracle
+++ b/tests/journal/oracle/control2.res.oracle
@@ -7,8 +7,8 @@
   y ∈ {0}
   c ∈ {0}
   d ∈ {0}
-[eva] control2.c:12: starting to merge loop iterations
-[eva:alarm] control2.c:15: Warning: 
+[eva] control2.c:13: starting to merge loop iterations
+[eva:alarm] control2.c:16: Warning: 
   signed overflow. assert x + 1 ≤ 2147483647;
 [eva] done for function f
 [eva] ====== VALUES COMPUTED ======
@@ -37,11 +37,11 @@
   y ∈ [--..--]
   c ∈ [--..--]
   d ∈ [--..--]
-[eva:alarm] control2.c:13: Warning: 
+[eva:alarm] control2.c:14: Warning: 
   signed overflow. assert y + 1 ≤ 2147483647;
-[eva:alarm] control2.c:13: Warning: 
+[eva:alarm] control2.c:14: Warning: 
   signed overflow. assert x + 1 ≤ 2147483647;
-[eva:alarm] control2.c:15: Warning: 
+[eva:alarm] control2.c:16: Warning: 
   signed overflow. assert x + 1 ≤ 2147483647;
 [eva] done for function f
 [eva] ====== VALUES COMPUTED ======
diff --git a/tests/journal/oracle/control2_sav.res b/tests/journal/oracle/control2_sav.res
index 3fb8ddd2c4f..fbebf504547 100644
--- a/tests/journal/oracle/control2_sav.res
+++ b/tests/journal/oracle/control2_sav.res
@@ -7,8 +7,8 @@
   y ∈ {0}
   c ∈ {0}
   d ∈ {0}
-[eva] control2.c:12: starting to merge loop iterations
-[eva:alarm] control2.c:15: Warning: 
+[eva] control2.c:13: starting to merge loop iterations
+[eva:alarm] control2.c:16: Warning: 
   signed overflow. assert x + 1 ≤ 2147483647;
 [eva] done for function f
 [eva] ====== VALUES COMPUTED ======
@@ -38,11 +38,11 @@
   y ∈ [--..--]
   c ∈ [--..--]
   d ∈ [--..--]
-[eva:alarm] control2.c:13: Warning: 
+[eva:alarm] control2.c:14: Warning: 
   signed overflow. assert y + 1 ≤ 2147483647;
-[eva:alarm] control2.c:13: Warning: 
+[eva:alarm] control2.c:14: Warning: 
   signed overflow. assert x + 1 ≤ 2147483647;
-[eva:alarm] control2.c:15: Warning: 
+[eva:alarm] control2.c:16: Warning: 
   signed overflow. assert x + 1 ≤ 2147483647;
 [eva] done for function f
 [eva] ====== VALUES COMPUTED ======
@@ -74,4 +74,4 @@
 [from] ====== END OF DEPENDENCIES ======
 [inout] Out (internal) for function f:
     x; y; i
-[kernel] writing journal in file `result/control_journal_next2.ml'.
+[kernel] writing journal in file `control_journal_next2.ml'.
diff --git a/tests/journal/oracle/intra.res.oracle b/tests/journal/oracle/intra.res.oracle
index 1d0c56f4f1d..5c5c77181c9 100644
--- a/tests/journal/oracle/intra.res.oracle
+++ b/tests/journal/oracle/intra.res.oracle
@@ -8,49 +8,49 @@
   X10 ∈ {0}
   Y10 ∈ {0}
 [eva] computing for function param <- main.
-  Called from intra.i:81.
+  Called from intra.i:82.
 [eva] Recording results for param
 [eva] Done for function param
 [eva] computing for function tmp <- main.
-  Called from intra.i:82.
-[eva] intra.i:20: assertion got status valid.
-[eva] intra.i:22: assertion got status valid.
+  Called from intra.i:83.
+[eva] intra.i:21: assertion got status valid.
+[eva] intra.i:23: assertion got status valid.
 [eva] Recording results for tmp
 [eva] Done for function tmp
 [eva] computing for function spare_called_fct <- main.
-  Called from intra.i:83.
+  Called from intra.i:84.
 [eva] Recording results for spare_called_fct
 [eva] Done for function spare_called_fct
 [eva] computing for function call_two_outputs <- main.
-  Called from intra.i:84.
+  Called from intra.i:85.
 [eva] computing for function two_outputs <- call_two_outputs <- main.
-  Called from intra.i:48.
+  Called from intra.i:49.
 [eva] Recording results for two_outputs
 [eva] Done for function two_outputs
 [eva] computing for function two_outputs <- call_two_outputs <- main.
-  Called from intra.i:52.
+  Called from intra.i:53.
 [eva] Recording results for two_outputs
 [eva] Done for function two_outputs
 [eva] Recording results for call_two_outputs
 [eva] Done for function call_two_outputs
 [eva] computing for function loop <- main.
-  Called from intra.i:85.
-[eva] intra.i:63: assertion got status valid.
-[eva] intra.i:64: loop invariant got status valid.
-[eva] intra.i:66: starting to merge loop iterations
+  Called from intra.i:86.
+[eva] intra.i:64: assertion got status valid.
+[eva] intra.i:65: loop invariant got status valid.
+[eva] intra.i:67: starting to merge loop iterations
 [eva] Recording results for loop
 [eva] Done for function loop
 [eva] computing for function assign <- main.
-  Called from intra.i:86.
+  Called from intra.i:87.
 [eva] Recording results for assign
 [eva] Done for function assign
 [eva] computing for function assign <- main.
-  Called from intra.i:87.
+  Called from intra.i:88.
 [eva] Recording results for assign
 [eva] Done for function assign
 [eva] computing for function stop <- main.
-  Called from intra.i:90.
-[kernel:annot:missing-spec] intra.i:90: Warning: 
+  Called from intra.i:91.
+[kernel:annot:missing-spec] intra.i:91: Warning: 
   Neither code nor specification for function stop, generating default assigns from the prototype
 [eva] using specification for function stop
 [eva] Done for function stop
-- 
GitLab