Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.43 KB | None | 0 0
  1. import ballerina.io;
  2. import ballerina.runtime;
  3.  
  4. function forkJoinWithTimeoutTest1() returns map {
  5. map m = {};
  6. fork {
  7. worker w1 {
  8. int a = 5;
  9. int b = 0;
  10. a -> w2;
  11. b <- w2;
  12. }
  13. worker w2 {
  14. int a = 0;
  15. int b = 15;
  16. a <- w1;
  17. b -> w1;
  18. runtime:sleepCurrentWorker(5000);
  19. }
  20. } join (all) (map results) { m["x"] = 25; } timeout (1) (map results) { m["x"] = 15; }
  21. return m;
  22. }
  23.  
  24. function forkJoinWithTimeoutTest2() returns map {
  25. map m = {};
  26. fork {
  27. worker w1 {
  28. int a = 5;
  29. int b = 0;
  30. }
  31. worker w2 {
  32. int a = 0;
  33. int b = 15;
  34. runtime:sleepCurrentWorker(100);
  35. }
  36. } join (all) (map results) { m["x"] = 25; } timeout (5) (map results) { m["x"] = 15; }
  37. return m;
  38. }
  39.  
  40. function complexForkJoinWorkerSendReceive() returns map {
  41. map m = {};
  42. m["x"] = 10;
  43. fork {
  44. worker w1 {
  45. int a = 5;
  46. int b = 0;
  47. a -> w2;
  48. b <- w2;
  49. }
  50. worker w2 {
  51. int a = 0;
  52. int b = 15;
  53. a <- w1;
  54. b -> w1;
  55. }
  56. } join (all) (map results) { m["x"] = 17; }
  57. return m;
  58. }
  59.  
  60. function chainedWorkerSendReceive() returns map {
  61. map m = {};
  62. fork {
  63. worker w1 {
  64. int a = 3;
  65. int b = 0;
  66. a -> w2;
  67. b <- w3;
  68. m["x"] = b;
  69. }
  70. worker w2 {
  71. int a = 0;
  72. int b = 15;
  73. a <- w1;
  74. a * 2 -> w3;
  75. }
  76. worker w3 {
  77. int a = 0;
  78. int b = 0;
  79. a <- w2;
  80. b = a * 2;
  81. b -> w1;
  82. }
  83. } join (all) (map results) { }
  84. return m;
  85. }
  86.  
  87. function forkJoinWithSomeSelectedJoin1() returns int {
  88. map m = {};
  89. m["x"] = 0;
  90. m["y"] = 0;
  91. fork {
  92. worker w1 {
  93. int a = 55;
  94. int b = 5;
  95. m["x"] = a;
  96. m["y"] = b;
  97. }
  98. worker w2 {
  99. int a = 5;
  100. int b = 15;
  101. runtime:sleepCurrentWorker(2000);
  102. m["x"] = a;
  103. }
  104. worker w3 {
  105. int a = 0;
  106. int b = 15;
  107. runtime:sleepCurrentWorker(1000);
  108. m["x"] = b;
  109. }
  110. } join (some 1 w2, w3) (map results) { io:println(results); }
  111. int j;
  112. int k;
  113. j, _ = (int) m["x"];
  114. k, _ = (int) m["y"];
  115. return j * k;
  116. }
  117.  
  118. function forkJoinWithSomeSelectedJoin2() returns map {
  119. map m = {};
  120. m["x"] = 0;
  121. fork {
  122. worker w1 {
  123. int x = 80;
  124. x -> w2;
  125. x <- w3;
  126. m["x"] = x;
  127. 10 -> w2;
  128. }
  129. worker w2 {
  130. int a = 0;
  131. a <- w1;
  132. (a * 2) -> w3;
  133. a <- w1;
  134. 10 -> w3;
  135. }
  136. worker w3 {
  137. int a = 0;
  138. a <- w2;
  139. (a * 2) -> w1;
  140. a <- w2;
  141. }
  142. } join (some 1 w1, w2, w3) (map results) { io:println(results); }
  143. return m;
  144. }
  145.  
  146. function forkJoinWithSomeSelectedJoin3() returns map {
  147. map m = {};
  148. m["x"] = 0;
  149. fork {
  150. worker w1 {
  151. int x = 10;
  152. x -> w2;
  153. int a = 0;
  154. a <- w3;
  155. (a * 2) -> w2;
  156. }
  157. worker w2 {
  158. int a = 0;
  159. a <- w1;
  160. (a * 2) -> w3;
  161. a <- w1;
  162. m["x"] = a;
  163. (a * 2) -> w3;
  164. runtime:sleepCurrentWorker(1000);
  165. }
  166. worker w3 {
  167. int a = 0;
  168. a <- w2;
  169. (a * 2) -> w1;
  170. m["x"] <- w2;
  171. }
  172. } join (some 1 w2, w3) (map results) { io:println(results); }
  173. return m;
  174. }
  175.  
  176. function forkJoinWithSomeSelectedJoin4() returns int {
  177. map m = {};
  178. m["x"] = 0;
  179. fork {
  180. worker w1 {
  181. 10 -> w2;
  182. }
  183. worker w2 {
  184. int a = 0;
  185. a <- w1;
  186. a -> w3;
  187. m["x"] = a;
  188. }
  189. worker w3 {
  190. int a = 0;
  191. a <- w2;
  192. runtime:sleepCurrentWorker(1000);
  193. m["x"] = a * 2;
  194. }
  195. } join (some 2 w1, w2, w3) (map results) { io:println(results); }
  196. int x;
  197. x, _ = (int) m["x"];
  198. return x;
  199. }
  200.  
  201. function forkJoinWithSomeSelectedJoin5() returns int {
  202. map m = {};
  203. m["x"] = 0;
  204. fork {
  205. worker w1 {
  206. 10 -> w2;
  207. }
  208. worker w2 {
  209. int a = 0;
  210. a <- w1;
  211. a -> w3;
  212. m["x"] = a;
  213. a <- w3;
  214. }
  215. worker w3 {
  216. int a = 0;
  217. a <- w2;
  218. runtime:sleepCurrentWorker(5000);
  219. m["x"] = a * 2;
  220. a -> w2;
  221. }
  222. } join (some 2 w1, w2, w3) (map results) { } timeout (1) (map results) { m["x"] = 555; }
  223. int x;
  224. x, _ = (int) m["x"];
  225. return x;
  226. }
  227.  
  228. function forkJoinWithAllSelectedJoin1() returns map {
  229. map m = {};
  230. m["x"] = 0;
  231. fork {
  232. worker w1 {
  233. int x = 10;
  234. x -> w2;
  235. int a = 0;
  236. a <- w3;
  237. (a * 2) -> w2;
  238. }
  239. worker w2 {
  240. int a = 0;
  241. a <- w1;
  242. (a * 2) -> w3;
  243. a <- w1;
  244. m["x"] = a;
  245. (a * 2) -> w3;
  246. runtime:sleepCurrentWorker(1000);
  247. m["x"] = 33;
  248. }
  249. worker w3 {
  250. int a = 0;
  251. a <- w2;
  252. (a * 2) -> w1;
  253. m["x"] <- w2;
  254. }
  255. } join (all w2, w3) (map results) { io:println(results); }
  256. return m;
  257. }
  258.  
  259. function forkJoinWithAllSelectedJoin2() returns int {
  260. int result;
  261. fork {
  262. worker w1 {
  263. int x = 10;
  264. x -> w2;
  265. int a = 0;
  266. a <- w3;
  267. (a * 2) -> w2;
  268. }
  269. worker w2 {
  270. int a = 0;
  271. a <- w1;
  272. (a * 2) -> w3;
  273. a <- w1;
  274. result = a;
  275. (a * 2) -> w3;
  276. runtime:sleepCurrentWorker(2000);
  277. result = 33;
  278. }
  279. worker w3 {
  280. int a = 0;
  281. a <- w2;
  282. (a * 2) -> w1;
  283. result <- w2;
  284. }
  285. } join (all w2, w3) (map results) { } timeout (1) (map results) {
  286. if (result != 33) {
  287. result = 777;
  288. }
  289. }
  290. return result;
  291. }
  292.  
  293. function forkJoinWithMessagePassingTimeoutNotTriggered() returns map {
  294. map m = {};
  295. fork {
  296. worker w1 {
  297. int a = 5;
  298. a -> w2;
  299. int b = 0;
  300. b <- w2;
  301. b -> fork;
  302. }
  303. worker w2 {
  304. int a = 0;
  305. a <- w1;
  306. int b = 15;
  307. b -> w1;
  308. a -> fork;
  309. }
  310. } join (all) (map results) {
  311. any[] anyArray;
  312. int b;
  313. anyArray, _ = (any[]) results["w1"];
  314. b, _ = (int) anyArray[0];
  315. int a;
  316. anyArray, _ = (any[]) results["w2"];
  317. a, _ = (int) anyArray[0];
  318. m["x"] = (a + 1) * b;
  319. } timeout (5) (map results) {
  320. m["x"] = 15;
  321. }
  322. return m;
  323. }
  324.  
  325. function forkJoinInWorkers() returns int {
  326. worker wx {
  327. int x = 20;
  328. map m = {};
  329. fork {
  330. worker w1 {
  331. m["a"] = 10;
  332. }
  333. worker w2 {
  334. m["b"] = 20;
  335. }
  336. } join (all) (map results) {
  337. int a;
  338. int b;
  339. a, _ = (int) m["a"];
  340. b, _ = (int) m["b"];
  341. x = a + b;
  342. }
  343. return x;
  344. }
  345. }
  346.  
  347. function largeForkJoinCreationTest() returns int {
  348. int result = 0;
  349. map m = {};
  350. int c = 1000;
  351. while (c > 0) {
  352. m["x"] = 10;
  353. fork {
  354. worker w1 {
  355. int a = 2;
  356. int b = 0;
  357. a -> w2;
  358. b <- w10;
  359. m["x"] = result + b;
  360. }
  361. worker w2 {
  362. int a = 0;
  363. int b = 3;
  364. a <- w1;
  365. (a + b) -> w3;
  366. }
  367. worker w3 {
  368. int a = 0;
  369. int b = 4;
  370. a <- w2;
  371. (a + b) -> w4;
  372. }
  373. worker w4 {
  374. int a = 0;
  375. int b = 5;
  376. a <- w3;
  377. (a + b) -> w5;
  378. }
  379. worker w5 {
  380. int a = 0;
  381. int b = 6;
  382. a <- w4;
  383. (a + b) -> w6;
  384. }
  385. worker w6 {
  386. int a = 0;
  387. int b = 7;
  388. a <- w5;
  389. (a + b) -> w7;
  390. }
  391. worker w7 {
  392. int a = 0;
  393. int b = 8;
  394. a <- w6;
  395. (a + b) -> w8;
  396. }
  397. worker w8 {
  398. int a = 0;
  399. int b = 9;
  400. a <- w7;
  401. (a + b) -> w9;
  402. }
  403. worker w9 {
  404. int a = 0;
  405. int b = 10;
  406. a <- w8;
  407. (a + b) -> w10;
  408. }
  409. worker w10 {
  410. int a = 0;
  411. int b = 11;
  412. a <- w9;
  413. (a + b) -> w1;
  414. }
  415. } join (all) (map results) {
  416. var x, _ = (int) m["x"];
  417. result = x;
  418. }
  419. c = c - 1;
  420. }
  421. return result;
  422. }
  423.  
  424. function forkJoinWithStruct () returns string {
  425. string result;
  426. fork {
  427. worker w1 {
  428. foo f = {x:1, y:"w1"};
  429. io:println(f);
  430. f -> fork;
  431. }
  432. worker w2 {
  433. float f = 10.344;
  434. io:println("[w2] f: " + f);
  435. f -> fork;
  436. }
  437. } join (all) (map results) {
  438. var resW1, _ = (any[])results["w1"];
  439. var f, _ = (foo)resW1[0];
  440. result = "[join-block] sW1: " + f.y;
  441. var resW2, _ = (any[])results["w2"];
  442. var fW2, _ = (float)resW2[0];
  443. result = result + "[join-block] fW2: " + fW2;
  444. }
  445. return result;
  446. }
  447.  
  448. struct foo {
  449. int x;
  450. string y;
  451. }
  452.  
  453. function forkJoinWithSameWorkerContent () returns string {
  454. string result;
  455. fork {
  456. worker w1 {
  457. any[] a = [];
  458. a -> fork;
  459. }
  460. worker w2 {
  461. any[] b = [];
  462. b -> fork;
  463. }
  464.  
  465. } join (all) (map results) {
  466. io:println(results);
  467. }
  468. fork {
  469. worker w1 {
  470. string[] a = ["data1"];
  471. a -> fork;
  472. }
  473. worker w2 {
  474. string[] a = ["data2"];
  475. a -> fork;
  476. }
  477. } join (all) (map results) {
  478. var resW1, _ = (any[])results["w1"];
  479. var s1, _ = (string[])resW1[0];
  480. result = "W1: " + s1[0];
  481. var resW2, _ = (any[])results["w2"];
  482. var s2, _ = (string[])resW2[0];
  483. result = result + ", W2: " + s2[0];
  484. }
  485. return result;
  486. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement