Guarded pools tested.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9137 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
Giovanni Di Sirio 2016-03-19 10:47:17 +00:00
parent b3fe630e4b
commit d29098e7f6
17 changed files with 376 additions and 94 deletions

View File

@ -120,9 +120,7 @@ typedef struct {
*/
#define _GUARDEDMEMORYPOOL_DATA(name, size) { \
_SEMAPHORE_DATA(name.sem, (cnt_t)0), \
NULL, \
size, \
NULL \
_MEMORYPOOL_DATA(NULL, size, NULL) \
}
/**
@ -134,7 +132,7 @@ typedef struct {
* @param[in] size size of the memory pool contained objects
*/
#define GUARDEDMEMORYPOOL_DECL(name, size) \
memory_pool_t name = _MEMORYPOOL_DATA(name, size)
guarded_memory_pool_t name = _GUARDEDMEMORYPOOL_DATA(name, size)
#endif /* CH_CFG_USE_SEMAPHORES == TRUE */
/*===========================================================================*/

View File

@ -265,7 +265,7 @@ typedef struct {
#endif
/* End of the mandatory fields.*/
/**
* @brief Total transmit transfer size.
* @brief Total receive transfer size.
*/
size_t totsize;
} USBOutEndpointState;

View File

@ -1,5 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<SPC5-Patch version="1.0.0">
<!--It is your patch repository, do not break your XML File.-->
<files />
<files>
<file componentId="org.chibios.spc5.components.chibios_unitary_tests_engine" version="1.0.0.qualifier" path="component/lib/include/ch_test.h" user="false">
<diff><![CDATA[--- components/chibios_unit_tests_engine_component/lib/include/ch_test.h
+++ components/chibios_unit_tests_engine_component/lib/include/ch_test.h
@@ -1,5 +1,5 @@
/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.]]></diff>
</file>
<file componentId="org.chibios.spc5.components.chibios_unitary_tests_engine" version="1.0.0.qualifier" path="component/lib/src/ch_test.c" user="false">
<diff><![CDATA[--- components/chibios_unit_tests_engine_component/lib/src/ch_test.c
+++ components/chibios_unit_tests_engine_component/lib/src/ch_test.c
@@ -1,5 +1,5 @@
/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.]]></diff>
</file>
</files>
</SPC5-Patch>

View File

@ -931,6 +931,7 @@ test_assert(msg1 == MSG_TIMEOUT, "wrong wake-up message");]]></value>
static uint32_t objects[MEMORY_POOL_SIZE];
static MEMORYPOOL_DECL(mp1, sizeof (uint32_t), NULL);
static GUARDEDMEMORYPOOL_DECL(gmp1, sizeof (uint32_t));
static void *null_provider(size_t size, unsigned align) {
@ -943,7 +944,7 @@ static void *null_provider(size_t size, unsigned align) {
<cases>
<case>
<brief>
<value>Loading and empting the memory pool.</value>
<value>Loading and empting a memory pool.</value>
</brief>
<description>
<value>The memory pool functionality is tested by loading and empting it, all conditions are tested.</value>
@ -1046,6 +1047,134 @@ test_assert(chPoolAlloc(&mp1) == NULL, "provider returned memory");]]></value>
</step>
</steps>
</case>
<case>
<brief>
<value>Loading and empting a guarded memory pool without waiting.</value>
</brief>
<description>
<value>The memory pool functionality is tested by loading and empting it, all conditions are tested.</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[chGuardedPoolObjectInit(&gmp1, sizeof (uint32_t));]]></value>
</setup_code>
<teardown_code>
<value />
</teardown_code>
<local_variables>
<value><![CDATA[unsigned i;]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Adding the objects to the pool using chGuardedPoolLoadArray().</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[chGuardedPoolLoadArray(&gmp1, objects, MEMORY_POOL_SIZE);]]></value>
</code>
</step>
<step>
<description>
<value>Emptying the pool using chGuardedPoolAllocTimeout().</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[for (i = 0; i < MEMORY_POOL_SIZE; i++)
test_assert(chGuardedPoolAllocTimeout(&gmp1, TIME_IMMEDIATE) != NULL, "list empty");]]></value>
</code>
</step>
<step>
<description>
<value>Now must be empty.</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[test_assert(chGuardedPoolAllocTimeout(&gmp1, TIME_IMMEDIATE) == NULL, "list not empty");]]></value>
</code>
</step>
<step>
<description>
<value>Adding the objects to the pool using chGuardedPoolFree().</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[for (i = 0; i < MEMORY_POOL_SIZE; i++)
chGuardedPoolFree(&gmp1, &objects[i]);]]></value>
</code>
</step>
<step>
<description>
<value>Emptying the pool using chGuardedPoolAllocTimeout() again.</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[for (i = 0; i < MEMORY_POOL_SIZE; i++)
test_assert(chGuardedPoolAllocTimeout(&gmp1, TIME_IMMEDIATE) != NULL, "list empty");]]></value>
</code>
</step>
<step>
<description>
<value>Now must be empty again.</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[test_assert(chGuardedPoolAllocTimeout(&gmp1, TIME_IMMEDIATE) == NULL, "list not empty");]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>Guarded Memory Pools timeout.</value>
</brief>
<description>
<value>The timeout features for the Guarded Memory Pools is tested.</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[chGuardedPoolObjectInit(&gmp1, sizeof (uint32_t));]]></value>
</setup_code>
<teardown_code>
<value />
</teardown_code>
<local_variables>
<value />
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Trying to allocate with 100mS timeout, must fail because the pool is empty.</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[test_assert(chGuardedPoolAllocTimeout(&gmp1, MS2ST(100)) == NULL, "list not empty");]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
</sequences>

View File

@ -1,5 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<SPC5-Patch version="1.0.0">
<!--It is your patch repository, do not break your XML File.-->
<files />
<files>
<file componentId="org.chibios.spc5.components.chibios_unitary_tests_engine" version="1.0.0.qualifier" path="component/lib/include/ch_test.h" user="false">
<diff><![CDATA[--- components/chibios_unit_tests_engine_component/lib/include/ch_test.h
+++ components/chibios_unit_tests_engine_component/lib/include/ch_test.h
@@ -1,5 +1,5 @@
/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.]]></diff>
</file>
<file componentId="org.chibios.spc5.components.chibios_unitary_tests_engine" version="1.0.0.qualifier" path="component/lib/src/ch_test.c" user="false">
<diff><![CDATA[--- components/chibios_unit_tests_engine_component/lib/src/ch_test.c
+++ components/chibios_unit_tests_engine_component/lib/src/ch_test.c
@@ -1,5 +1,5 @@
/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.]]></diff>
</file>
</files>
</SPC5-Patch>

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -29,6 +29,8 @@
*
* <h2>Test Cases</h2>
* - @subpage test_005_001
* - @subpage test_005_002
* - @subpage test_005_003
* .
*/
@ -40,6 +42,7 @@
static uint32_t objects[MEMORY_POOL_SIZE];
static MEMORYPOOL_DECL(mp1, sizeof (uint32_t), NULL);
static GUARDEDMEMORYPOOL_DECL(gmp1, sizeof (uint32_t));
static void *null_provider(size_t size, unsigned align) {
@ -54,7 +57,7 @@ static void *null_provider(size_t size, unsigned align) {
****************************************************************************/
/**
* @page test_005_001 Loading and empting the memory pool
* @page test_005_001 Loading and empting a memory pool
*
* <h2>Description</h2>
* The memory pool functionality is tested by loading and empting it,
@ -128,12 +131,116 @@ static void test_005_001_execute(void) {
}
static const testcase_t test_005_001 = {
"Loading and empting the memory pool",
"Loading and empting a memory pool",
test_005_001_setup,
NULL,
test_005_001_execute
};
/**
* @page test_005_002 Loading and empting a guarded memory pool without waiting
*
* <h2>Description</h2>
* The memory pool functionality is tested by loading and empting it,
* all conditions are tested.
*
* <h2>Test Steps</h2>
* - Adding the objects to the pool using chGuardedPoolLoadArray().
* - Emptying the pool using chGuardedPoolAllocTimeout().
* - Now must be empty.
* - Adding the objects to the pool using chGuardedPoolFree().
* - Emptying the pool using chGuardedPoolAllocTimeout() again.
* - Now must be empty again.
* .
*/
static void test_005_002_setup(void) {
chGuardedPoolObjectInit(&gmp1, sizeof (uint32_t));
}
static void test_005_002_execute(void) {
unsigned i;
/* Adding the objects to the pool using chGuardedPoolLoadArray().*/
test_set_step(1);
{
chGuardedPoolLoadArray(&gmp1, objects, MEMORY_POOL_SIZE);
}
/* Emptying the pool using chGuardedPoolAllocTimeout().*/
test_set_step(2);
{
for (i = 0; i < MEMORY_POOL_SIZE; i++)
test_assert(chGuardedPoolAllocTimeout(&gmp1, TIME_IMMEDIATE) != NULL, "list empty");
}
/* Now must be empty.*/
test_set_step(3);
{
test_assert(chGuardedPoolAllocTimeout(&gmp1, TIME_IMMEDIATE) == NULL, "list not empty");
}
/* Adding the objects to the pool using chGuardedPoolFree().*/
test_set_step(4);
{
for (i = 0; i < MEMORY_POOL_SIZE; i++)
chGuardedPoolFree(&gmp1, &objects[i]);
}
/* Emptying the pool using chGuardedPoolAllocTimeout() again.*/
test_set_step(5);
{
for (i = 0; i < MEMORY_POOL_SIZE; i++)
test_assert(chGuardedPoolAllocTimeout(&gmp1, TIME_IMMEDIATE) != NULL, "list empty");
}
/* Now must be empty again.*/
test_set_step(6);
{
test_assert(chGuardedPoolAllocTimeout(&gmp1, TIME_IMMEDIATE) == NULL, "list not empty");
}
}
static const testcase_t test_005_002 = {
"Loading and empting a guarded memory pool without waiting",
test_005_002_setup,
NULL,
test_005_002_execute
};
/**
* @page test_005_003 Guarded Memory Pools timeout
*
* <h2>Description</h2>
* The timeout features for the Guarded Memory Pools is tested.
*
* <h2>Test Steps</h2>
* - Trying to allocate with 100mS timeout, must fail because the pool
* is empty.
* .
*/
static void test_005_003_setup(void) {
chGuardedPoolObjectInit(&gmp1, sizeof (uint32_t));
}
static void test_005_003_execute(void) {
/* Trying to allocate with 100mS timeout, must fail because the pool
is empty.*/
test_set_step(1);
{
test_assert(chGuardedPoolAllocTimeout(&gmp1, MS2ST(100)) == NULL, "list not empty");
}
}
static const testcase_t test_005_003 = {
"Guarded Memory Pools timeout",
test_005_003_setup,
NULL,
test_005_003_execute
};
/****************************************************************************
* Exported data.
****************************************************************************/
@ -143,5 +250,7 @@ static const testcase_t test_005_001 = {
*/
const testcase_t * const test_sequence_005[] = {
&test_005_001,
&test_005_002,
&test_005_003,
NULL
};

View File

@ -1,5 +1,5 @@
/*
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.