source: rtems/testsuites/ada/tmtests/tmck/tmtest.adb @ 48aa4b5d

5
Last change on this file since 48aa4b5d was f6c9334d, checked in by Sebastian Huber <sebastian.huber@…>, on 12/01/17 at 07:51:17

ada: Add standard test begin/end message

  • Property mode set to 100644
File size: 4.7 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Timer Check Test of the RTEMS
7--  Timing Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-2011.
14--  On-Line Applications Research Corporation (OAR).
15--
16--  The license and distribution terms for this file may in
17--  the file LICENSE in this distribution or at
18--  http://www.rtems.org/license/LICENSE.
19--
20
21with TIMER_DRIVER;
22with INTERFACES; use INTERFACES;
23with TEST_SUPPORT;
24with TEXT_IO;
25with TIME_TEST_SUPPORT;
26with UNSIGNED32_IO;
27
28package body TMTEST is
29
30--
31--  INIT
32--
33
34   procedure INIT (
35      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
36   ) is
37      pragma Unreferenced(ARGUMENT);
38      STATUS : RTEMS.STATUS_CODES;
39   begin
40
41      TEXT_IO.NEW_LINE( 2 );
42      TEST_SUPPORT.ADA_TEST_BEGIN;
43
44      TIMER_DRIVER.SET_FIND_AVERAGE_OVERHEAD( TRUE );
45
46      TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
47
48      RTEMS.TASKS.CREATE(
49         TMTEST.TASK_NAME( 1 ),
50         1,
51         2048,
52         RTEMS.DEFAULT_MODES,
53         RTEMS.DEFAULT_ATTRIBUTES,
54         TMTEST.TASK_ID( 1 ),
55         STATUS
56      );
57      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
58
59      RTEMS.TASKS.START(
60         TMTEST.TASK_ID( 1 ),
61         TMTEST.TASK_1'ACCESS,
62         0,
63         STATUS
64      );
65      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
66
67      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
68      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
69
70   end INIT;
71
72--
73--  TASK_1
74--
75
76   procedure TASK_1 (
77      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
78   ) is
79      pragma Unreferenced(ARGUMENT);
80   begin
81
82      TMTEST.CHECK_READ_TIMER;
83
84TEST_SUPPORT.PAUSE;
85
86      TIMER_DRIVER.INITIALIZE;
87      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
88      TIME_TEST_SUPPORT.PUT_TIME(
89         "NULL timer stopped at",
90         TMTEST.END_TIME,
91         1,
92         0,
93         0
94      );
95
96      TIMER_DRIVER.INITIALIZE;
97         for INDEX in 0 .. 1000
98         loop
99            TIMER_DRIVER.EMPTY_FUNCTION;
100         end loop;
101      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
102      TIME_TEST_SUPPORT.PUT_TIME(
103         "LOOP (1000) timer stopped at",
104         TMTEST.END_TIME,
105         1,
106         0,
107         0
108      );
109
110      TIMER_DRIVER.INITIALIZE;
111         for INDEX in 0 .. 10000
112         loop
113            TIMER_DRIVER.EMPTY_FUNCTION;
114         end loop;
115      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
116      TIME_TEST_SUPPORT.PUT_TIME(
117         "LOOP (10000) timer stopped at",
118         TMTEST.END_TIME,
119         1,
120         0,
121         0
122      );
123
124      TIMER_DRIVER.INITIALIZE;
125         for INDEX in 0 .. 50000
126         loop
127            TIMER_DRIVER.EMPTY_FUNCTION;
128         end loop;
129      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
130      TIME_TEST_SUPPORT.PUT_TIME(
131         "LOOP (50000) timer stopped at",
132         TMTEST.END_TIME,
133         1,
134         0,
135         0
136      );
137
138      TIMER_DRIVER.INITIALIZE;
139         for INDEX in 0 .. 100000
140         loop
141            TIMER_DRIVER.EMPTY_FUNCTION;
142         end loop;
143      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
144      TIME_TEST_SUPPORT.PUT_TIME(
145         "LOOP (100000) timer stopped at",
146         TMTEST.END_TIME,
147         1,
148         0,
149         0
150      );
151
152      TEST_SUPPORT.ADA_TEST_END;
153      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
154   
155   end TASK_1;
156
157--
158--  CHECK_READ_TIMER
159--
160
161   procedure CHECK_READ_TIMER
162   is
163      TIME  : RTEMS.UNSIGNED32;
164   begin
165
166      for INDEX in TMTEST.DISTRIBUTION'FIRST .. TMTEST.DISTRIBUTION'LAST
167      loop
168          TMTEST.DISTRIBUTION( INDEX ) := 0;
169      end loop;
170
171      for INDEX in 1 .. TMTEST.OPERATION_COUNT
172      loop
173
174         loop
175            TIMER_DRIVER.INITIALIZE;
176            TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
177     
178            exit when
179               TMTEST.END_TIME <= RTEMS.UNSIGNED32( TMTEST.DISTRIBUTION'LAST );
180
181            TEXT_IO.PUT( "TOO LONG (" );
182            UNSIGNED32_IO.PUT( TMTEST.END_TIME );
183            TEXT_IO.PUT_LINE( ")!!!" );
184         end loop;
185
186         TMTEST.DISTRIBUTION( TMTEST.END_TIME ) :=
187             TMTEST.DISTRIBUTION( TMTEST.END_TIME ) + 1;
188
189      end loop;
190
191      TEXT_IO.PUT_LINE(
192         "Units may not be in microseconds for this test!!!"
193      );
194
195      TIME := 0;
196
197      for INDEX in TMTEST.DISTRIBUTION'FIRST .. TMTEST.DISTRIBUTION'LAST
198      loop
199         if TMTEST.DISTRIBUTION( INDEX ) /= 0 then
200            TIME := TIME + (TMTEST.DISTRIBUTION( INDEX ) * INDEX);
201            UNSIGNED32_IO.PUT( INDEX );
202            TEXT_IO.PUT( " " );
203            UNSIGNED32_IO.PUT( TMTEST.DISTRIBUTION( INDEX ) );
204            TEXT_IO.NEW_LINE;
205         end if;
206      end loop;
207
208      TEXT_IO.PUT( "Total time = " );
209      UNSIGNED32_IO.PUT( TIME );
210      TEXT_IO.NEW_LINE;
211
212   end CHECK_READ_TIMER;
213
214end TMTEST;
Note: See TracBrowser for help on using the repository browser.