Просмотр исходного кода

ncd: tests: add process_manager.ncd

ambrop7 13 лет назад
Родитель
Сommit
8d08ab164f
1 измененных файлов с 87 добавлено и 0 удалено
  1. 87 0
      ncd/tests/process_manager.ncd

+ 87 - 0
ncd/tests/process_manager.ncd

@@ -0,0 +1,87 @@
+process main {
+    var("0") x;
+    
+    var("false") backtrack_check;
+    backtrack_point() point;
+    If (backtrack_check) {
+        val_equal(x, "10") a;
+        assert(a);
+        call("phase2", {});
+    };
+    
+    process_manager() mgr;
+    
+    mgr->start("name", "increment", {"1", "2", "false"});
+    val_equal(x, "1") a;
+    assert(a);
+    
+    mgr->stop("name");
+    val_equal(x, "3") a;
+    assert(a);
+    
+    mgr->start("name", "increment", {"3", "4", "true"});
+    val_equal(x, "6") a;
+    assert(a);
+    
+    mgr->stop("name");
+    val_equal(x, "6") a;
+    assert(a);
+    
+    mgr->start("name", "increment", {"5", "6", "false"});
+    val_equal(x, "6") a;
+    assert(a);
+    
+    backtrack_check->set("true");
+    point->go();
+}
+
+template phase2 {
+    var("0") x;
+    
+    var("false") backtrack_check;
+    backtrack_point() point;
+    If (backtrack_check) {
+        val_equal(x, "10") a;
+        assert(a);
+        exit("0");
+    };
+    
+    process_manager() mgr;
+    
+    mgr->start("name", "increment", {"1", "2", "true"});
+    val_equal(x, "1") a;
+    assert(a);
+    
+    mgr->stop("name");
+    val_equal(x, "1") a;
+    assert(a);
+    
+    mgr->start("name", "increment", {"3", "4", "true"});
+    val_equal(x, "1") a;
+    assert(a);
+    
+    depend("INC_DONE");
+    val_equal(x, "6") a;
+    assert(a);
+    
+    backtrack_check->set("true");
+    point->go();
+}
+
+template increment {
+    var(_arg0) amount;
+    var(_arg1) amount_deinit;
+    var(_arg2) do_sleep;
+    imperative("<none>", {}, "increment_deinit_inc", {}, "10000");
+    num_add(_caller.x, amount) new_x;
+    _caller.x->set(new_x);
+    If (do_sleep) {
+        sleep("0", "0");
+    };
+    provide("INC_DONE");
+}
+
+template increment_deinit_inc {
+    num_add(_caller._caller.x, _caller.amount_deinit) new_x;
+    _caller._caller.x->set(new_x);
+}