2007-10-18 Glenn Humphrey <glenn.humphrey@OARcorp.com>

* sptests/sp09/sp09.scn, sptests/sp09/sptest.adb,
	sptests/sp13/sp13.scn, sptests/sp13/sptest.adb,
	sptests/sp16/sp16.scn, sptests/sp16/sptest.adb,
	sptests/sp16/sptest.ads, sptests/sp20/sp20.scn,
	sptests/sp20/sptest.adb, sptests/sp20/sptest.ads: Updated tests to
	match the current C tests and regenerated the .scn files.
This commit is contained in:
Glenn Humphrey
2007-10-18 19:36:29 +00:00
parent 2fc47c66d2
commit 3d2bf71da0
11 changed files with 566 additions and 53 deletions

View File

@@ -1,3 +1,12 @@
2007-10-18 Glenn Humphrey <glenn.humphrey@OARcorp.com>
* sptests/sp09/sp09.scn, sptests/sp09/sptest.adb,
sptests/sp13/sp13.scn, sptests/sp13/sptest.adb,
sptests/sp16/sp16.scn, sptests/sp16/sptest.adb,
sptests/sp16/sptest.ads, sptests/sp20/sp20.scn,
sptests/sp20/sptest.adb, sptests/sp20/sptest.ads: Updated tests to
match the current C tests and regenerated the .scn files.
2007-10-10 Glenn Humphrey <glenn.humphrey@OARcorp.com>
* configure.ac, samples/base_sp/base_sp.scn, samples/base_sp/config.h,

View File

@@ -101,6 +101,7 @@ TA1 - message_queue_create - Q 2 - TOO_MANY
TA1 - message_queue_delete - unknown INVALID_ID
TA1 - message_queue_delete - local INVALID_ID
TA1 - message_queue_ident - INVALID_NAME
TA1 - message_queue_get_number_pending - INVALID_ID
TA1 - message_queue_flush - INVALID_ID
TA1 - message_queue_receive - INVALID_ID
TA1 - message_queue_receive - Q 1 - UNSATISFIED
@@ -236,4 +237,14 @@ TA1 - timer_fire_after - INVALID_NUMBER
TA1 - timer_fire_when - 8:30:45 2/ 5/1987 - INVALID_CLOCK
TA1 - clock_get - 0: 0: 0 1/ 1/1992
TA1 - timer_fire_when - 8:30:45 2/ 5/1990 - before INVALID_CLOCK
TA1 - timer_server_fire_after - INCORRECT_STATE
TA1 - timer_server_fire_when - INCORRECT_STATE
TA1 - timer_initiate_server - INVALID_PRIORITY
TA1 - timer_initiate_server
TA1 - timer_server_fire_after - INVALID_ID
TA1 - timer_server_fire_when - INVALID_ID
TA1 - timer_server_fire_after - INVALID_NUMBER
TA1 - timer_server_fire_when - 8:30:45 2/ 5/1987 - INVALID_CLOCK
TA1 - clock_get - 0: 0: 0 1/ 1/1992
TA1 - timer_server_fire_when - 8:30:45 2/ 5/1990 - before INVALID_CLOCK
*** END OF TEST 9 ***

View File

@@ -1317,6 +1317,14 @@ package body SPTEST is
);
TEXT_IO.PUT_LINE( "TA1 - message_queue_ident - INVALID_NAME" );
RTEMS.MESSAGE_QUEUE_GET_NUMBER_PENDING( 100, COUNT, STATUS );
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INVALID_ID,
"MESSAGE_QUEUE_GET_NUMBER_PENDING WITH ILLEGAL ID"
);
TEXT_IO.PUT_LINE( "TA1 - message_queue_get_number_pending - INVALID_ID" );
RTEMS.MESSAGE_QUEUE_FLUSH( 100, COUNT, STATUS );
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
@@ -2882,6 +2890,130 @@ package body SPTEST is
);
TEXT_IO.NEW_LINE;
RTEMS.TIMER_SERVER_FIRE_AFTER(
0, 5, SPTEST.DELAYED_SUBPROGRAM'ACCESS, RTEMS.NULL_ADDRESS, STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INCORRECT_STATE,
"TIMER_SERVER_FIRE_AFTER INCORRECT STATE"
);
TEXT_IO.PUT_LINE( "TA1 - timer_server_fire_after - INCORRECT_STATE" );
RTEMS.TIMER_SERVER_FIRE_WHEN(
0, TIME, SPTEST.DELAYED_SUBPROGRAM'ACCESS, RTEMS.NULL_ADDRESS, STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INCORRECT_STATE,
"TIMER_SERVER_FIRE_WHEN INCORRECT STATE"
);
TEXT_IO.PUT_LINE( "TA1 - timer_server_fire_when - INCORRECT_STATE" );
RTEMS.timer_initiate_server( 0, 0, 0, STATUS );
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INVALID_PRIORITY,
"timer_initiate_server invalid priority"
);
TEXT_IO.PUT_LINE( "TA1 - timer_initiate_server - INVALID_PRIORITY" );
RTEMS.timer_initiate_server(
-- XXX ask Joel
-- RTEMS.TIMER_SERVER_DEFAULT_PRIORITY, 0, 0, STATUS
-1, 0, 0, STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "timer_initiate_server" );
TEXT_IO.PUT_LINE( "TA1 - timer_initiate_server" );
RTEMS.TIMER_SERVER_FIRE_AFTER(
16#010100#,
5 * TEST_SUPPORT.TICKS_PER_SECOND,
SPTEST.DELAYED_SUBPROGRAM'ACCESS,
RTEMS.NULL_ADDRESS,
STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INVALID_ID,
"TIMER_SERVER_FIRE_AFTER ILLEGAL ID"
);
TEXT_IO.PUT_LINE( "TA1 - timer_server_fire_after - INVALID_ID" );
TIME := ( 1994, 12, 31, 9, 0, 0, 0 );
RTEMS.TIMER_SERVER_FIRE_WHEN(
16#010100#,
TIME,
SPTEST.DELAYED_SUBPROGRAM'ACCESS,
RTEMS.NULL_ADDRESS,
STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INVALID_ID,
"TIMER_SERVER_FIRE_WHEN WITH ILLEGAL ID"
);
TEXT_IO.PUT_LINE( "TA1 - timer_server_fire_when - INVALID_ID" );
RTEMS.TIMER_SERVER_FIRE_AFTER(
SPTEST.TIMER_ID( 1 ),
0,
SPTEST.DELAYED_SUBPROGRAM'ACCESS,
RTEMS.NULL_ADDRESS,
STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INVALID_NUMBER,
"TIMER_SERVER_FIRE_AFTER WITH 0 TICKS"
);
TEXT_IO.PUT_LINE( "TA1 - timer_server_fire_after - INVALID_NUMBER" );
TIME := ( 1987, 2, 5, 8, 30, 45, 0 );
RTEMS.TIMER_SERVER_FIRE_WHEN(
SPTEST.TIMER_ID( 1 ),
TIME,
SPTEST.DELAYED_SUBPROGRAM'ACCESS,
RTEMS.NULL_ADDRESS,
STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INVALID_CLOCK,
"TIMER_SERVER_FIRE_WHEN WITH ILLEGAL TIME"
);
TEST_SUPPORT.PRINT_TIME(
"TA1 - timer_server_fire_when - ",
TIME,
" - INVALID_CLOCK"
);
TEXT_IO.NEW_LINE;
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "clock_set" );
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
TEXT_IO.NEW_LINE;
TIME := ( 1990, 2, 5, 8, 30, 45, 0 );
RTEMS.TIMER_SERVER_FIRE_WHEN(
SPTEST.TIMER_ID( 1 ),
TIME,
SPTEST.DELAYED_SUBPROGRAM'ACCESS,
RTEMS.NULL_ADDRESS,
STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.INVALID_CLOCK,
"TIMER_SERVER_FIRE_WHEN BEFORE CURRENT TIME"
);
TEST_SUPPORT.PRINT_TIME(
"TA1 - timer_server_fire_when - ",
TIME,
" - before INVALID_CLOCK"
);
TEXT_IO.NEW_LINE;
end SCREEN_14;
--PAGE

View File

@@ -52,10 +52,16 @@ TA1 - buffer received: BUFFER 3 TO Q 2
TA1 - message_queue_delete - delete queue 1
TA1 - message_queue_urgent - BUFFER 3 TO Q 2
TA1 - message_queue_delete - delete queue 2
TA1 - message_queue_get_number_pending - check Q 3
TA1 - 0 messages are pending on Q 3
TA1 - message_queue_flush - empty Q 3
TA1 - 0 messages were flushed from Q 3
TA1 - message_queue_send - BUFFER 1 TO Q 3
TA1 - message_queue_send - BUFFER 2 TO Q 3
TA1 - message_queue_broadcast - NO BUFFER TO Q1
TA1 - number of tasks awakened = 0
TA1 - message_queue_get_number_pending - check Q 3
TA1 - 2 messages are pending on Q 3
TA1 - message_queue_send - BUFFER 3 TO Q 3
TA1 - message_queue_flush - Q 3
TA1 - 3 messages were flushed from Q 3
@@ -63,4 +69,10 @@ TA1 - message_queue_send - until all message buffers consumed
TA1 - message_queue_send - all message buffers consumed
TA1 - message_queue_flush - Q 3
TA1 - 100 messages were flushed from Q 3
<pause>
TA1 - create message queue of 20 bytes on queue 1
TA1 - message_queue_delete - delete queue 1
<pause>
TA1 - message_queue_create - variable sizes
TA1 - message_queue_create and send - variable sizes
*** END OF TEST 13 ***

View File

@@ -25,9 +25,13 @@ with RTEMS;
with TEST_SUPPORT;
with TEXT_IO;
with UNSIGNED32_IO;
use type RTEMS.STATUS_CODES;
package body SPTEST is
type BIG_BUFFER_TYPE is array (1 .. 2048) of RTEMS.UNSIGNED8;
--PAGE
--
-- INIT
@@ -216,16 +220,19 @@ package body SPTEST is
procedure TASK_1 (
ARGUMENT : in RTEMS.TASK_ARGUMENT
) is
QID : RTEMS.ID;
BUFFER : SPTEST.BUFFER;
BUFFER_POINTER : RTEMS.ADDRESS;
COUNT : RTEMS.UNSIGNED32;
MESSAGE_SIZE : RTEMS.UNSIGNED32;
STATUS : RTEMS.STATUS_CODES;
QID : RTEMS.ID;
BIG_SEND_BUFFER : BIG_BUFFER_TYPE;
BIG_SEND_BUFFER_POINTER : RTEMS.ADDRESS := BIG_SEND_BUFFER'ADDRESS;
BIG_RECEIVE_BUFFER : BIG_BUFFER_TYPE;
BIG_RECEIVE_BUFFER_POINTER : RTEMS.ADDRESS := BIG_RECEIVE_BUFFER'ADDRESS;
BUFFER : SPTEST.BUFFER;
BUFFER_POINTER : RTEMS.ADDRESS := BUFFER'ADDRESS;
COUNT : RTEMS.UNSIGNED32;
MESSAGE_SIZE : RTEMS.UNSIGNED32;
STATUS : RTEMS.STATUS_CODES;
SIZE : RTEMS.UNSIGNED32;
begin
BUFFER_POINTER := BUFFER'ADDRESS;
RTEMS.MESSAGE_QUEUE_IDENT(
SPTEST.QUEUE_NAME( 1 ),
RTEMS.SEARCH_ALL_NODES,
@@ -431,6 +438,17 @@ TEST_SUPPORT.PAUSE;
RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 2 ), STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
TEXT_IO.PUT_LINE( "TA1 - message_queue_get_number_pending - check Q 3" );
RTEMS.MESSAGE_QUEUE_GET_NUMBER_PENDING(
SPTEST.QUEUE_ID( 3 ), COUNT, STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "MESSAGE_QUEUE_GET_NUMBER_PENDING"
);
TEXT_IO.PUT( "TA1 - " );
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
TEXT_IO.PUT_LINE( " messages are pending on Q 3" );
TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - empty Q 3" );
RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
@@ -458,6 +476,31 @@ TEST_SUPPORT.PAUSE;
);
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
-- this broadcast should have no effect on the queue
SPTEST.FIlL_BUFFER( "NO BUFFER TO Q1 ", BUFFER );
TEXT_IO.PUT_LINE( "TA1 - message_queue_broadcast - NO BUFFER TO Q1" );
RTEMS.MESSAGE_QUEUE_BROADCAST(
SPTEST.QUEUE_ID( 1 ),
BUFFER_POINTER,
16,
COUNT,
STATUS
);
TEXT_IO.PUT( "TA1 - number of tasks awakened = " );
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
TEXT_IO.NEW_LINE;
TEXT_IO.PUT_LINE( "TA1 - message_queue_get_number_pending - check Q 3" );
RTEMS.MESSAGE_QUEUE_GET_NUMBER_PENDING(
SPTEST.QUEUE_ID( 3 ), COUNT, STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "MESSAGE_QUEUE_GET_NUMBER_PENDING"
);
TEXT_IO.PUT( "TA1 - " );
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
TEXT_IO.PUT_LINE( " messages are pending on Q 3" );
SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
RTEMS.MESSAGE_QUEUE_SEND(
@@ -503,7 +546,137 @@ TEST_SUPPORT.PAUSE;
TEXT_IO.PUT( "TA1 - " );
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
TEST_SUPPORT.PAUSE;
TEXT_IO.PUT_LINE( "TA1 - create message queue of 20 bytes on queue 1" );
RTEMS.MESSAGE_QUEUE_CREATE(
SPTEST.QUEUE_NAME( 1 ),
100,
20,
RTEMS.DEFAULT_ATTRIBUTES,
SPTEST.QUEUE_ID( 1 ),
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "MESSAGE_QUEUE_CREATE of Q1; 20 bytes each"
);
RTEMS.MESSAGE_QUEUE_SEND(
SPTEST.QUEUE_ID( 1 ), BIG_SEND_BUFFER_POINTER, 40, STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS, RTEMS.INVALID_SIZE, "expected INVALID_SIZE"
);
TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 1" );
RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
TEST_SUPPORT.PAUSE;
TEXT_IO.PUT_LINE( "TA1 - message_queue_create - variable sizes " );
for QUEUE_SIZE in 1 .. 1029 loop
RTEMS.MESSAGE_QUEUE_CREATE(
SPTEST.QUEUE_NAME( 1 ),
2, -- just 2 msgs each
RTEMS.UNSIGNED32( QUEUE_SIZE ),
RTEMS.DEFAULT_ATTRIBUTES,
QUEUE_ID( 1 ),
STATUS
);
if STATUS /= RTEMS.SUCCESSFUL then
TEXT_IO.PUT( "TA1 - msq que size: " );
UNSIGNED32_IO.PUT(
RTEMS.UNSIGNED32( QUEUE_SIZE ), WIDTH => 3, BASE => 10
);
TEXT_IO.NEW_LINE;
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "message_queue_create of Q1"
);
end if;
RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "message_queue_delete" );
end loop;
TEXT_IO.PUT_LINE(
"TA1 - message_queue_create and send - variable sizes "
);
for QUEUE_SIZE in 1 .. 1029 loop
RTEMS.MESSAGE_QUEUE_CREATE(
SPTEST.QUEUE_NAME( 1 ),
2, -- just 2 msgs each
RTEMS.UNSIGNED32( QUEUE_SIZE ),
RTEMS.DEFAULT_ATTRIBUTES,
SPTEST.QUEUE_ID( 1 ),
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED( status, "message_queue_create of Q1" );
BIG_SEND_BUFFER := (others => CHARACTER'POS( 'A' ));
BIG_RECEIVE_BUFFER := (others => CHARACTER'POS( 'Z' ));
-- send a msg too big
RTEMS.MESSAGE_QUEUE_SEND(
SPTEST.QUEUE_ID( 1 ),
BIG_SEND_BUFFER_POINTER,
RTEMS.UNSIGNED32( QUEUE_SIZE + 1 ),
STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS, RTEMS.INVALID_SIZE, "message_queue_send too large"
);
-- send a msg that is just right
RTEMS.MESSAGE_QUEUE_SEND(
SPTEST.QUEUE_ID( 1 ),
BIG_SEND_BUFFER_POINTER,
RTEMS.UNSIGNED32( QUEUE_SIZE ),
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "message_queue_send exact size"
);
-- now read and verify the message just sent
RTEMS.MESSAGE_QUEUE_RECEIVE(
SPTEST.QUEUE_ID( 1 ),
BIG_RECEIVE_BUFFER_POINTER,
RTEMS.DEFAULT_OPTIONS,
1 * TEST_SUPPORT.TICKS_PER_SECOND,
SIZE,
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "message_queue_receive exact size"
);
if SIZE /= RTEMS.UNSIGNED32( QUEUE_SIZE ) then
TEXT_IO.PUT(
"TA1 - exact size size match failed for queue_size = "
);
UNSIGNED32_IO.PUT(
RTEMS.UNSIGNED32( QUEUE_SIZE ), WIDTH => 3, BASE => 10
);
TEXT_IO.NEW_LINE;
end if;
if (BIG_SEND_BUFFER( BIG_SEND_BUFFER'FIRST .. Integer( SIZE )) /=
BIG_RECEIVE_BUFFER( BIG_RECEIVE_BUFFER'FIRST .. Integer( SIZE ))) then
TEXT_IO.PUT_LINE("TA1 - exact size data match failed");
end if;
for I in Integer( SIZE + 1 ) .. BIG_RECEIVE_BUFFER'LAST loop
if BIG_RECEIVE_BUFFER( I ) /= CHARACTER'POS( 'Z' ) then
TEXT_IO.PUT_LINE("TA1 - exact size overrun match failed");
end if;
end loop;
-- all done with this one; delete it
RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "message_queue_delete" );
end loop;
TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
RTEMS.SHUTDOWN_EXECUTIVE( 0 );

View File

@@ -1,48 +1,58 @@
*** TEST 16 ***
TA1 - region_ident - rnid => 16#32010001#
TA1 - region_get_segment - wait on 100 byte segment from region 2
TA1 - got segment from region 2 - 16#30#
TA1 - got segment from region 2 - 16#70#
TA1 - region_get_segment - wait on 3K segment from region 3
TA1 - got segment from region 3 - 16#30#
TA1 - got segment from region 3 - 16#70#
TA1 - region_get_segment - get 3080 byte segment from region 1 - NO_WAIT
TA1 - got segment from region 1 - 16#20#
TA1 - got segment from region 1 - 16#60#
TA1 - task_wake_after - yield processor
TA2 - region_get_segment - wait on 2K segment from region 1
TA3 - region_get_segment - wait on 3950 byte segment from region 2
<pause>
TA1 - region_return_segment - return segment to region 1 - 16#20#
TA1 - region_return_segment - return segment to region 1 - 16#60#
TA1 - region_get_segment - wait 10 seconds for 3K segment from region 1
TA2 - got segment from region 1 - 16#20#
TA2 - region_return_segment - return segment to region 1 - 16#20#
TA2 - got segment from region 1 - 16#60#
TA2 - region_return_segment - return segment to region 1 - 16#60#
TA2 - task_set_priority - make self highest priority task
TA2 - region_get_segment - wait on 3950 byte segment from region 2
TA1 - got segment from region 1 - 16#20#
TA1 - region_return_segment - return segment to region 2 - 16#30#
TA2 - got segment from region 2 - 16#30#
TA2 - region_return_segment - return segment to region 2 - 16#30#
TA1 - got segment from region 1 - 16#60#
TA1 - region_return_segment - return segment to region 2 - 16#70#
TA2 - got segment from region 2 - 16#70#
TA2 - region_return_segment - return segment to region 2 - 16#70#
TA2 - task_delete - delete self
TA1 - task_wake_after - yield processor
TA3 - got segment from region 2 - 16#30#
TA3 - got segment from region 2 - 16#70#
TA3 - region_get_segment - wait on 2K segment from region 3
TA1 - task_delete - delete TA3
<pause>
TA1 - task_wake_after - yield processor
TA4 - region_get_segment - wait on 1.5K segment from region 1
TA5 - region_get_segment - wait on 1.5K segment from region 1
TA1 - region_return_segment - return segment to region 1 - 16#20#
TA1 - region_return_segment - return segment to region 1 - 16#60#
TA1 - task_wake_after - yield processor
TA4 - got and returned 16#20#
TA5 - got and returned 16#6A0#
TA4 - got and returned 16#60#
TA5 - got and returned 16#6E0#
TA1 - region_get_segment - wait 10 seconds for 3K segment from region 1
TA1 - got segment from region 1 - 16#20#
TA1 - task_wake_after - sleep 1 second
TA1 - got segment from region 1 - 16#60#
TA1 - task_wake_after - yield processor
TA5 - region_get_segment - wait on 3K segment from region 1
TA4 - region_get_segment - wait on 3K segment from region 1
TA1 - task_delete - delete TA4
TA1 - region_return_segment - return segment to region 1 - 16#20#
TA1 - region_return_segment - return segment to region 1 - 16#60#
TA1 - task_wake_after - yield processor
TA5 - got segment from region 1 - 16#20#
TA5 - region_return_segment - return segment to region 1 - 16#20#
TA5 - got segment from region 1 - 16#60#
TA5 - region_return_segment - return segment to region 1 - 16#60#
TA5 - task_delete - delete self
TA1 - region_delete - delete region 1
TA1 - region_get_segment - get 3K segment from region 4
TA1 - got segment from region 4 - 16#70#
TA1 - region_get_segment - attempt to get 3K segment from region 4
TA1 - task_get_note - UNSATISFIED
TA1 - region_extend - extend region 4 by 4K
TA1 - region_get_segment - attempt to get 3K segment from region 4
TA1 - got 3K segment from region 4 - 16#CF0#
TA1 - return_segment - return segment to region 4 - 16#70#
TA1 - region_return_segment - return segment to region 4 - 16#CF0#
TA1 - region_delete - delete region 4
*** END OF TEST 16 ***

View File

@@ -106,8 +106,9 @@ package body SPTEST is
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
SPTEST.REGION_NAME( 2 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
SPTEST.REGION_NAME( 3 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
SPTEST.REGION_NAME( 2 ) := RTEMS.BUILD_NAME( 'R', 'N', '2', ' ' );
SPTEST.REGION_NAME( 3 ) := RTEMS.BUILD_NAME( 'R', 'N', '3', ' ' );
SPTEST.REGION_NAME( 4 ) := RTEMS.BUILD_NAME( 'R', 'N', '4', ' ' );
RTEMS.REGION_CREATE(
SPTEST.REGION_NAME( 1 ),
@@ -142,7 +143,17 @@ package body SPTEST is
);
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN3" );
RTEMS.REGION_CREATE(
SPTEST.REGION_NAME( 4 ),
SPTEST.AREA_4'ADDRESS,
4096,
128,
RTEMS.DEFAULT_ATTRIBUTES,
SPTEST.REGION_ID( 4 ),
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN4" );
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
@@ -203,6 +214,24 @@ package body SPTEST is
end PUT_ADDRESS_FROM_AREA_3;
--PAGE
--
-- PUT_ADDRESS_FROM_AREA_4
--
procedure PUT_ADDRESS_FROM_AREA_4 (
TO_BE_PRINTED : in RTEMS.ADDRESS
) is
begin
UNSIGNED32_IO.PUT(
RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_4'ADDRESS ),
WIDTH => 8,
BASE => 16
);
end PUT_ADDRESS_FROM_AREA_4;
--PAGE
--
-- TASK_1
@@ -398,7 +427,7 @@ TEST_SUPPORT.PAUSE;
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
TEXT_IO.NEW_LINE;
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 1 second" );
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
@@ -425,6 +454,85 @@ TEST_SUPPORT.PAUSE;
TEXT_IO.PUT_LINE( "TA1 - region_delete - delete region 1" );
RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_DELETE OF RN1" );
--XXX
TEXT_IO.PUT_LINE(
"TA1 - region_get_segment - get 3K segment from region 4"
);
RTEMS.REGION_GET_SEGMENT(
SPTEST.REGION_ID( 4 ),
3072,
RTEMS.DEFAULT_OPTIONS,
RTEMS.NO_TIMEOUT,
segment_address_1,
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "region_get_segment" );
TEXT_IO.PUT( "TA1 - got segment from region 4 - " );
PUT_ADDRESS_FROM_AREA_4( segment_address_1 );
TEXT_IO.NEW_LINE;
TEXT_IO.PUT_LINE(
"TA1 - region_get_segment - attempt to get 3K segment from region 4"
);
RTEMS.REGION_GET_SEGMENT(
SPTEST.REGION_ID( 4 ),
3072,
RTEMS.NO_WAIT,
RTEMS.NO_TIMEOUT,
SEGMENT_ADDRESS_2,
STATUS
);
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
STATUS,
RTEMS.UNSATISFIED,
"task_get_segment with no memory left"
);
TEXT_IO.PUT_LINE( "TA1 - task_get_note - UNSATISFIED" );
TEXT_IO.PUT_LINE( "TA1 - region_extend - extend region 4 by 4K" );
RTEMS.REGION_EXTEND(
SPTEST.REGION_ID( 4 ),
SPTEST.AREA_4( 4096 )'ADDRESS,
4096,
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED( status, "region_extend" );
TEXT_IO.PUT_LINE(
"TA1 - region_get_segment - attempt to get 3K segment from region 4"
);
RTEMS.REGION_GET_SEGMENT(
SPTEST.REGION_ID( 4 ),
3072,
RTEMS.NO_WAIT,
RTEMS.NO_TIMEOUT,
segment_address_3,
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED( status, "region_get_segment" );
TEXT_IO.PUT( "TA1 - got 3K segment from region 4 - " );
PUT_ADDRESS_FROM_AREA_4( segment_address_3 );
TEXT_IO.NEW_LINE;
TEXT_IO.PUT(
"TA1 - return_segment - return segment to region 4 - "
);
PUT_ADDRESS_FROM_AREA_4( segment_address_1 );
RTEMS.REGION_RETURN_SEGMENT( SPTEST.REGION_ID( 4 ), segment_address_1, STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( status, "region_return_segment" );
TEXT_IO.NEW_LINE;
TEXT_IO.PUT(
"TA1 - region_return_segment - return segment to region 4 - "
);
PUT_ADDRESS_FROM_AREA_4( segment_address_3 );
RTEMS.REGION_RETURN_SEGMENT( SPTEST.REGION_ID( 4 ), segment_address_3, STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( status, "region_return_segment" );
TEXT_IO.NEW_LINE;
TEXT_IO.PUT_LINE( "TA1 - region_delete - delete region 4" );
RTEMS.REGION_DELETE( SPTEST.REGION_ID( 4 ), STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED( status, "region_delete" );
TEXT_IO.PUT_LINE( "*** END OF TEST 16 ***" );
RTEMS.SHUTDOWN_EXECUTIVE( 0 );

View File

@@ -37,8 +37,8 @@ package SPTEST is
-- by this test.
--
REGION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
REGION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
--
-- The following constant defines the priority of most of the
@@ -62,6 +62,9 @@ package SPTEST is
AREA_3 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
for AREA_3'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
AREA_4 : array ( RTEMS.UNSIGNED32 range 0 .. 8191 ) of RTEMS.UNSIGNED8;
for AREA_4'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
--
-- INIT
--

View File

@@ -14,11 +14,24 @@ TA4 - (16#42010004#) period 2
TA5 - rate_monotonic_create id = 16#42010005#
TA5 - rate_monotonic_ident id = 16#42010005#
TA5 - (16#42010005#) period 100
TA6 - rate_monotonic_create id = 16#42010006#
TA6 - rate_monotonic_ident id = 16#42010006#
TA6 - (16#42010006#) period 0
TA5 - PERIODS CHECK OK (1)
TA5 - PERIODS CHECK OK (2)
TA5 - PERIODS CHECK OK (3)
TA5 - PERIODS CHECK OK (4)
TA5 - PERIODS CHECK OK (5)
TA6 - Actual: 10 Expected: 10 - OK
TA6 - Actual: 20 Expected: 20 - OK
TA6 - Actual: 30 Expected: 30 - OK
TA6 - Actual: 40 Expected: 40 - OK
TA6 - Actual: 50 Expected: 50 - OK
TA6 - Actual: 60 Expected: 60 - OK
TA6 - Actual: 70 Expected: 70 - OK
TA6 - Actual: 80 Expected: 80 - OK
TA6 - Actual: 90 Expected: 90 - OK
TA6 - Actual: 100 Expected: 100 - OK
TA5 - PERIODS CHECK OK (6)
TA5 - PERIODS CHECK OK (7)
TA5 - PERIODS CHECK OK (8)

View File

@@ -47,8 +47,9 @@ package body SPTEST is
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' );
SPTEST.TASK_NAME( 6 ) := RTEMS.BUILD_NAME( 'T', 'A', '6', ' ' );
for INDEX in 1 .. 5
for INDEX in 1 .. 6
loop
SPTEST.COUNT( INDEX ) := 0;
@@ -66,12 +67,12 @@ package body SPTEST is
end loop;
for INDEX in 1 .. 5
for INDEX in 1 .. 6
loop
RTEMS.TASK_START(
SPTEST.TASK_ID( INDEX ),
SPTEST.TASK_1_THROUGH_5'ACCESS,
SPTEST.TASK_1_THROUGH_6'ACCESS,
RTEMS.TASK_ARGUMENT( INDEX ),
STATUS
);
@@ -86,10 +87,10 @@ package body SPTEST is
--PAGE
--
-- TASK_1_THROUGH_5
-- TASK_1_THROUGH_6
--
procedure TASK_1_THROUGH_5 (
procedure TASK_1_THROUGH_6 (
ARGUMENT : in RTEMS.TASK_ARGUMENT
) is
RMID : RTEMS.ID;
@@ -97,6 +98,9 @@ package body SPTEST is
PASS : RTEMS.UNSIGNED32;
FAILED : RTEMS.UNSIGNED32;
STATUS : RTEMS.STATUS_CODES;
TIME : array( 0 .. 10 ) of RTEMS.INTERVAL;
PERIOD : RTEMS.INTERVAL;
MEASURE : RTEMS.INTERVAL;
begin
RTEMS.RATE_MONOTONIC_CREATE( ARGUMENT, RMID, STATUS );
@@ -183,8 +187,7 @@ package body SPTEST is
SPTEST.GET_ALL_COUNTERS;
for INDEX in 1 .. 4
loop
for INDEX in 1 .. 4 loop
if SPTEST.TEMPORARY_COUNT( INDEX ) /=
SPTEST.ITERATIONS( INDEX ) then
@@ -230,12 +233,51 @@ package body SPTEST is
end loop;
when 6 =>
-- test changing periods
for INDEX in 0 .. 10 loop
PERIOD := RTEMS.INTERVAL( ( INDEX + 1 ) * 10 );
RTEMS.RATE_MONOTONIC_PERIOD( RMID, PERIOD, STATUS);
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "rate_monotonic_period of TA6"
);
-- timestamp
RTEMS.CLOCK_GET(
RTEMS.CLOCK_GET_TICKS_SINCE_BOOT,
Time( INDEX )'ADDRESS,
STATUS
);
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "clock_get of TA6"
);
end loop;
for INDEX in 1 .. 10 loop
MEASURE := TIME( INDEX ) - TIME( INDEX - 1 );
PERIOD := RTEMS.INTERVAL( INDEX * 10 );
TEXT_IO.PUT( "TA6 - Actual: " );
UNSIGNED32_IO.PUT( MEASURE, WIDTH => 3, BASE => 10 );
TEXT_IO.PUT( " Expected: " );
UNSIGNED32_IO.PUT( PERIOD, WIDTH => 3, BASE => 10 );
if PERIOD = MEASURE then
TEXT_IO.PUT_LINE( " - OK" );
else
TEXT_IO.PUT_LINE( " - FAILED" );
end if;
end loop;
RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
TEST_SUPPORT.DIRECTIVE_FAILED(
STATUS, "task_suspend of TA6"
);
when others =>
NULL;
end case;
end TASK_1_THROUGH_5;
end TASK_1_THROUGH_6;
--PAGE
--

View File

@@ -29,30 +29,30 @@ package SPTEST is
-- by this test.
--
TASK_ID : array ( 1 .. 5 ) of RTEMS.ID;
TASK_NAME : array ( 1 .. 5 ) of RTEMS.NAME;
TASK_ID : array ( 1 .. 6 ) of RTEMS.ID;
TASK_NAME : array ( 1 .. 6 ) of RTEMS.NAME;
--
-- These arrays contain the parameters which define the execution
-- characteristics and periods of each instantiation of the
-- copies of the RTEMS task TASKS_1_THROUGH_5.
-- copies of the RTEMS task TASKS_1_THROUGH_6.
--
PERIODS : constant array ( 1 .. 5 )
of RTEMS.UNSIGNED32 := ( 2, 2, 2, 2, 100 );
PERIODS : constant array ( 1 .. 6 )
of RTEMS.UNSIGNED32 := ( 2, 2, 2, 2, 100, 0 );
ITERATIONS : constant array ( 1 .. 5 )
of RTEMS.UNSIGNED32 := ( 50, 50, 50, 50, 1 );
ITERATIONS : constant array ( 1 .. 6 )
of RTEMS.UNSIGNED32 := ( 50, 50, 50, 50, 1, 10 );
PRIORITIES : constant array ( 1 .. 5 )
of RTEMS.UNSIGNED32 := ( 1, 1, 3, 4, 5 );
PRIORITIES : constant array ( 1 .. 6 )
of RTEMS.UNSIGNED32 := ( 1, 1, 3, 4, 5, 1 );
--
-- The following type defines the array used to manage the
-- execution counts of each task's period.
--
type COUNT_ARRAY is array ( 1 .. 5 ) of RTEMS.UNSIGNED32;
type COUNT_ARRAY is array ( 1 .. 6 ) of RTEMS.UNSIGNED32;
--
-- These arrays contains the number of periods successfully completed
@@ -79,14 +79,14 @@ package SPTEST is
);
--
-- TASK_1_THROUGH_5
-- TASK_1_THROUGH_6
--
-- DESCRIPTION:
--
-- These RTEMS tasks test the Rate Monotonic Manager.
--
procedure TASK_1_THROUGH_5 (
procedure TASK_1_THROUGH_6 (
ARGUMENT : in RTEMS.TASK_ARGUMENT
);