summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-09-03 11:06:46 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-09-03 11:07:37 +0200
commit4a8c334fb2b115f45280df84c5283957fdbed858 (patch)
treed9d9e2460df816b6842c1fdea5ed75562c66d91e
parentscore: Use void * for some atomic pointer ops (diff)
downloadrtems-4a8c334fb2b115f45280df84c5283957fdbed858.tar.bz2
smptests/smpatomic08: Add initialization test case
-rw-r--r--testsuites/smptests/smpatomic08/init.c42
-rw-r--r--testsuites/smptests/smpatomic08/smpatomic08.scn1
2 files changed, 43 insertions, 0 deletions
diff --git a/testsuites/smptests/smpatomic08/init.c b/testsuites/smptests/smpatomic08/init.c
index 055a8071df..c047ff0f1a 100644
--- a/testsuites/smptests/smpatomic08/init.c
+++ b/testsuites/smptests/smpatomic08/init.c
@@ -18,6 +18,7 @@
#include <rtems/score/atomic.h>
#include <rtems.h>
+#include <string.h>
#include "tmacros.h"
@@ -378,12 +379,53 @@ static void worker_task(size_t worker_index)
rtems_test_assert(0);
}
+static void test_static_and_dynamic_initialization(void)
+{
+ static Atomic_Ulong static_ulong =
+ ATOMIC_INITIALIZER_ULONG(0xdeadbeefUL);
+ static Atomic_Pointer static_ptr =
+ ATOMIC_INITIALIZER_PTR(&static_ptr);
+ static Atomic_Flag static_flag = ATOMIC_INITIALIZER_FLAG;
+
+ Atomic_Ulong stack_ulong;
+ Atomic_Pointer stack_ptr;
+ Atomic_Flag stack_flag;
+
+ puts("=== static and dynamic initialization test case ===");
+
+ _Atomic_Init_ulong(&stack_ulong, 0xdeadbeefUL);
+ _Atomic_Init_ptr(&stack_ptr, &static_ptr);
+ _Atomic_Flag_clear(&stack_flag, ATOMIC_ORDER_RELAXED);
+
+ rtems_test_assert(
+ memcmp(&stack_ulong, &static_ulong, sizeof(stack_ulong)) == 0
+ );
+ rtems_test_assert(
+ memcmp(&stack_ptr, &static_ptr, sizeof(stack_ptr)) == 0
+ );
+ rtems_test_assert(
+ memcmp(&stack_flag, &static_flag, sizeof(stack_flag)) == 0
+ );
+
+ rtems_test_assert(
+ _Atomic_Load_ulong(&stack_ulong, ATOMIC_ORDER_RELAXED) == 0xdeadbeefUL
+ );
+ rtems_test_assert(
+ _Atomic_Load_ptr(&stack_ptr, ATOMIC_ORDER_RELAXED) == &static_ptr
+ );
+ rtems_test_assert(
+ !_Atomic_Flag_test_and_set(&stack_flag, ATOMIC_ORDER_RELAXED)
+ );
+}
+
static void test(void)
{
test_context *ctx = &test_instance;
rtems_status_code sc;
size_t worker_index;
+ test_static_and_dynamic_initialization();
+
ctx->worker_count = rtems_smp_get_processor_count();
sc = rtems_timer_create(
diff --git a/testsuites/smptests/smpatomic08/smpatomic08.scn b/testsuites/smptests/smpatomic08/smpatomic08.scn
index b8878e3f7d..28d46809a0 100644
--- a/testsuites/smptests/smpatomic08/smpatomic08.scn
+++ b/testsuites/smptests/smpatomic08/smpatomic08.scn
@@ -1,4 +1,5 @@
*** TEST SMPATOMIC 8 ***
+=== static and dynamic initialization test case ===
=== atomic add test case ==
worker 0 value: 16686
worker 1 value: 36405