do.ncd 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. process main {
  2. If (@true) {
  3. blocker() blk1;
  4. blocker() blk2;
  5. Do {
  6. blk1->up();
  7. blk2->rdownup();
  8. } do;
  9. assert(blk1);
  10. assert(blk2);
  11. assert(do.succeeded);
  12. };
  13. If (@true) {
  14. blocker() blk1;
  15. blocker() blk2;
  16. Do {
  17. blk1->rdownup();
  18. _do->break();
  19. blk2->up();
  20. } do;
  21. assert(blk1);
  22. assert_false(blk2);
  23. assert_false(do.succeeded);
  24. };
  25. If (@true) {
  26. blocker() blk1;
  27. blocker() blk2;
  28. var(@true) flag;
  29. backtrack_point() point;
  30. If (flag) {
  31. Do {
  32. blk1->rdownup();
  33. flag->set(@false);
  34. point->go();
  35. blk2->up();
  36. };
  37. };
  38. assert(blk1);
  39. assert_false(blk2);
  40. };
  41. If (@true) {
  42. blocker() blk1;
  43. var(@true) flag;
  44. backtrack_point() point;
  45. If (flag) {
  46. Do {
  47. blk1->rdownup();
  48. flag->set(@false);
  49. point->rgo();
  50. };
  51. };
  52. assert(blk1);
  53. };
  54. If (@true) {
  55. blocker() blk1;
  56. blocker() blk2;
  57. Do {
  58. backtrack_point() point;
  59. _do->rbreak();
  60. blk1->up();
  61. point->go();
  62. blk2->up();
  63. } do;
  64. assert_false(do.succeeded);
  65. assert(blk1);
  66. assert_false(blk2);
  67. };
  68. If (@true) {
  69. blocker() blk1;
  70. blocker() blk2;
  71. blocker() blk3;
  72. Do {
  73. blk1->up();
  74. blk2->rdownup();
  75. } Interrupt {
  76. blk3->up();
  77. } do;
  78. assert(blk1);
  79. assert(blk2);
  80. assert_false(blk3);
  81. assert(do.succeeded);
  82. };
  83. If (@true) {
  84. blocker() blk1;
  85. blocker() blk2;
  86. var(@true) flag;
  87. backtrack_point() point;
  88. If (flag) {
  89. Do {
  90. blk1->rdownup();
  91. flag->set(@false);
  92. point->rgo();
  93. } Interrupt {
  94. blk2->up();
  95. };
  96. };
  97. assert(blk1);
  98. assert_false(blk2);
  99. };
  100. If (@true) {
  101. blocker() blk1;
  102. blocker() blk2;
  103. blocker() blk3;
  104. var(@true) flag;
  105. backtrack_point() point;
  106. If (flag) {
  107. Do {
  108. blk1->rdownup();
  109. flag->set(@false);
  110. point->go();
  111. blk2->up();
  112. } Interrupt {
  113. blk3->rdownup();
  114. _do->break();
  115. assert(@false);
  116. };
  117. };
  118. assert(blk1);
  119. assert_false(blk2);
  120. assert(blk3);
  121. };
  122. If (@true) {
  123. blocker() blk1;
  124. blocker() blk2;
  125. var(@true) flag;
  126. backtrack_point() point;
  127. If (flag) {
  128. Do {
  129. blk1->rdownup();
  130. flag->set(@false);
  131. point->go();
  132. assert(blk2);
  133. } Interrupt {
  134. blk2->rdownup();
  135. };
  136. };
  137. assert(blk1);
  138. assert(blk2);
  139. };
  140. If (@true) {
  141. blocker() blk1;
  142. blocker() blk2;
  143. var(@true) flag;
  144. backtrack_point() point;
  145. If (flag) {
  146. Do {
  147. blk1->rdownup();
  148. flag->set(@false);
  149. point->go();
  150. imperative("<none>", {}, @helper1, {}, "1000");
  151. assert_false(blk2);
  152. } Interrupt {
  153. blk2->rdownup();
  154. if(@false);
  155. };
  156. };
  157. assert(blk1);
  158. assert(blk2);
  159. };
  160. If (@true) {
  161. blocker() blk1;
  162. blocker() blk2;
  163. var(@true) flag;
  164. backtrack_point() point;
  165. If (flag) {
  166. Do {
  167. blk1->rdownup();
  168. flag->set(@false);
  169. point->go();
  170. imperative("<none>", {}, @helper2, {}, "1000");
  171. sleep("0", "1");
  172. assert_false(blk2);
  173. } Interrupt {
  174. blk2->rdownup();
  175. if(@false);
  176. };
  177. };
  178. assert(blk1);
  179. assert(blk2);
  180. };
  181. exit("0");
  182. }
  183. template helper1 {
  184. assert_false(_caller.blk2);
  185. }
  186. template helper2 {
  187. assert(_caller.blk2);
  188. }