fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / timer.t
blobc4e06bd4784e7b6d35f9f9459d490fcaee408152
1 #! perl
2 # Copyright (C) 2001-2008, Parrot Foundation.
3 # $Id$
5 use strict;
6 use warnings;
7 use lib qw( . lib ../lib ../../lib );
8 use Test::More;
9 use Parrot::Test tests => 7;
10 use Parrot::Config;
12 =head1 NAME
14 t/pmc/timer.t - Timer PMCs
16 =head1 SYNOPSIS
18     % prove t/pmc/timer.t
20 =head1 DESCRIPTION
22 Tests the Timer PMC.
24 =cut
26 $ENV{TEST_PROG_ARGS} ||= '';
28 pasm_output_is( <<'CODE', <<'OUT', "Timer setup" );
29 .include "timer.pasm"
30     new P0, ['Timer']
31     set P0[.PARROT_TIMER_SEC], 7
32     set I0, P0[.PARROT_TIMER_SEC]
33     eq I0, 7, ok1
34     print "not "
35 ok1:
36     print "ok 1\n"
37     set I0, P0[.PARROT_TIMER_USEC]
38     eq I0, 0, ok2
39     print "not "
40 ok2:
41     print "ok 2\n"
43     set I0, P0[.PARROT_TIMER_RUNNING]
44     eq I0, 0, ok3
45     print "not "
46 ok3:
47     print "ok 3\n"
48     end
49 CODE
50 ok 1
51 ok 2
52 ok 3
53 OUT
55 pasm_output_is( <<'CODE', <<'OUT', "Timer setup - initializer" );
56 .include "timer.pasm"
57     new P1, ['FixedPMCArray']
58     set P1, 4
59     set P1[0], .PARROT_TIMER_SEC
60     set P1[1], 8
61     set P1[2], .PARROT_TIMER_USEC
62     set P1[3], 400000
64     new P0, ['Timer'], P1
65     set I0, P0[.PARROT_TIMER_SEC]
66     eq I0, 8, ok1
67     print "not "
68 ok1:
69     print "ok 1\n"
70     set I0, P0[.PARROT_TIMER_USEC]
71     eq I0, 400000, ok2
72     eq I0, 400001, ok2
73     eq I0, 399999, ok2
74     print "not "
75 ok2:
76     print "ok 2\n"
78     set I0, P0[.PARROT_TIMER_RUNNING]
79     eq I0, 0, ok3
80     print "not "
81 ok3:
82     print "ok 3\n"
83     end
84 CODE
85 ok 1
86 ok 2
87 ok 3
88 OUT
90 SKIP: {
91     skip( "No thread enabled", 3 ) unless ( $PConfig{HAS_THREADS} );
93     pasm_output_like( <<'CODE', <<'OUT', "Timer setup - initializer/start" );
94 .include "timer.pasm"
95     new P1, ['FixedPMCArray']
96     set P1, 6
97     set P1[0], .PARROT_TIMER_NSEC
98     set P1[1], 0.5
99     set P1[2], .PARROT_TIMER_HANDLER
100     get_global P2, "_timer_sub"
101     set P1[3], P2
102     set P1[4], .PARROT_TIMER_RUNNING
103     set P1[5], 1
105     new P0, ['Timer'], P1
106     print "ok 1\n"
107     sleep 1
108     print "ok 3\n"
109     end
110 .pcc_sub _timer_sub:
111     print "ok 2\n"
112     returncc
113 CODE
114 /ok 2/
117     pasm_output_is( <<'CODE', <<'OUT', "Timer setup - initializer/start/stop" );
118 .include "timer.pasm"
119     new P1, ['FixedPMCArray']
120     set P1, 6
121     set P1[0], .PARROT_TIMER_NSEC
122     set P1[1], 0.5
123     set P1[2], .PARROT_TIMER_HANDLER
124     get_global P2, "_timer_sub"
125     set P1[3], P2
126     set P1[4], .PARROT_TIMER_RUNNING
127     set P1[5], 1
129     new P0, ['Timer'], P1
130     print "ok 1\n"
131     # stop the timer
132     set P0[.PARROT_TIMER_RUNNING], 0
133     sleep 1
134     print "ok 2\n"
135     end
136 .pcc_sub _timer_sub:
137     print "never\n"
138     returncc
139 CODE
140 ok 1
141 ok 2
144     my @todo = $ENV{TEST_PROG_ARGS} =~ /--runcore=jit/ ?
145        ( todo => 'TT #1316, add scheduler features to JIT' ) : ();
146     pasm_output_is( <<'CODE', <<'OUT', "Timer setup - initializer/start/repeat" , @todo );
147 .include "timer.pasm"
148     new P1, ['FixedPMCArray']
149     set P1, 8
150     set P1[0], .PARROT_TIMER_NSEC
151     set P1[1], 0.2
152     set P1[2], .PARROT_TIMER_HANDLER
153     get_global P2, "_timer_sub"
154     set P1[3], P2
155     set P1[4], .PARROT_TIMER_REPEAT
156     set P1[5], 2
157     set P1[6], .PARROT_TIMER_RUNNING
158     set P1[7], 1
160     new P0, ['Timer'], P1
161     print "ok 1\n"
162     sleep 1
163     sleep 1
164     sleep 1
165     sleep 1
166     print "ok 3\n"
167     end
168 .pcc_sub _timer_sub:
169     print "ok 2\n"
170     returncc
171 CODE
172 ok 1
173 ok 2
174 ok 2
175 ok 2
176 ok 3
180 pir_output_is( << 'CODE', << 'OUTPUT', "check whether interface is done" );
182 .sub _main
183     .local pmc pmc1
184     pmc1 = new ['Timer']
185     .local int bool1
186     does bool1, pmc1, "scalar"
187     print bool1
188     print "\n"
189     does bool1, pmc1, "event"
190     print bool1
191     print "\n"
192     does bool1, pmc1, "no_interface"
193     print bool1
194     print "\n"
195     end
196 .end
197 CODE
201 OUTPUT
203 pir_output_is( << 'CODE', << 'OUTPUT', "Timer - many repetitions" );
205 .include 'timer.pasm'
207 .sub expired
208     $P0 = get_global "expired_count"
209     inc $P0
210 .end
212 .sub main :main
213     $P2 = new 'Integer'
214     set_global "expired_count", $P2
216     $P0 = new 'Timer'
217     $P1 = get_global "expired"
219     $P0[.PARROT_TIMER_HANDLER]  = $P1
220     $P0[.PARROT_TIMER_SEC]      = 0
221     $P0[.PARROT_TIMER_REPEAT]   = 9999
222     $P0[.PARROT_TIMER_RUNNING]  = 1
224 loop:
225     sleep 0
226     if $P2 < 10000 goto loop
228     sleep 0.5
229     say $P2
230 .end
231 CODE
232 10000
233 OUTPUT
235 # Local Variables:
236 #   mode: cperl
237 #   cperl-indent-level: 4
238 #   fill-column: 100
239 # End:
240 # vim: expandtab shiftwidth=4: