-
Notifications
You must be signed in to change notification settings - Fork 138
/
task.t
143 lines (111 loc) · 2.13 KB
/
task.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!./parrot
# Copyright (C) 2010-2011, Parrot Foundation.
.include 'sysinfo.pasm'
.loadlib 'sys_ops'
.sub main
.include 'test_more.pir'
$S0 = sysinfo .SYSINFO_PARROT_OS
if $S0 == 'MSWin32' goto run_win32_tests
goto run_unix_tests
run_win32_tests:
say "1..1"
say "ok 1 - All tests skipped on Win32"
exit 0
run_unix_tests:
plan(10)
tasks_run()
task_send_recv()
task_kill()
task_wait()
preempt_and_exit()
.end
.sub tasks_run
$P0 = new 'Integer', 0
set_global 'N', $P0
$P0 = get_global 'task1'
$P1 = new 'Task', $P0
schedule $P1
$P0 = get_global 'sub1'
schedule $P0
$P0 = get_global 'task2'
$P1 = new 'Task', $P0
schedule $P1
.end
.sub task1
ok(1, "task1 ran")
.end
.sub sub1
ok(1, "sub1 ran")
.end
.sub task2
ok(1, "task2 ran")
.end
.sub task_send_recv
$P0 = get_global 'recv_msg1'
$P1 = new 'Task', $P0
schedule $P1
pass
$P2 = new 'String'
$P2 = "Hai 1"
$P1.'send'($P2)
wait $P1
$P0 = get_global 'recv_msg2'
$P1 = new 'Task', $P0
$P2 = new 'String'
$P2 = "Hai 2"
$P1.'send'($P2)
schedule $P1
wait $P1
.end
.sub recv_msg1
$P0 = receive
$P1 = new 'String'
$P1 = "Hai 1"
is($P0, $P1, "Got message after block")
.end
.sub recv_msg2
$P0 = receive
$P1 = new 'String'
$P1 = "Hai 2"
is($P0, $P1, "Got existing message")
.end
.sub task_kill
$P0 = get_global 'task_to_kill'
$P1 = new 'Task', $P0
schedule $P1
pass
$P1.'kill'()
wait $P1
ok(1, "task_to_kill killed")
.end
.sub task_to_kill
ok(1, "task_to_kill running")
sleep 0.2
ok(0, "task_to_kill wasn't killed")
.end
.sub task_wait
$P0 = get_global 'wait_sub1'
$P1 = new 'Task', $P0
schedule $P1
wait $P1
ok(1, "After wait")
.end
.sub wait_sub1
ok(1, "in wait_sub1")
.end
.sub preempt_and_exit
$P0 = get_global 'exit0'
$P1 = new 'Task', $P0
schedule $P1
again:
goto again
.end
.sub exit0
ok(1, "Pre-empt and exit")
exit 0
.end
# Local Variables:
# mode: pir
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4 ft=pir: