WIP
[tatoo.git] / src / run.ml
index 1f59ef8..0e4e0b3 100644 (file)
@@ -248,7 +248,7 @@ DEFINE AND_(t1,t2) =
                            | `Stay -> false, ss
                          in
                          if sum == dummy_status
-                           || (down && n_sum.rank < ss.NodeStatus.node.rank)
+                           (*|| (down && n_sum.rank < ss.NodeStatus.node.rank) *)
                            || StateSet.mem q n_sum.todo then
                            Unknown
                          else
@@ -354,6 +354,9 @@ DEFINE AND_(t1,t2) =
               }
           else c
         in
+        let () = Logger.msg `STATS "Run %i, Node %a, %a@\n"
+          i QName.print tag NodeStatus.print status0
+        in
         (* get the node_statuses for the first child, next sibling and parent *)
         let ps = unsafe_get_status status (T.preorder tree parent) in
         let fcs = unsafe_get_status status fc_id in
@@ -368,15 +371,18 @@ DEFINE AND_(t1,t2) =
             status1
           end
         in
+        let () = Logger.msg `STATS "Run %i, Node %a, %a@\n"
+          i QName.print tag NodeStatus.print status1
+        in
         (* recursively traverse the first child *)
         let () = loop_td_and_bu fc in
         (* here we re-enter the node from its first child,
            get the new status of the first child *)
         let fcs1 = unsafe_get_status status fc_id in
         (* update the status *)
-        let status1 = if status1.NodeStatus.node.rank < i then
+        let status1 = if status1.NodeStatus.node.rank < i+1 then
             NodeStatus.make { status1.NodeStatus.node with
-              rank = i;
+              rank = i+1;
               todo = bu_todo }
           else
             status1
@@ -389,10 +395,17 @@ DEFINE AND_(t1,t2) =
             status2
           end
         in
+        let () = Logger.msg `STATS "Run %i, Node %a, %a@\n"
+          (i+1) QName.print tag NodeStatus.print status2
+        in
         let () = loop_td_and_bu ns in
         let nss1 = unsafe_get_status status ns_id in
         if status2.NodeStatus.node.todo != StateSet.empty then
           let status3 = eval_trans auto fetch_trans_cache bu_cache tag fcs1 nss1 ps status2 in
+          let () = Logger.msg `STATS "Run %i, Node %a, %a@\n"
+            (i+1) QName.print tag NodeStatus.print status3
+          in
+
           if status3 != status2 then status.(node_id) <- status3
       end
     and loop_td_only node =
@@ -425,6 +438,10 @@ DEFINE AND_(t1,t2) =
               }
           else c
         in
+        let () = Logger.msg `STATS "Run %i, Node %a, %a@\n"
+          (i) QName.print tag NodeStatus.print status0
+        in
+
         (* get the node_statuses for the first child, next sibling and parent *)
         let ps = unsafe_get_status status (T.preorder tree parent) in
         let fcs = unsafe_get_status status fc_id in
@@ -433,6 +450,10 @@ DEFINE AND_(t1,t2) =
         if status0.NodeStatus.node.todo != StateSet.empty then begin
           let status1 = eval_trans auto fetch_trans_cache td_cache tag fcs nss ps status0 in
           (* update the cache if the status of the node changed *)
+          let () = Logger.msg `STATS "Run %i, Node %a, %a@\n"
+            (i) QName.print tag NodeStatus.print status1
+          in
+
           if status1 != status0 then status.(node_id) <- status1;
         end;
         (* recursively traverse the first child *)
@@ -440,8 +461,12 @@ DEFINE AND_(t1,t2) =
         loop_td_only ns
       end
     in
-    if bu_todo == StateSet.empty then loop_td_only (T.root tree)
-    else loop_td_and_bu (T.root tree)
+    if bu_todo == StateSet.empty then
+      let () = loop_td_only (T.root tree) in
+      run.pass <- run.pass + 1
+    else
+      let () = loop_td_and_bu (T.root tree) in
+      run.pass <- run.pass + 2
 
 
   let get_results run =
@@ -529,9 +554,9 @@ DEFINE AND_(t1,t2) =
     tree_size := T.size tree;
     let run = make auto tree in
     prepare_run run nodes;
-    for i = 0 to Ata.get_max_rank auto do
+    let rank = Ata.get_max_rank auto in
+    while run.pass <= rank do
       top_down run;
-      run.pass <- run.pass + 1;
       run.td_cache <- Cache.N5.create dummy_status;
       run.bu_cache <- Cache.N5.create dummy_status;
     done;