From aa4cb35c49c72aa38c29883bf6c236748dc53078 Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Sat, 25 Jul 2020 14:27:29 +0200
Subject: [PATCH] [dive] offset exploration range by 1 to be more consistent

---
 ivette/src/frama-c/dive/Dive.tsx            |  4 ++--
 src/plugins/dive/build.ml                   | 20 +++++++++-----------
 src/plugins/dive/self.ml                    |  2 +-
 src/plugins/dive/server_interface.ml        | 13 +++++++++----
 src/plugins/dive/tests/dive/const.i         |  2 +-
 src/plugins/dive/tests/dive/pointed_param.i |  2 +-
 6 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/ivette/src/frama-c/dive/Dive.tsx b/ivette/src/frama-c/dive/Dive.tsx
index 6a968c76708..3f8c31dd406 100644
--- a/ivette/src/frama-c/dive/Dive.tsx
+++ b/ivette/src/frama-c/dive/Dive.tsx
@@ -377,13 +377,13 @@ class Dive {
     switch (this.mode) {
       case 'explore':
         await Dive.setWindow({
-          perception: { backward: 2, forward: 0 },
+          perception: { backward: 3, forward: 1 },
           horizon: { backward: 3, forward: 1 },
         });
         break;
       case 'overview':
         await Dive.setWindow({
-          perception: { backward: 3, forward: 0 },
+          perception: { backward: 4, forward: 1 },
           horizon: { backward: null, forward: null },
         });
         break;
diff --git a/src/plugins/dive/build.ml b/src/plugins/dive/build.ml
index 8480a441870..b621e26021a 100644
--- a/src/plugins/dive/build.ml
+++ b/src/plugins/dive/build.ml
@@ -667,24 +667,25 @@ let bfs ~depth ~iter_succ f root =
   Queue.add (root,0) queue;
   while not (Queue.is_empty queue) do
     let (n,d) = Queue.take queue in
-    f n d;
-    if d < depth then
+    if d < depth then begin
+      f n;
       iter_succ (fun n' -> Queue.add (n',d+1) queue) n
+    end
   done
 
 let explore_backward ~depth context root =
   context.graph_diff <- { context.graph_diff with last_root = Some root };
   let iter_succ f n = Graph.iter_pred f context.graph n
-  and explore_node n d =
-    if n.node_writes_computation <> Done && (should_explore n || d <= 0) then
+  and explore_node n =
+    if n.node_writes_computation <> Done && should_explore n then
       build_node_writes context n
   in
   bfs ~depth ~iter_succ explore_node root
 
 let explore_forward ~depth context root =
   let iter_succ f n = Graph.iter_succ f context.graph n
-  and explore_node n d =
-    if n.node_reads_computation <> Done && (should_explore n || d <= 0) then
+  and explore_node n =
+    if n.node_reads_computation <> Done && should_explore n then
       build_node_reads context n;
   in
   bfs ~depth ~iter_succ explore_node root
@@ -777,11 +778,8 @@ let reduce_to_horizon ({ graph } as context) range new_root =
   in
   Graph.iter_vertex update graph
 
-let show context node =
-  if node.node_hidden then begin
-    node.node_hidden <- false;
-    explore_backward ~depth:0 context node
-  end
+let show _context node =
+  node.node_hidden <- false
 
 let hide context node =
   if not node.node_hidden then begin
diff --git a/src/plugins/dive/self.ml b/src/plugins/dive/self.ml
index 75bc7d1cce2..e83c8f924e3 100644
--- a/src/plugins/dive/self.ml
+++ b/src/plugins/dive/self.ml
@@ -48,7 +48,7 @@ module DepthLimit = Int
       let option_name = "-dive-depth-limit"
       let help = "Build dependencies up to a depth of N."
       let arg_name = "N"
-      let default = 2
+      let default = 3
     end)
 
 module FromFunctionAlarms = Kernel_function_set
diff --git a/src/plugins/dive/server_interface.ml b/src/plugins/dive/server_interface.ml
index 826b52e8d66..b17d0b267f3 100644
--- a/src/plugins/dive/server_interface.ml
+++ b/src/plugins/dive/server_interface.ml
@@ -44,7 +44,7 @@ let get_context =
 
 
 let global_window = ref {
-    perception = { backward = Some 2 ; forward = Some 0 };
+    perception = { backward = Some 2 ; forward = Some 1 };
     horizon = { backward = None ; forward = None };
   }
 
@@ -238,6 +238,9 @@ end
 (* --- Actions                                                            --- *)
 (* -------------------------------------------------------------------------- *)
 
+let result context =
+  Build.get_graph context, Build.take_last_differences context
+
 let finalize' context node_opt =
   begin match node_opt with
     | None -> ()
@@ -253,7 +256,7 @@ let finalize' context node_opt =
       then
         Build.reduce_to_horizon context horizon node
   end;
-  Build.get_graph context, Build.take_last_differences context
+  result context
 
 let finalize context node =
   finalize' context (Some node)
@@ -291,6 +294,7 @@ let () = Request.register ~package
     ~input:(module NodeId) ~output:(module GraphDiff)
     begin fun node ->
       let context = get_context () in
+      Build.show context node;
       finalize context node
     end
 
@@ -301,7 +305,8 @@ let () = Request.register ~package
     begin fun node ->
       let context = get_context () in
       Build.show context node;
-      finalize context node
+      Build.explore_backward ~depth:1 context node;
+      result context
     end
 
 let () = Request.register ~package
@@ -311,5 +316,5 @@ let () = Request.register ~package
     begin fun node ->
       let context = get_context () in
       Build.hide context node;
-      finalize' context None
+      result context
     end
diff --git a/src/plugins/dive/tests/dive/const.i b/src/plugins/dive/tests/dive/const.i
index 7001746bea3..622693ee684 100644
--- a/src/plugins/dive/tests/dive/const.i
+++ b/src/plugins/dive/tests/dive/const.i
@@ -1,5 +1,5 @@
 /* run.config
-STDOPT: +"-dive-from-variables main::res -dive-depth-limit 4"
+STDOPT: +"-dive-from-variables main::res -dive-depth-limit 5"
 */
 
 int f(int x, int y)
diff --git a/src/plugins/dive/tests/dive/pointed_param.i b/src/plugins/dive/tests/dive/pointed_param.i
index e6bd4f47db0..197ef953ebf 100644
--- a/src/plugins/dive/tests/dive/pointed_param.i
+++ b/src/plugins/dive/tests/dive/pointed_param.i
@@ -1,5 +1,5 @@
 /* run.config
-STDOPT: +"-dive-from-variables main::y -dive-depth-limit 5"
+STDOPT: +"-dive-from-variables main::y -dive-depth-limit 6"
 */
 
 float h(float *p)
-- 
GitLab