From patchwork Fri Dec 12 07:30:54 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "yan.songming" X-Patchwork-Id: 42176 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-la0-f71.google.com (mail-la0-f71.google.com [209.85.215.71]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 12C9126C77 for ; Fri, 12 Dec 2014 07:31:34 +0000 (UTC) Received: by mail-la0-f71.google.com with SMTP id q1sf4567992lam.6 for ; Thu, 11 Dec 2014 23:31:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:subject :precedence:list-id:list-unsubscribe:list-archive:list-post :list-help:list-subscribe:mime-version:content-type :content-transfer-encoding:errors-to:sender:x-original-sender :x-original-authentication-results:mailing-list; bh=M6ffjo4kEzW6HWf25zOf+TfTb/igfXVDVwwqdHzmJ18=; b=GwWOJSMokjVHMK/J+9QHqlo7QDyD+HiC/HnGNCHxJi9GLhG13EuRzHH2APZvzusau8 p0ONK3iYRA3DraDSgFOGOdJs2Cb9Fpk78BkKMkun2Gsa+DmvbLIUi0egFDk65bweq+4T Gsp/+y5T5syweE44gfCxyMoAy+NkIVBJDWy9Aw9oJMiO5tbZ+KlrcLYlbFM+MZkqWyi6 k7yMOeXsLb7GMNugry2CjWB8WOCWnYwDRH5UYD3lyWvkdZrxcnaWxcqXQS2oBTQG8wFq X2RjW4FIujF73GVCylAEyYbu7mltgY8pyNQP5iE4HpPlPM1RoNN9iq41tBzTKXz9nIrn HT4w== X-Gm-Message-State: ALoCoQkP+MphiP+gXec1+L84OGOWr4I0fCqiO/X5caLyZy1XYRCj1kR1wNvNWcSty+thdCHBPQhB X-Received: by 10.194.92.34 with SMTP id cj2mr101353wjb.5.1418369492985; Thu, 11 Dec 2014 23:31:32 -0800 (PST) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.205.10 with SMTP id lc10ls411799lac.22.gmail; Thu, 11 Dec 2014 23:31:32 -0800 (PST) X-Received: by 10.112.65.195 with SMTP id z3mr14376189lbs.36.1418369492652; Thu, 11 Dec 2014 23:31:32 -0800 (PST) Received: from mail-lb0-f173.google.com (mail-lb0-f173.google.com. [209.85.217.173]) by mx.google.com with ESMTPS id jt14si566898lab.13.2014.12.11.23.31.32 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 11 Dec 2014 23:31:32 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.173 as permitted sender) client-ip=209.85.217.173; Received: by mail-lb0-f173.google.com with SMTP id z12so5406981lbi.32 for ; Thu, 11 Dec 2014 23:31:32 -0800 (PST) X-Received: by 10.152.26.201 with SMTP id n9mr7315792lag.50.1418369492313; Thu, 11 Dec 2014 23:31:32 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.142.69 with SMTP id ru5csp770080lbb; Thu, 11 Dec 2014 23:31:30 -0800 (PST) X-Received: by 10.224.114.81 with SMTP id d17mr28088046qaq.27.1418369490199; Thu, 11 Dec 2014 23:31:30 -0800 (PST) Received: from ip-10-35-177-41.ec2.internal (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTPS id w81si571074qge.81.2014.12.11.23.31.28 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 11 Dec 2014 23:31:30 -0800 (PST) Received-SPF: none (google.com: lng-odp-bounces@lists.linaro.org does not designate permitted sender hosts) client-ip=54.225.227.206; Received: from localhost ([127.0.0.1] helo=ip-10-35-177-41.ec2.internal) by ip-10-35-177-41.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1XzKhB-000297-TT; Fri, 12 Dec 2014 07:31:25 +0000 Received: from mail-pa0-f45.google.com ([209.85.220.45]) by ip-10-35-177-41.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1XzKh4-00028v-Tw for lng-odp@lists.linaro.org; Fri, 12 Dec 2014 07:31:19 +0000 Received: by mail-pa0-f45.google.com with SMTP id lf10so6150612pab.32 for ; Thu, 11 Dec 2014 23:31:13 -0800 (PST) X-Received: by 10.67.12.236 with SMTP id et12mr24458608pad.31.1418369473365; Thu, 11 Dec 2014 23:31:13 -0800 (PST) Received: from localhost.localdomain ([210.51.195.9]) by mx.google.com with ESMTPSA id v5sm692799pdn.20.2014.12.11.23.31.10 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Dec 2014 23:31:12 -0800 (PST) From: Yan Sonming To: lng-odp@lists.linaro.org Date: Fri, 12 Dec 2014 02:30:54 -0500 Message-Id: <1418369454-20155-1-git-send-email-yan.songming@linaro.org> X-Mailer: git-send-email 1.8.3.1 X-Topics: patch Subject: [lng-odp] [PATCH v2] validation:add atomic test in odp syncronizers X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: lng-odp-bounces@lists.linaro.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: yan.songming@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.173 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 Remove odp_atomic_test in test/api_test and add the odp_atomic_test to test/validation as one part of odp syncronizers Signed-off-by: Yan Songming --- test/api_test/Makefile.am | 5 +- test/api_test/odp_atomic_test.c | 299 --------------------------------- test/api_test/odp_atomic_test.h | 51 ------ test/api_test/odp_common.c | 1 - test/validation/.gitignore | 1 + test/validation/Makefile.am | 6 +- test/validation/odp_syne.c | 15 ++ test/validation/syne/odp_test_atomic.c | 258 ++++++++++++++++++++++++++++ test/validation/syne/odp_test_atomic.h | 14 ++ 9 files changed, 294 insertions(+), 356 deletions(-) delete mode 100644 test/api_test/odp_atomic_test.c delete mode 100644 test/api_test/odp_atomic_test.h create mode 100644 test/validation/odp_syne.c create mode 100644 test/validation/syne/odp_test_atomic.c create mode 100644 test/validation/syne/odp_test_atomic.h diff --git a/test/api_test/Makefile.am b/test/api_test/Makefile.am index 74e8612..ce301ce 100644 --- a/test/api_test/Makefile.am +++ b/test/api_test/Makefile.am @@ -1,18 +1,15 @@ include $(top_srcdir)/test/Makefile.inc -bin_PROGRAMS = odp_atomic odp_shm odp_ring odp_timer_ping +bin_PROGRAMS = odp_shm odp_ring odp_timer_ping -odp_atomic_CFLAGS = $(AM_CFLAGS) odp_shm_CFLAGS = $(AM_CFLAGS) odp_ring_CFLAGS = $(AM_CFLAGS) odp_timer_ping_CFLAGS = $(AM_CFLAGS) -odp_atomic_LDFLAGS = $(AM_LDFLAGS) -static odp_shm_LDFLAGS = $(AM_LDFLAGS) -static odp_ring_LDFLAGS = $(AM_LDFLAGS) -static odp_timer_ping_LDFLAGS = $(AM_LDFLAGS) -static -dist_odp_atomic_SOURCES = odp_atomic_test.c odp_common.c dist_odp_shm_SOURCES = odp_shm_test.c odp_common.c dist_odp_ring_SOURCES = odp_ring_test.c odp_common.c dist_odp_timer_ping_SOURCES = odp_timer_ping.c odp_common.c diff --git a/test/api_test/odp_atomic_test.c b/test/api_test/odp_atomic_test.c deleted file mode 100644 index 5563606..0000000 --- a/test/api_test/odp_atomic_test.c +++ /dev/null @@ -1,299 +0,0 @@ -/* Copyright (c) 2013, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#include -#include -#include -#include -#include - -static odp_atomic_u32_t a32u; -static odp_atomic_u64_t a64u; - -static odp_barrier_t barrier; - -static const char * const test_name[] = { - "dummy", - "test atomic all (add/sub/inc/dec) on 32- and 64-bit atomic ints", - "test atomic inc/dec of 32-bit atomic int", - "test atomic add/sub of 32-bit atomic int", - "test atomic inc/dec of 64-bit atomic int", - "test atomic add/sub of 64-bit atomic int" -}; - -static struct timeval tv0[MAX_WORKERS], tv1[MAX_WORKERS]; - -static void usage(void) -{ - printf("\n./odp_atomic -t [-n ]\n\n" - "\t is\n" - "\t\t1 - Test all (inc/dec/add/sub on 32/64-bit atomic ints)\n" - "\t\t2 - Test inc/dec of 32-bit atomic int\n" - "\t\t3 - Test add/sub of 32-bit atomic int\n" - "\t\t4 - Test inc/dec of 64-bit atomic int\n" - "\t\t5 - Test add/sub of 64-bit atomic int\n" - "\t\t-n <1 - 31> - no of threads to start\n" - "\t\tif user doesn't specify this option, then\n" - "\t\tno of threads created is equivalent to no of cores\n" - "\t\tavailable in the system\n" - "\tExample usage:\n" - "\t\t./odp_atomic -t 2\n" - "\t\t./odp_atomic -t 3 -n 12\n"); -} - - -void test_atomic_inc_u32(void) -{ - int i; - - for (i = 0; i < CNT; i++) - odp_atomic_inc_u32(&a32u); -} - -void test_atomic_inc_64(void) -{ - int i; - - for (i = 0; i < CNT; i++) - odp_atomic_inc_u64(&a64u); -} - -void test_atomic_dec_u32(void) -{ - int i; - - for (i = 0; i < CNT; i++) - odp_atomic_dec_u32(&a32u); -} - -void test_atomic_dec_64(void) -{ - int i; - - for (i = 0; i < CNT; i++) - odp_atomic_dec_u64(&a64u); -} - -void test_atomic_add_u32(void) -{ - int i; - - for (i = 0; i < (CNT / ADD_SUB_CNT); i++) - odp_atomic_fetch_add_u32(&a32u, ADD_SUB_CNT); -} - -void test_atomic_add_64(void) -{ - int i; - - for (i = 0; i < (CNT / ADD_SUB_CNT); i++) - odp_atomic_fetch_add_u64(&a64u, ADD_SUB_CNT); -} - -void test_atomic_sub_u32(void) -{ - int i; - - for (i = 0; i < (CNT / ADD_SUB_CNT); i++) - odp_atomic_fetch_sub_u32(&a32u, ADD_SUB_CNT); -} - -void test_atomic_sub_64(void) -{ - int i; - - for (i = 0; i < (CNT / ADD_SUB_CNT); i++) - odp_atomic_fetch_sub_u64(&a64u, ADD_SUB_CNT); -} - -void test_atomic_inc_dec_u32(void) -{ - test_atomic_inc_u32(); - test_atomic_dec_u32(); -} - -void test_atomic_add_sub_u32(void) -{ - test_atomic_add_u32(); - test_atomic_sub_u32(); -} - -void test_atomic_inc_dec_64(void) -{ - test_atomic_inc_64(); - test_atomic_dec_64(); -} - -void test_atomic_add_sub_64(void) -{ - test_atomic_add_64(); - test_atomic_sub_64(); -} - -/** - * Test basic atomic operation like - * add/sub/increment/decrement operation. - */ -void test_atomic_basic(void) -{ - test_atomic_inc_u32(); - test_atomic_dec_u32(); - test_atomic_add_u32(); - test_atomic_sub_u32(); - - test_atomic_inc_64(); - test_atomic_dec_64(); - test_atomic_add_64(); - test_atomic_sub_64(); -} - -void test_atomic_init(void) -{ - odp_atomic_init_u32(&a32u, 0); - odp_atomic_init_u64(&a64u, 0); -} - -void test_atomic_store(void) -{ - odp_atomic_store_u32(&a32u, U32_INIT_VAL); - odp_atomic_store_u64(&a64u, U64_INIT_VAL); -} - -int test_atomic_validate(void) -{ - if (odp_atomic_load_u32(&a32u) != U32_INIT_VAL) { - LOG_ERR("Atomic u32 usual functions failed\n"); - return -1; - } - - if (odp_atomic_load_u64(&a64u) != U64_INIT_VAL) { - LOG_ERR("Atomic u64 usual functions failed\n"); - return -1; - } - - return 0; -} - -static void *run_thread(void *arg) -{ - pthrd_arg *parg = (pthrd_arg *)arg; - int thr; - - thr = odp_thread_id(); - - LOG_DBG("Thread %i starts\n", thr); - - /* Wait here until all threads have arrived */ - /* Use multiple barriers to verify that it handles wrap around and - * has no race conditions which could be exposed when invoked back- - * to-back */ - odp_barrier_wait(&barrier); - odp_barrier_wait(&barrier); - odp_barrier_wait(&barrier); - odp_barrier_wait(&barrier); - - gettimeofday(&tv0[thr], NULL); - - switch (parg->testcase) { - case TEST_MIX: - test_atomic_basic(); - break; - case TEST_INC_DEC_U32: - test_atomic_inc_dec_u32(); - break; - case TEST_ADD_SUB_U32: - test_atomic_add_sub_u32(); - break; - case TEST_INC_DEC_64: - test_atomic_inc_dec_64(); - break; - case TEST_ADD_SUB_64: - test_atomic_add_sub_64(); - break; - } - gettimeofday(&tv1[thr], NULL); - fflush(NULL); - - printf("Time taken in thread %02d to complete op is %lld usec\n", thr, - (tv1[thr].tv_sec - tv0[thr].tv_sec) * 1000000ULL + - (tv1[thr].tv_usec - tv0[thr].tv_usec)); - - return parg; -} - -int main(int argc, char *argv[]) -{ - pthrd_arg thrdarg; - int test_type = 0, pthrdnum = 0, i = 0, cnt = argc - 1; - char c; - int result; - - if (argc == 1 || argc % 2 == 0) { - usage(); - goto err_exit; - } - if (odp_test_global_init() != 0) - goto err_exit; - odp_print_system_info(); - - while (cnt != 0) { - sscanf(argv[++i], "-%c", &c); - switch (c) { - case 't': - sscanf(argv[++i], "%d", &test_type); - break; - case 'n': - sscanf(argv[++i], "%d", &pthrdnum); - break; - default: - LOG_ERR("Invalid option %c\n", c); - usage(); - goto err_exit; - } - if (test_type < TEST_MIX || test_type > TEST_MAX || - pthrdnum > odp_sys_core_count() || pthrdnum < 0) { - usage(); - goto err_exit; - } - cnt -= 2; - } - - if (pthrdnum == 0) - pthrdnum = odp_sys_core_count(); - - test_atomic_init(); - test_atomic_store(); - - memset(&thrdarg, 0, sizeof(pthrd_arg)); - thrdarg.testcase = test_type; - thrdarg.numthrds = pthrdnum; - - if ((test_type > 0) && (test_type < TEST_MAX)) { - printf("%s\n", test_name[test_type]); - } else { - LOG_ERR("Invalid test case [%d]\n", test_type); - usage(); - goto err_exit; - } - odp_barrier_init(&barrier, pthrdnum); - odp_test_thread_create(run_thread, &thrdarg); - - odp_test_thread_exit(&thrdarg); - - result = test_atomic_validate(); - - if (result == 0) { - printf("%s_%d_%d Result:pass\n", - test_name[test_type], test_type, pthrdnum); - } else { - printf("%s_%d_%d Result:fail\n", - test_name[test_type], test_type, pthrdnum); - } - return 0; - -err_exit: - return -1; -} diff --git a/test/api_test/odp_atomic_test.h b/test/api_test/odp_atomic_test.h deleted file mode 100644 index aaa9d34..0000000 --- a/test/api_test/odp_atomic_test.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2013, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef ODP_ATOMIC_TEST_H_ -#define ODP_ATOMIC_TEST_H_ - -#include -#include - -/** - * add_sub_cnt could be any valid value - * so to excercise explicit atomic_add/sub - * ops. For now using 5.. - */ -#define ADD_SUB_CNT 5 - -#define CNT 500000 -#define U32_INIT_VAL (1UL << 10) -#define U64_INIT_VAL (1ULL << 33) - -typedef enum { - TEST_MIX = 1, /* Must be first test case num */ - TEST_INC_DEC_U32, - TEST_ADD_SUB_U32, - TEST_INC_DEC_64, - TEST_ADD_SUB_64, - TEST_MAX, -} odp_test_atomic_t; - - -void test_atomic_inc_dec_u32(void); -void test_atomic_add_sub_u32(void); -void test_atomic_inc_dec_64(void); -void test_atomic_add_sub_64(void); -void test_atomic_inc_u32(void); -void test_atomic_dec_u32(void); -void test_atomic_add_u32(void); -void test_atomic_sub_u32(void); -void test_atomic_inc_64(void); -void test_atomic_dec_64(void); -void test_atomic_add_64(void); -void test_atomic_sub_64(void); -void test_atomic_init(void); -void test_atomic_basic(void); -void test_atomic_store(void); -int test_atomic_validate(void); - -#endif /* ODP_ATOMIC_TEST_H_ */ diff --git a/test/api_test/odp_common.c b/test/api_test/odp_common.c index 329d4d4..11afb1f 100644 --- a/test/api_test/odp_common.c +++ b/test/api_test/odp_common.c @@ -14,7 +14,6 @@ #include #include #include -#include #include #include diff --git a/test/validation/.gitignore b/test/validation/.gitignore index 37e2594..22c867a 100644 --- a/test/validation/.gitignore +++ b/test/validation/.gitignore @@ -4,3 +4,4 @@ odp_init odp_queue odp_crypto odp_shm +odp_syne diff --git a/test/validation/Makefile.am b/test/validation/Makefile.am index 8547085..073e72b 100644 --- a/test/validation/Makefile.am +++ b/test/validation/Makefile.am @@ -6,13 +6,15 @@ AM_LDFLAGS += -static if ODP_CUNIT_ENABLED TESTS = ${bin_PROGRAMS} check_PROGRAMS = ${bin_PROGRAMS} -bin_PROGRAMS = odp_init odp_queue odp_crypto odp_shm +bin_PROGRAMS = odp_init odp_queue odp_crypto odp_shm odp_syne odp_init_LDFLAGS = $(AM_LDFLAGS) odp_queue_LDFLAGS = $(AM_LDFLAGS) odp_crypto_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/crypto odp_crypto_LDFLAGS = $(AM_LDFLAGS) odp_shm_CFLAGS = $(AM_CFLAGS) odp_shm_LDFLAGS = $(AM_LDFLAGS) +odp_syne_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/syne +odp_syne_LDFLAGS = $(AM_LDFLAGS) endif dist_odp_init_SOURCES = odp_init.c @@ -22,3 +24,5 @@ dist_odp_crypto_SOURCES = crypto/odp_crypto_test_async_inp.c \ crypto/odp_crypto_test_rng.c \ odp_crypto.c common/odp_cunit_common.c dist_odp_shm_SOURCES = odp_shm.c common/odp_cunit_common.c +dist_odp_syne_SOURCES = odp_syne.c syne/odp_test_atomic.c\ + common/odp_cunit_common.c diff --git a/test/validation/odp_syne.c b/test/validation/odp_syne.c new file mode 100644 index 0000000..9a39740 --- /dev/null +++ b/test/validation/odp_syne.c @@ -0,0 +1,15 @@ +/* Copyright (c) 2014, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include "odp_test_atomic.h" + +CU_SuiteInfo odp_testsuites[] = { + {"ODP_ATOMIC", NULL, NULL, NULL, NULL, test_odp_atomic}, + /* {"ODP_LOCK", NULL, NULL, NULL, NULL, test_odp_lock},*/ + CU_SUITE_INFO_NULL, +}; diff --git a/test/validation/syne/odp_test_atomic.c b/test/validation/syne/odp_test_atomic.c new file mode 100644 index 0000000..3f983fa --- /dev/null +++ b/test/validation/syne/odp_test_atomic.c @@ -0,0 +1,258 @@ +/* Copyright (c) 2014, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include + +static odp_atomic_u32_t a32u; +static odp_atomic_u64_t a64u; + + +#define ADD_SUB_CNT 5 + +#define CNT 10 +#define U32_INIT_VAL (1UL << 10) +#define U64_INIT_VAL (1ULL << 33) + + +static void test_atomic_inc_u32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_inc_u32(&a32u); +} + +static void test_atomic_inc_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_inc_u64(&a64u); +} + +static void test_atomic_dec_u32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_dec_u32(&a32u); +} + +static void test_atomic_dec_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_dec_u64(&a64u); +} +static void test_atomic_fetch_inc_u32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_fetch_inc_u32(&a32u); +} + +static void test_atomic_fetch_inc_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_fetch_inc_u64(&a64u); +} + +static void test_atomic_fetch_dec_u32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_fetch_dec_u32(&a32u); +} + +static void test_atomic_fetch_dec_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_fetch_dec_u64(&a64u); +} + +static void test_atomic_add_u32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_add_u32(&a32u, ADD_SUB_CNT); +} +static void test_atomic_add_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_add_u64(&a64u, ADD_SUB_CNT); +} + +static void test_atomic_sub_u32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_sub_u32(&a32u, ADD_SUB_CNT); +} + +static void test_atomic_sub_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_sub_u64(&a64u, ADD_SUB_CNT); +} + +static void test_atomic_fetch_add_u32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_fetch_add_u32(&a32u, ADD_SUB_CNT); +} + +static void test_atomic_fetch_add_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_fetch_add_u64(&a64u, ADD_SUB_CNT); +} +static void test_atomic_fetch_sub_u32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_fetch_sub_u32(&a32u, ADD_SUB_CNT); +} + +static void test_atomic_fetch_sub_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odp_atomic_fetch_sub_u64(&a64u, ADD_SUB_CNT); +} + +static void test_atomic_inc_dec_u32(void) +{ + test_atomic_inc_u32(); + test_atomic_dec_u32(); +} + +static void test_atomic_inc_dec_64(void) +{ + test_atomic_inc_64(); + test_atomic_dec_64(); +} + +static void test_atomic_fetch_inc_dec_u32(void) +{ + test_atomic_fetch_inc_u32(); + test_atomic_fetch_dec_u32(); +} + +static void test_atomic_fetch_inc_dec_64(void) +{ + test_atomic_fetch_inc_64(); + test_atomic_fetch_dec_64(); +} + + +static void test_atomic_add_sub_u32(void) +{ + test_atomic_add_u32(); + test_atomic_sub_u32(); +} + + +static void test_atomic_add_sub_64(void) +{ + test_atomic_add_64(); + test_atomic_sub_64(); +} + +static void test_atomic_fetch_add_sub_u32(void) +{ + test_atomic_fetch_add_u32(); + test_atomic_fetch_sub_u32(); +} + +static void test_atomic_fetch_add_sub_64(void) +{ + test_atomic_fetch_add_64(); + test_atomic_fetch_sub_64(); +} + +static void test_atomic_init(void) +{ + odp_atomic_init_u32(&a32u, 0); + odp_atomic_init_u64(&a64u, 0); +} + +static void test_atomic_store(void) +{ + odp_atomic_store_u32(&a32u, U32_INIT_VAL); + odp_atomic_store_u64(&a64u, U64_INIT_VAL); +} + +static void test_atomic_validate(void) +{ + CU_ASSERT(U32_INIT_VAL == odp_atomic_load_u32(&a32u)); + CU_ASSERT(U64_INIT_VAL == odp_atomic_load_u64(&a64u)); +} +static void test_atomic_basic(void) +{ + test_atomic_init(); + test_atomic_store(); + test_atomic_validate(); +} +static void test_atomic_inc_dec(void) +{ + test_atomic_store(); + test_atomic_inc_dec_u32(); + test_atomic_inc_dec_64(); + test_atomic_validate(); +} + +static void test_atomic_fetch_inc_dec(void) +{ + test_atomic_store(); + test_atomic_fetch_inc_dec_u32(); + test_atomic_fetch_inc_dec_64(); + test_atomic_validate(); +} + +static void test_atomic_add_sub(void) +{ + test_atomic_store(); + test_atomic_add_sub_u32(); + test_atomic_add_sub_64(); + test_atomic_validate(); +} +static void test_atomic_fetch_add_sub(void) +{ + test_atomic_store(); + test_atomic_fetch_add_sub_u32(); + test_atomic_fetch_add_sub_64(); + test_atomic_validate(); +} + +CU_TestInfo test_odp_atomic[] = { + {"test_odp_atomic_basic", test_atomic_basic}, + {"test_odp_atomic_inc_dec", test_atomic_inc_dec}, + {"test_odp_atomic_add_sub", test_atomic_add_sub}, + {"test_odp_atomic_fetch_inc_dec", test_atomic_fetch_inc_dec}, + {"test_odp_atomic_fetch_add_sub", test_atomic_fetch_add_sub}, + CU_TEST_INFO_NULL, +}; diff --git a/test/validation/syne/odp_test_atomic.h b/test/validation/syne/odp_test_atomic.h new file mode 100644 index 0000000..a51a26a --- /dev/null +++ b/test/validation/syne/odp_test_atomic.h @@ -0,0 +1,14 @@ +/* Copyright (c) 2014, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef ODP_TEST_ATOMIC_ +#define ODP_TEST_ATOMIC_ + +#include "CUnit/TestDB.h" + +/* Suite test array */ +extern CU_TestInfo test_odp_atomic[]; + +#endif