diff options
Diffstat (limited to 'test/validation/api/stash/stash.c')
-rw-r--r-- | test/validation/api/stash/stash.c | 137 |
1 files changed, 100 insertions, 37 deletions
diff --git a/test/validation/api/stash/stash.c b/test/validation/api/stash/stash.c index b8677d85f..c99d5a471 100644 --- a/test/validation/api/stash/stash.c +++ b/test/validation/api/stash/stash.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2020, Nokia +/* Copyright (c) 2020-2021, Nokia * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -12,6 +12,11 @@ #define MAGIC_U16 0x25bf #define MAGIC_U8 0xab +#define VAL_U64 0x6b89f0742a672c34 +#define VAL_U32 0x713d847b +#define VAL_U16 0xb587 +#define VAL_U8 0x9d + #define NUM_U64 1024 #define NUM_U32 1024 #define NUM_U16 1024 @@ -361,37 +366,37 @@ static void stash_default_put(uint32_t size, int32_t burst) int32_t num; void *input, *output; uint64_t input_u64[burst]; - uint64_t output_u64[burst]; + uint64_t output_u64[burst + 2]; uint32_t input_u32[burst]; - uint32_t output_u32[burst]; + uint32_t output_u32[burst + 2]; uint16_t input_u16[burst]; - uint16_t output_u16[burst]; + uint16_t output_u16[burst + 2]; uint8_t input_u8[burst]; - uint8_t output_u8[burst]; + uint8_t output_u8[burst + 2]; if (size == sizeof(uint64_t)) { num = global.num_default.u64; input = input_u64; - output = output_u64; + output = &output_u64[1]; } else if (size == sizeof(uint32_t)) { num = global.num_default.u32; input = input_u32; - output = output_u32; + output = &output_u32[1]; } else if (size == sizeof(uint16_t)) { num = global.num_default.u16; input = input_u16; - output = output_u16; + output = &output_u16[1]; } else { num = global.num_default.u8; input = input_u8; - output = output_u8; + output = &output_u8[1]; } for (i = 0; i < burst; i++) { - input_u64[i] = MAGIC_U64; - input_u32[i] = MAGIC_U32; - input_u16[i] = MAGIC_U16; - input_u8[i] = MAGIC_U8; + input_u64[i] = VAL_U64; + input_u32[i] = VAL_U32; + input_u16[i] = VAL_U16; + input_u8[i] = VAL_U8; } odp_stash_param_init(¶m); @@ -427,21 +432,50 @@ static void stash_default_put(uint32_t size, int32_t burst) while (num_left) { memset(output, 0, burst * size); + /* Init first and last array element for under-/overflow checking */ + if (size == sizeof(uint64_t)) { + output_u64[0] = MAGIC_U64; + output_u64[burst + 1] = MAGIC_U64; + } else if (size == sizeof(uint32_t)) { + output_u32[0] = MAGIC_U32; + output_u32[burst + 1] = MAGIC_U32; + } else if (size == sizeof(uint16_t)) { + output_u16[0] = MAGIC_U16; + output_u16[burst + 1] = MAGIC_U16; + } else { + output_u8[0] = MAGIC_U8; + output_u8[burst + 1] = MAGIC_U8; + } + ret = odp_stash_get(stash, output, burst); CU_ASSERT_FATAL(ret >= 0); CU_ASSERT_FATAL(ret <= burst); + if (size == sizeof(uint64_t)) { + CU_ASSERT_FATAL(output_u64[0] == MAGIC_U64); + CU_ASSERT_FATAL(output_u64[burst + 1] == MAGIC_U64); + } else if (size == sizeof(uint32_t)) { + CU_ASSERT_FATAL(output_u32[0] == MAGIC_U32); + CU_ASSERT_FATAL(output_u32[burst + 1] == MAGIC_U32); + } else if (size == sizeof(uint16_t)) { + CU_ASSERT_FATAL(output_u16[0] == MAGIC_U16); + CU_ASSERT_FATAL(output_u16[burst + 1] == MAGIC_U16); + } else { + CU_ASSERT_FATAL(output_u8[0] == MAGIC_U8); + CU_ASSERT_FATAL(output_u8[burst + 1] == MAGIC_U8); + } + if (ret) { for (i = 0; i < ret; i++) { if (size == sizeof(uint64_t)) { /* CU_ASSERT needs brackets around it */ - CU_ASSERT(output_u64[i] == MAGIC_U64); + CU_ASSERT(output_u64[i + 1] == VAL_U64); } else if (size == sizeof(uint32_t)) { - CU_ASSERT(output_u32[i] == MAGIC_U32); + CU_ASSERT(output_u32[i + 1] == VAL_U32); } else if (size == sizeof(uint16_t)) { - CU_ASSERT(output_u16[i] == MAGIC_U16); + CU_ASSERT(output_u16[i + 1] == VAL_U16); } else { - CU_ASSERT(output_u8[i] == MAGIC_U8); + CU_ASSERT(output_u8[i + 1] == VAL_U8); } } @@ -468,30 +502,30 @@ static void stash_fifo_put(uint32_t size, int32_t burst) int32_t num; void *input, *output; uint64_t input_u64[burst]; - uint64_t output_u64[burst]; + uint64_t output_u64[burst + 2]; uint32_t input_u32[burst]; - uint32_t output_u32[burst]; + uint32_t output_u32[burst + 2]; uint16_t input_u16[burst]; - uint16_t output_u16[burst]; + uint16_t output_u16[burst + 2]; uint8_t input_u8[burst]; - uint8_t output_u8[burst]; + uint8_t output_u8[burst + 2]; if (size == sizeof(uint64_t)) { num = global.num_fifo.u64; input = input_u64; - output = output_u64; + output = &output_u64[1]; } else if (size == sizeof(uint32_t)) { num = global.num_fifo.u32; input = input_u32; - output = output_u32; + output = &output_u32[1]; } else if (size == sizeof(uint16_t)) { num = global.num_fifo.u16; input = input_u16; - output = output_u16; + output = &output_u16[1]; } else { num = global.num_fifo.u8; input = input_u8; - output = output_u8; + output = &output_u8[1]; } odp_stash_param_init(¶m); @@ -511,13 +545,13 @@ static void stash_fifo_put(uint32_t size, int32_t burst) while (num_left) { for (i = 0; i < burst; i++) { if (size == sizeof(uint64_t)) - input_u64[i] = MAGIC_U64 + num_left - i; + input_u64[i] = VAL_U64 + num_left - i; else if (size == sizeof(uint32_t)) - input_u32[i] = MAGIC_U32 + num_left - i; + input_u32[i] = VAL_U32 + num_left - i; else if (size == sizeof(uint16_t)) - input_u16[i] = MAGIC_U16 + num_left - i; + input_u16[i] = VAL_U16 + num_left - i; else - input_u8[i] = MAGIC_U8 + num_left - i; + input_u8[i] = VAL_U8 + num_left - i; } ret = odp_stash_put(stash, input, burst); @@ -538,28 +572,57 @@ static void stash_fifo_put(uint32_t size, int32_t burst) while (num_left) { memset(output, 0, burst * size); + /* Init first and last array element for under-/overflow checking */ + if (size == sizeof(uint64_t)) { + output_u64[0] = MAGIC_U64; + output_u64[burst + 1] = MAGIC_U64; + } else if (size == sizeof(uint32_t)) { + output_u32[0] = MAGIC_U32; + output_u32[burst + 1] = MAGIC_U32; + } else if (size == sizeof(uint16_t)) { + output_u16[0] = MAGIC_U16; + output_u16[burst + 1] = MAGIC_U16; + } else { + output_u8[0] = MAGIC_U8; + output_u8[burst + 1] = MAGIC_U8; + } + ret = odp_stash_get(stash, output, burst); CU_ASSERT_FATAL(ret >= 0); + if (size == sizeof(uint64_t)) { + CU_ASSERT_FATAL(output_u64[0] == MAGIC_U64); + CU_ASSERT_FATAL(output_u64[burst + 1] == MAGIC_U64); + } else if (size == sizeof(uint32_t)) { + CU_ASSERT_FATAL(output_u32[0] == MAGIC_U32); + CU_ASSERT_FATAL(output_u32[burst + 1] == MAGIC_U32); + } else if (size == sizeof(uint16_t)) { + CU_ASSERT_FATAL(output_u16[0] == MAGIC_U16); + CU_ASSERT_FATAL(output_u16[burst + 1] == MAGIC_U16); + } else { + CU_ASSERT_FATAL(output_u8[0] == MAGIC_U8); + CU_ASSERT_FATAL(output_u8[burst + 1] == MAGIC_U8); + } + if (ret) { CU_ASSERT_FATAL(ret <= burst); for (i = 0; i < ret; i++) { if (size == sizeof(uint64_t)) { - uint64_t val = MAGIC_U64 + num_left - i; + uint64_t val = VAL_U64 + num_left - i; - CU_ASSERT(output_u64[i] == val); + CU_ASSERT(output_u64[i + 1] == val); } else if (size == sizeof(uint32_t)) { - uint32_t val = MAGIC_U32 + num_left - i; + uint32_t val = VAL_U32 + num_left - i; - CU_ASSERT(output_u32[i] == val); + CU_ASSERT(output_u32[i + 1] == val); } else if (size == sizeof(uint16_t)) { - uint16_t val = MAGIC_U16 + num_left - i; + uint16_t val = VAL_U16 + num_left - i; - CU_ASSERT(output_u16[i] == val); + CU_ASSERT(output_u16[i + 1] == val); } else { - uint8_t val = MAGIC_U8 + num_left - i; + uint8_t val = VAL_U8 + num_left - i; - CU_ASSERT(output_u8[i] == val); + CU_ASSERT(output_u8[i + 1] == val); } } |