source: rtems/testsuites/psxtests/psx01/init.c @ 80450c7

4.104.114.84.95
Last change on this file since 80450c7 was 3c48599, checked in by Joel Sherrill <joel.sherrill@…>, on 09/04/03 at 18:53:39

2003-09-04 Joel Sherrill <joel@…>

  • psx01/init.c, psx01/system.h, psx01/task.c, psx02/init.c, psx02/system.h, psx02/task.c, psx03/init.c, psx03/system.h, psx03/task.c, psx04/init.c, psx04/system.h, psx04/task1.c, psx04/task2.c, psx04/task3.c, psx05/init.c, psx05/system.h, psx05/task.c, psx05/task2.c, psx05/task3.c, psx06/init.c, psx06/system.h, psx06/task.c, psx06/task2.c, psx07/init.c, psx07/system.h, psx07/task.c, psx08/init.c, psx08/system.h, psx08/task1.c, psx08/task2.c, psx08/task3.c, psx09/init.c, psx09/system.h, psx10/init.c, psx10/system.h, psx10/task.c, psx10/task2.c, psx10/task3.c, psx11/init.c, psx11/system.h, psx11/task.c, psx12/init.c, psx12/system.h, psx12/task.c, psx13/main.c, psx13/test.c, psxcancel/init.c, psxfile01/main.c, psxfile01/test.c, psxhdrs/clock01.c, psxhdrs/clock02.c, psxhdrs/clock03.c, psxhdrs/clock04.c, psxhdrs/clock05.c, psxhdrs/clock06.c, psxhdrs/cond01.c, psxhdrs/cond02.c, psxhdrs/cond03.c, psxhdrs/cond04.c, psxhdrs/cond05.c, psxhdrs/cond06.c, psxhdrs/cond07.c, psxhdrs/cond08.c, psxhdrs/cond09.c, psxhdrs/cond10.c, psxhdrs/key01.c, psxhdrs/key02.c, psxhdrs/key03.c, psxhdrs/key04.c, psxhdrs/mutex01.c, psxhdrs/mutex02.c, psxhdrs/mutex03.c, psxhdrs/mutex04.c, psxhdrs/mutex05.c, psxhdrs/mutex06.c, psxhdrs/mutex07.c, psxhdrs/mutex08.c, psxhdrs/mutex09.c, psxhdrs/mutex10.c, psxhdrs/mutex11.c, psxhdrs/mutex12.c, psxhdrs/mutex13.c, psxhdrs/mutex14.c, psxhdrs/mutex15.c, psxhdrs/mutex16.c, psxhdrs/proc01.c, psxhdrs/proc02.c, psxhdrs/proc03.c, psxhdrs/proc04.c, psxhdrs/proc05.c, psxhdrs/proc06.c, psxhdrs/proc07.c, psxhdrs/proc08.c, psxhdrs/proc09.c, psxhdrs/proc10.c, psxhdrs/proc11.c, psxhdrs/proc12.c, psxhdrs/proc13.c, psxhdrs/proc14.c, psxhdrs/pthread01.c, psxhdrs/pthread02.c, psxhdrs/pthread03.c, psxhdrs/pthread04.c, psxhdrs/pthread05.c, psxhdrs/pthread06.c, psxhdrs/pthread07.c, psxhdrs/pthread08.c, psxhdrs/pthread09.c, psxhdrs/pthread10.c, psxhdrs/pthread11.c, psxhdrs/pthread12.c, psxhdrs/pthread13.c, psxhdrs/pthread14.c, psxhdrs/pthread15.c, psxhdrs/pthread16.c, psxhdrs/pthread17.c, psxhdrs/pthread18.c, psxhdrs/pthread19.c, psxhdrs/pthread20.c, psxhdrs/pthread21.c, psxhdrs/pthread22.c, psxhdrs/pthread23.c, psxhdrs/pthread24.c, psxhdrs/pthread25.c, psxhdrs/pthread26.c, psxhdrs/pthread27.c, psxhdrs/pthread28.c, psxhdrs/pthread29.c, psxhdrs/pthread30.c, psxhdrs/pthread31.c, psxhdrs/pthread32.c, psxhdrs/pthread33.c, psxhdrs/pthread34.c, psxhdrs/pthread35.c, psxhdrs/pthread36.c, psxhdrs/sched01.c, psxhdrs/sched02.c, psxhdrs/sched03.c, psxhdrs/sched04.c, psxhdrs/sched05.c, psxhdrs/sched06.c, psxhdrs/sched07.c, psxhdrs/sched08.c, psxhdrs/signal01.c, psxhdrs/signal02.c, psxhdrs/signal03.c, psxhdrs/signal04.c, psxhdrs/signal05.c, psxhdrs/signal06.c, psxhdrs/signal07.c, psxhdrs/signal08.c, psxhdrs/signal09.c, psxhdrs/signal10.c, psxhdrs/signal11.c, psxhdrs/signal12.c, psxhdrs/signal13.c, psxhdrs/signal14.c, psxhdrs/signal15.c, psxhdrs/signal16.c, psxhdrs/signal17.c, psxhdrs/signal18.c, psxhdrs/signal19.c, psxhdrs/signal20.c, psxhdrs/signal21.c, psxhdrs/signal22.c, psxhdrs/signal23.c, psxhdrs/sync01.c, psxhdrs/sync02.c, psxhdrs/sync03.c, psxhdrs/time01.c, psxhdrs/time02.c, psxhdrs/time03.c, psxhdrs/time04.c, psxhdrs/time05.c, psxhdrs/time06.c, psxhdrs/time07.c, psxhdrs/time08.c, psxhdrs/time09.c, psxhdrs/time10.c, psxhdrs/time11.c, psxhdrs/time12.c, psxhdrs/time13.c, psxhdrs/timer01.c, psxhdrs/timer02.c, psxhdrs/timer03.c, psxhdrs/timer04.c, psxhdrs/timer05.c, psxhdrs/timer06.c, psxhdrs/timer07.c, psxmsgq01/init.c, psxmsgq01/system.h, psxsem01/system.h, psxstat/main.c, psxstat/test.c, psxtime/main.c, psxtime/test.c, psxtimer/psxtimer.c, psxtimer/system.h: URL for license changed.
  • Property mode set to 100644
File size: 6.0 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-1999.
3 *  On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.com/license/LICENSE.
8 *
9 *  $Id$
10 */
11
12#define CONFIGURE_INIT
13#include "system.h"
14#include <sched.h>
15#include <sys/utsname.h>
16
17void *POSIX_Init(
18  void *argument
19)
20{
21  struct timespec tv;
22  struct timespec tr;
23  int             status;
24  int             priority;
25  pthread_t       thread_id;
26  time_t          seconds;
27  time_t          seconds1;
28  time_t          remaining;
29  struct tm       tm;
30  struct utsname  uts;
31
32  puts( "\n\n*** POSIX TEST 1 ***" );
33
34  build_time( &tm, TM_FRIDAY, TM_MAY, 24, 96, 11, 5, 0 );
35
36  /* print some system information */
37
38  puts( "Init: uname - EFAULT (invalid uts pointer argument)" );
39  status = uname( NULL );
40  assert( status == -1 );
41  assert( errno == EFAULT );
42   
43  status = uname( &uts );
44  assert( !status );
45  printf( "Init: uts.sysname: %s\n", uts.sysname );
46  printf( "Init: uts.nodename: %s\n", uts.nodename );
47  printf( "Init: uts.release: %s\n", uts.release );
48  printf( "Init: uts.version: %s\n", uts.version );
49  printf( "Init: uts.machine: %s\n", uts.machine );
50  puts("");
51   
52  /* error cases in clock_gettime and clock_settime */
53
54  puts( "Init: clock_gettime - EINVAL (invalid clockid)" );
55  status = clock_settime( -1, &tv );
56  assert( status == -1 );
57  assert( errno == EINVAL );
58
59  puts( "Init: clock_settime - EINVAL (invalid clockid)" );
60  status = clock_settime( -1, &tv );
61  assert( status == -1 );
62  assert( errno == EINVAL );
63
64  /* exercise clock_getres */
65
66  puts( "Init: clock_getres - EINVAL (invalid clockid)" );
67  status = clock_getres( -1, &tv );
68  assert( status == -1 );
69  assert( errno == EINVAL );
70
71  puts( "Init: clock_getres - EINVAL (NULL resolution)" );
72  status = clock_getres( CLOCK_REALTIME, NULL );
73  assert( status == -1 );
74  assert( errno == EINVAL );
75
76  puts( "Init: clock_getres - SUCCESSFUL" );
77  status = clock_getres( CLOCK_REALTIME, &tv );
78  printf( "Init: resolution = sec (%ld), nsec (%ld)\n", tv.tv_sec, tv.tv_nsec );
79  assert( !status );
80
81  /* set the time of day, and print our buffer in multiple ways */
82
83  tv.tv_sec = mktime( &tm );
84  assert( tv.tv_sec != -1 );
85
86  tv.tv_nsec = 0;
87
88  /* now set the time of day */
89
90  empty_line();
91
92  printf( asctime( &tm ) );
93  puts( "Init: clock_settime - SUCCESSFUL" );
94  status = clock_settime( CLOCK_REALTIME, &tv );
95  assert( !status );
96
97  printf( asctime( &tm ) );
98  printf( ctime( &tv.tv_sec ) );
99
100  /* use sleep to delay */
101
102  remaining = sleep( 3 );
103  assert( !remaining );
104
105  /* print new times to make sure it has changed and we can get the realtime */
106
107  status = clock_gettime( CLOCK_REALTIME, &tv );
108  assert( !status );
109
110  printf( ctime( &tv.tv_sec ) );
111
112  seconds = time( NULL );
113  printf( ctime( &seconds ) );
114
115  /*  just to have the value copied out through the parameter */
116 
117  seconds = time( &seconds1 );
118  assert( seconds == seconds1 );
119
120  /* check the time remaining */
121
122  printf( "Init: seconds remaining (%d)\n", (int)remaining );
123  assert( !remaining );
124
125  /* error cases in nanosleep */
126
127  empty_line();
128  puts( "Init: nanosleep - EINVAL (NULL time)" );
129  status = nanosleep ( NULL, &tr );
130  assert( status == -1 );
131  assert( errno == EINVAL );
132
133  tv.tv_sec = 0;
134  tv.tv_nsec = TOD_NANOSECONDS_PER_SECOND * 2;
135  puts( "Init: nanosleep - EINVAL (too many nanoseconds)" );
136  status = nanosleep ( &tv, &tr );
137  assert( status == -1 );
138  assert( errno == EINVAL );
139
140  /* this is actually a small delay or yield */
141  tv.tv_sec = -1;
142  tv.tv_nsec = 0;
143  puts( "Init: nanosleep - negative seconds small delay " );
144  status = nanosleep ( &tv, &tr );
145  assert( !status );
146
147  /* use nanosleep to yield */
148
149  tv.tv_sec = 0;
150  tv.tv_nsec = 0;
151
152  puts( "Init: nanosleep - yield" );
153  status = nanosleep ( &tv, &tr );
154  assert( !status );
155  assert( !tr.tv_sec );
156  assert( !tr.tv_nsec );
157
158  /* use nanosleep to delay */
159
160  tv.tv_sec = 3;
161  tv.tv_nsec = 500000;
162
163  puts( "Init: nanosleep - 3.05 seconds" );
164  status = nanosleep ( &tv, &tr );
165  assert( !status );
166
167  /* print the current real time again */
168
169  status = clock_gettime( CLOCK_REALTIME, &tv );
170  assert( !status );
171 
172  printf( ctime( &tv.tv_sec ) );
173
174  /* check the time remaining */
175
176  printf( "Init: sec (%ld), nsec (%ld) remaining\n", tr.tv_sec, tr.tv_nsec );
177  assert( !tr.tv_sec && !tr.tv_nsec );
178
179  /* get id of this thread */
180
181  Init_id = pthread_self();
182  printf( "Init: ID is 0x%08x\n", Init_id );
183
184  /* exercise get minimum priority */
185
186  priority = sched_get_priority_min( SCHED_FIFO );
187  printf( "Init: sched_get_priority_min (SCHED_FIFO) -- %d\n", priority );
188  assert( priority != -1 );
189
190  puts( "Init: sched_get_priority_min -- EINVAL (invalid policy)" );
191  priority = sched_get_priority_min( -1 );
192  assert( priority == -1 );
193  assert( errno == EINVAL );
194
195  /* exercise get maximum priority */
196 
197  priority = sched_get_priority_max( SCHED_FIFO );
198  printf( "Init: sched_get_priority_max (SCHED_FIFO) -- %d\n", priority );
199  assert( priority != -1 );
200
201  puts( "Init: sched_get_priority_min -- EINVAL (invalid policy)" );
202  priority = sched_get_priority_min( -1 );
203  assert( priority == -1 );
204  assert( errno == EINVAL );
205
206  /* print the round robin time quantum */
207 
208  status = sched_rr_get_interval( getpid(), &tr );
209  printf(
210    "Init: Round Robin quantum is %ld seconds, %ld nanoseconds\n",
211    tr.tv_sec,
212    tr.tv_nsec
213  );
214  assert( !status );
215 
216  /* create a thread */
217
218  puts( "Init: pthread_create - SUCCESSFUL" );
219  status = pthread_create( &thread_id, NULL, Task_1_through_3, NULL );
220  assert( !status );
221
222  /* too may threads error */
223
224  puts( "Init: pthread_create - EAGAIN (too many threads)" );
225  status = pthread_create( &thread_id, NULL, Task_1_through_3, NULL );
226  assert( status == EAGAIN );
227
228  puts( "Init: sched_yield to Task_1" );
229  status = sched_yield();
230  assert( !status );
231
232    /* switch to Task_1 */
233
234  /* exit this thread */
235
236  puts( "Init: pthread_exit" );
237  pthread_exit( NULL );
238
239    /* switch to Task_1 */
240
241  return NULL; /* just so the compiler thinks we returned something */
242}
Note: See TracBrowser for help on using the repository browser.