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

View File

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

View File

@ -1,5 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<SPC5-Patch version="1.0.0"> <SPC5-Patch version="1.0.0">
<!--It is your patch repository, do not break your XML File.--> <!--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> </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 uint32_t objects[MEMORY_POOL_SIZE];
static MEMORYPOOL_DECL(mp1, sizeof (uint32_t), NULL); static MEMORYPOOL_DECL(mp1, sizeof (uint32_t), NULL);
static GUARDEDMEMORYPOOL_DECL(gmp1, sizeof (uint32_t));
static void *null_provider(size_t size, unsigned align) { static void *null_provider(size_t size, unsigned align) {
@ -943,7 +944,7 @@ static void *null_provider(size_t size, unsigned align) {
<cases> <cases>
<case> <case>
<brief> <brief>
<value>Loading and empting the memory pool.</value> <value>Loading and empting a memory pool.</value>
</brief> </brief>
<description> <description>
<value>The memory pool functionality is tested by loading and empting it, all conditions are tested.</value> <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> </step>
</steps> </steps>
</case> </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> </cases>
</sequence> </sequence>
</sequences> </sequences>

View File

@ -1,5 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<SPC5-Patch version="1.0.0"> <SPC5-Patch version="1.0.0">
<!--It is your patch repository, do not break your XML File.--> <!--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> </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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -29,6 +29,8 @@
* *
* <h2>Test Cases</h2> * <h2>Test Cases</h2>
* - @subpage test_005_001 * - @subpage test_005_001
* - @subpage test_005_002
* - @subpage test_005_003
* . * .
*/ */
@ -40,6 +42,7 @@
static uint32_t objects[MEMORY_POOL_SIZE]; static uint32_t objects[MEMORY_POOL_SIZE];
static MEMORYPOOL_DECL(mp1, sizeof (uint32_t), NULL); static MEMORYPOOL_DECL(mp1, sizeof (uint32_t), NULL);
static GUARDEDMEMORYPOOL_DECL(gmp1, sizeof (uint32_t));
static void *null_provider(size_t size, unsigned align) { 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> * <h2>Description</h2>
* The memory pool functionality is tested by loading and empting it, * 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 = { static const testcase_t test_005_001 = {
"Loading and empting the memory pool", "Loading and empting a memory pool",
test_005_001_setup, test_005_001_setup,
NULL, NULL,
test_005_001_execute 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. * Exported data.
****************************************************************************/ ****************************************************************************/
@ -143,5 +250,7 @@ static const testcase_t test_005_001 = {
*/ */
const testcase_t * const test_sequence_005[] = { const testcase_t * const test_sequence_005[] = {
&test_005_001, &test_005_001,
&test_005_002,
&test_005_003,
NULL 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"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.