summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-06-24 14:00:08 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-07-01 08:24:31 +0200
commitfdb45d6b26b6e31ab168f817d25a847f1847d4a1 (patch)
treedab5ed17112f010299fe6e000cbf42263fd84315 /testsuites
parentdoc: Fix interrupt level ARM documentation (diff)
downloadrtems-fdb45d6b26b6e31ab168f817d25a847f1847d4a1.tar.bz2
score: Freechain handler API changes
Replace the extend function with an allocator since this fits better to the current use case.
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/sptests/spfreechain01/init.c161
-rw-r--r--testsuites/sptests/spfreechain01/spfreechain01.scn10
2 files changed, 19 insertions, 152 deletions
diff --git a/testsuites/sptests/spfreechain01/init.c b/testsuites/sptests/spfreechain01/init.c
index 8f5e10f28d..8963752d00 100644
--- a/testsuites/sptests/spfreechain01/init.c
+++ b/testsuites/sptests/spfreechain01/init.c
@@ -13,171 +13,43 @@
#include <tmacros.h>
#include <rtems/score/chainimpl.h>
#include <rtems/score/freechain.h>
-#include <rtems/score/wkspace.h>
-#include <rtems/malloc.h>
const char rtems_test_name[] = "SPFREECHAIN 1";
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
-bool my_freechain_extend_with_nothing( Freechain_Control *freechain );
-bool my_freechain_extend_heap( Freechain_Control *freechain );
-bool my_freechain_extend_workspace( Freechain_Control *freechain );
-void my_freechain_init_heap( Freechain_Control *freechain );
-void my_freechain_init_workspace( Freechain_Control *freechain );
-
-typedef struct {
- Freechain_Control super_fc;
- size_t bump_count;
-} MyFreechain;
-
typedef struct {
- Chain_Node ch_node;
+ Chain_Node Node;
int x;
} test_node;
-bool my_freechain_extend_with_nothing( Freechain_Control *freechain )
-{
- return NULL;
-}
-
-/* user defined extend handle, it allocates memory on heap. */
-bool my_freechain_extend_heap( Freechain_Control *freechain )
+static rtems_task Init(rtems_task_argument ignored)
{
- MyFreechain *self = (MyFreechain *)freechain;
- size_t node_size = sizeof(test_node);
- size_t size = self->bump_count * node_size;
- int i;
- test_node *nodes = malloc(size);
-
- if (!nodes) {
- printf( "INIT - Unable to allocate free chain of size: %zd\n", size );
- return NULL;
- }
-
- puts( "INIT - Allocate node from heap in user defined freechain extend"
- " - OK" );
- for ( i = 0; i < self->bump_count; i++ ) {
- _Freechain_Put(freechain,
- nodes + i);
- }
- return true;
-}
+ Freechain_Control fc;
+ test_node *node;
-/* user defined extend handle, it allocates memory on workspace. */
-bool my_freechain_extend_workspace( Freechain_Control *freechain )
-{
- MyFreechain *self = (MyFreechain *)freechain;
- size_t node_size = sizeof(test_node);
- size_t size = self->bump_count * node_size;
- int i;
- test_node *nodes = _Workspace_Allocate(size);
-
- if (!nodes) {
- printf( "INIT - Unable to allocate free chain of size: %zd\n", size );
- return NULL;
- }
-
- puts( "INIT - Allocate node from workspace in user defined freechain extend"
- " - OK" );
-
- for ( i = 0; i < self->bump_count; i++ ) {
- _Freechain_Put(freechain,
- nodes + i);
- }
- return true;
-}
+ TEST_BEGIN();
-void my_freechain_init_heap( Freechain_Control *freechain )
-{
- MyFreechain *self = (MyFreechain *)freechain;
- self->bump_count = 5;
- size_t size = self->bump_count * sizeof(test_node);
- test_node *nodes = malloc(size);
-
- _Chain_Initialize(
- &freechain->Freechain,
- nodes,
- self->bump_count,
- sizeof(test_node)
- );
-}
+ _Freechain_Initialize(&fc, NULL, 0, sizeof(test_node));
+ rtems_test_assert(_Chain_Is_empty(&fc.Free));
-void my_freechain_init_workspace( Freechain_Control *freechain )
-{
- MyFreechain *self = (MyFreechain *)freechain;
- self->bump_count = 7;
- size_t size = self->bump_count * sizeof(test_node);
- test_node *nodes = _Workspace_Allocate(size);
-
- _Chain_Initialize(
- &freechain->Freechain,
- nodes,
- self->bump_count,
- sizeof(test_node)
- );
-}
+ _Freechain_Initialize(&fc, malloc, 1, SIZE_MAX);
+ rtems_test_assert(_Chain_Is_empty(&fc.Free));
-rtems_task Init(
- rtems_task_argument ignored
- )
-{
- TEST_BEGIN();
+ rtems_test_assert(_Freechain_Get(&fc, NULL, 0, sizeof(test_node)) == NULL);
- test_node *test_node_p;
- MyFreechain myfc;
- Freechain_Control *fc_p = (Freechain_Control *)&myfc;
- int i;
+ rtems_test_assert(_Freechain_Get(&fc, malloc, 1, SIZE_MAX) == NULL);
/* check whether freechain put and get works correctly*/
- _Freechain_Initialize(fc_p,
- &my_freechain_extend_with_nothing);
- my_freechain_init_heap(fc_p);
puts( "INIT - Get node from freechain - OK" );
- test_node_p = (test_node *)_Freechain_Get(fc_p);
- test_node_p->x = 1;
+ node = _Freechain_Get(&fc, malloc, 1, sizeof(test_node));
+ node->x = 1;
puts( "INIT - Put node back to freechain - OK" );
- _Freechain_Put(fc_p, (void *)test_node_p);
+ _Freechain_Put(&fc, node);
puts( "INIT - Verify freechain node put and get - OK" );
- test_node_p = (test_node *)_Freechain_Get(fc_p);
- if(test_node_p->x != 1) {
- puts( "INIT - ERROR ON FREECHAIN GET AND PUT" );
- rtems_test_exit(0);
- }
-
- /* check whether freechain extend handle on heap works correctly */
- _Freechain_Initialize(fc_p,
- &my_freechain_extend_heap);
- my_freechain_init_heap(fc_p);
-
- puts( "INIT - Get more than intialized nodes from freechain on heap - OK" );
-
- for ( i = 0; i < myfc.bump_count * 2; i++ ) {
- test_node_p = (test_node *)_Freechain_Get(fc_p);
- if (!test_node_p) {
- puts( "INIT - Get node from freechain failed - FAILED" );
- rtems_test_exit(0);
- }
- }
-
- /* check whether freechain extend handle in workspace works correctly */
- _Freechain_Initialize(fc_p,
- &my_freechain_extend_workspace);
- my_freechain_init_workspace(fc_p);
-
- puts( "INIT - Get more than intialized nodes from freechain in workspace"
- " - OK" );
-
- for ( i = 0; i < myfc.bump_count * 2; i++ ) {
- test_node_p = (test_node *)_Freechain_Get(fc_p);
- if (!test_node_p) {
- puts( "INIT - Get node from freechain failed - FAILED" );
- rtems_test_exit(0);
- }
- }
+ node = _Freechain_Get(&fc, NULL, 0, sizeof(test_node));
+ rtems_test_assert(node->x == 1);
TEST_END();
rtems_test_exit(0);
@@ -188,7 +60,6 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
-#define CONFIGURE_MEMORY_OVERHEAD sizeof(test_node)
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/sptests/spfreechain01/spfreechain01.scn b/testsuites/sptests/spfreechain01/spfreechain01.scn
index e65e90a6e3..d6e82c8d5c 100644
--- a/testsuites/sptests/spfreechain01/spfreechain01.scn
+++ b/testsuites/sptests/spfreechain01/spfreechain01.scn
@@ -1,9 +1,5 @@
-*** START OF RTEMS FREECHAIN API TEST ***
+*** BEGIN OF TEST SPFREECHAIN 1 ***
INIT - Get node from freechain - OK
-INIT - Put node to freechain - OK
+INIT - Put node back to freechain - OK
INIT - Verify freechain node put and get - OK
-INIT - Get more than intialized nodes from freechain on heap - OK
-INIT - Allocate node from heap in user defined freechain extend - OK
-INIT - Get more than intialized nodes from freechain in workspace - OK
-INIT - Allocate node from workspace in user defined freechain extend - OK
-*** END OF RTEMS FREECHAIN API TEST *** \ No newline at end of file
+*** END OF TEST SPFREECHAIN 1 ***