• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/ucode/tests/custom/06_lib_uloop/11_task_messages

  1 The event loop keeps running while a task works between two messages.
  2 
  3 -- Testcase --
  4 {%
  5         import * as uloop from 'uloop';
  6 
  7         uloop.init();
  8 
  9         let ticks = 0, seen = [];
 10 
 11         uloop.timer(20, function() {
 12                 ticks++;
 13                 this.set(20);
 14         });
 15 
 16         uloop.task(
 17                 (pipe) => {
 18                         pipe.send('first');
 19                         sleep(500);
 20 
 21                         return 'last';
 22                 },
 23                 (msg) => {
 24                         push(seen, [ msg, ticks ]);
 25 
 26                         if (msg == 'last')
 27                                 uloop.end();
 28                 }
 29         );
 30 
 31         uloop.timer(2000, () => uloop.end());
 32         uloop.run();
 33 
 34         printf("%J, ticks between: %s\n", map(seen, (m) => m[0]),
 35                 seen[1][1] - seen[0][1] >= 10);
 36 
 37         uloop.done();
 38 %}
 39 -- End --
 40 
 41 -- Expect stdout --
 42 [ "first", "last" ], ticks between: true
 43 -- End --
 44 
 45 
 46 Messages larger than the pipe buffer arrive in several reads and are
 47 delivered complete and in order.
 48 
 49 -- Testcase --
 50 {%
 51         import * as uloop from 'uloop';
 52 
 53         uloop.init();
 54 
 55         let seen = [];
 56 
 57         uloop.task(
 58                 (pipe) => {
 59                         pipe.send(sprintf('%102400s', ''));
 60                         pipe.send('sentinel');
 61                         pipe.send(sprintf('%4194304s', ''));
 62 
 63                         return 'done';
 64                 },
 65                 (msg) => {
 66                         push(seen, length(msg) > 8 ? length(msg) : msg);
 67 
 68                         if (msg == 'done')
 69                                 uloop.end();
 70                 }
 71         );
 72 
 73         uloop.timer(5000, () => uloop.end());
 74         uloop.run();
 75 
 76         printf("%J\n", seen);
 77 
 78         uloop.done();
 79 %}
 80 -- End --
 81 
 82 -- Expect stdout --
 83 [ 102400, "sentinel", 4194304, "done" ]
 84 -- End --
 85 
 86 
 87 Input requests are answered in order with the output messages around them.
 88 
 89 -- Testcase --
 90 {%
 91         import * as uloop from 'uloop';
 92 
 93         uloop.init();
 94 
 95         let seen = [], n = 0;
 96 
 97         uloop.task(
 98                 (pipe) => {
 99                         let got = [];
100 
101                         for (let i = 0; i < 3; i++) {
102                                 pipe.send(`out ${i}`);
103                                 push(got, pipe.receive());
104                         }
105 
106                         return got;
107                 },
108                 (msg) => {
109                         push(seen, msg);
110 
111                         if (type(msg) == 'array')
112                                 uloop.end();
113                 },
114                 () => `in ${n++}`
115         );
116 
117         uloop.timer(2000, () => uloop.end());
118         uloop.run();
119 
120         printf("%J\n", seen);
121 
122         uloop.done();
123 %}
124 -- End --
125 
126 -- Expect stdout --
127 [ "out 0", "out 1", "out 2", [ "in 0", "in 1", "in 2" ] ]
128 -- End --

This page was automatically generated by LXR 0.3.1.  •  OpenWrt