From patchwork Wed Feb 25 04:08:32 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yerden Zhumabekov X-Patchwork-Id: 3699 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 139CB9AE7; Wed, 25 Feb 2015 05:08:09 +0100 (CET) Received: from mgw.gov.kz (mgw.gov.kz [89.218.88.242]) by dpdk.org (Postfix) with ESMTP id AF69D9AE0 for ; Wed, 25 Feb 2015 05:08:07 +0100 (CET) Received: from mgw.gov.kz (mx.ctsat.kz [178.89.4.95]) by mgw.gov.kz with ESMTP id t1P483qp009104-t1P483qq009104; Wed, 25 Feb 2015 10:08:03 +0600 Received: from EXCASHUB2.rgp.local (192.168.40.53) by EdgeForefront.rgp.local (192.168.40.59) with Microsoft SMTP Server (TLS) id 14.2.247.3; Wed, 25 Feb 2015 10:06:29 +0600 Received: from r220.rgp.local (192.168.59.10) by excashub2.rgp.local (192.168.40.48) with Microsoft SMTP Server (TLS) id 14.2.247.3; Wed, 25 Feb 2015 10:07:56 +0600 From: Yerden Zhumabekov To: Date: Wed, 25 Feb 2015 10:08:32 +0600 Message-ID: <1424837312-23029-1-git-send-email-e_zhumabekov@sts.kz> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1424781388-7485-1-git-send-email-e_zhumabekov@sts.kz> References: <1424781388-7485-1-git-send-email-e_zhumabekov@sts.kz> MIME-Version: 1.0 X-Originating-IP: [192.168.59.10] X-FEAS-SYSTEM-WL: e_zhumabekov@sts.kz Subject: [dpdk-dev] [PATCH v2] app/test: add crc32 algorithms equivalence check X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" New function test_crc32_hash_alg_equiv() checks whether software, 4-byte operand and 8-byte operand versions of CRC32 hash function implementations return the same result value. Signed-off-by: Yerden Zhumabekov Acked-by: Bruce Richardson --- app/test/test_hash.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/app/test/test_hash.c b/app/test/test_hash.c index 76b1b8f..3e94af1 100644 --- a/app/test/test_hash.c +++ b/app/test/test_hash.c @@ -177,6 +177,66 @@ static struct rte_hash_parameters ut_params = { .socket_id = 0, }; +#define CRC32_ITERATIONS (1U << 20) +#define CRC32_DWORDS (1U << 6) +/* + * Test if all CRC32 implementations yield the same hash value + */ +static int +test_crc32_hash_alg_equiv(void) +{ + uint32_t hash_val; + uint32_t init_val; + uint64_t data64[CRC32_DWORDS]; + unsigned i, j; + size_t data_len; + + printf("# CRC32 implementations equivalence test\n"); + for (i = 0; i < CRC32_ITERATIONS; i++) { + /* Randomizing data_len of data set */ + data_len = (size_t) ((rte_rand() % sizeof(data64)) + 1); + init_val = (uint32_t) rte_rand(); + + /* Fill the data set */ + for (j = 0; j < CRC32_DWORDS; j++) + data64[j] = rte_rand(); + + /* Calculate software CRC32 */ + rte_hash_crc_set_alg(CRC32_SW); + hash_val = rte_hash_crc(data64, data_len, init_val); + + /* Check against 4-byte-operand sse4.2 CRC32 if available */ + rte_hash_crc_set_alg(CRC32_SSE42); + if (hash_val != rte_hash_crc(data64, data_len, init_val)) { + printf("Failed checking CRC32_SW against CRC32_SSE42\n"); + break; + } + + /* Check against 8-byte-operand sse4.2 CRC32 if available */ + rte_hash_crc_set_alg(CRC32_SSE42_x64); + if (hash_val != rte_hash_crc(data64, data_len, init_val)) { + printf("Failed checking CRC32_SW against CRC32_SSE42_x64\n"); + break; + } + } + + /* Resetting to best available algorithm */ + rte_hash_crc_set_alg(CRC32_SSE42_x64); + + if (i == CRC32_ITERATIONS) + return 0; + + printf("Failed test data (hex):\n"); + + for (j = 0; j < data_len; j++) { + printf("%02X", ((uint8_t *)data64)[j]); + if ((j+1) % 16 == 0 || j == data_len - 1) + printf("\n"); + } + + return -1; +} + /* * Test a hash function. */ @@ -1356,6 +1416,9 @@ test_hash(void) run_hash_func_tests(); + if (test_crc32_hash_alg_equiv() < 0) + return -1; + return 0; }