From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 20BCF740032 for ; Thu, 30 Nov 2023 02:46:28 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=B9rMyovuamls9v8uuQdsuS/M4fhfbEakVs9EgGW3tTo=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1701312387; v=1; b=dALLaoY2vUxXs5SnUE/zdmTtpmfkncngUjFobevtPxcz0uAvD/R8Ayjf55m0bVjGrejUL6B4 McH1JbJq+gHB/DvyymyQpdDueDSi+SkkZzVbE4pSbBtx+EXLqugRI7IWZOhsTFFb7tdTQupO7vI GUQuWrk4XlB9PUUuQ/5OqxQY= X-Received: by 127.0.0.2 with SMTP id 66I3YY7687511xWyp2rIeIBq; Wed, 29 Nov 2023 18:46:27 -0800 X-Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by mx.groups.io with SMTP id smtpd.web10.63603.1701312386996929105 for ; Wed, 29 Nov 2023 18:46:27 -0800 X-Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-40b4744d603so3550055e9.2 for ; Wed, 29 Nov 2023 18:46:26 -0800 (PST) X-Gm-Message-State: koigZ2oEMx9q8VmvNemzF7Ilx7686176AA= X-Google-Smtp-Source: AGHT+IG1L2D9ePfrt4UKQWPkqgPccwfeJEMmPULotv7wgODPKNrmxYjCFbjwCuD+UWGmerhdTkskkA== X-Received: by 2002:a05:600c:2a16:b0:40b:2b12:1463 with SMTP id w22-20020a05600c2a1600b0040b2b121463mr16156067wme.9.1701312384880; Wed, 29 Nov 2023 18:46:24 -0800 (PST) X-Received: from PC-PEDRO-ARCH.lan ([2001:8a0:7280:5801:9441:3dce:686c:bfc7]) by smtp.gmail.com with ESMTPSA id b19-20020a05600c4e1300b0040648217f4fsm3986232wmq.39.2023.11.29.18.46.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 18:46:22 -0800 (PST) From: "Pedro Falcato" To: devel@edk2.groups.io Cc: Savva Mitrofanov , Pedro Falcato , Liming Gao , Michael D Kinney , Zhiguang Liu Subject: [edk2-devel] [PATCH 2/2] MdePkg/Test: Add google tests for BaseLib Date: Thu, 30 Nov 2023 02:46:11 +0000 Message-ID: <20231130024611.67135-3-pedro.falcato@gmail.com> In-Reply-To: <20231130024611.67135-1-pedro.falcato@gmail.com> References: <20231130024611.67135-1-pedro.falcato@gmail.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,pedro.falcato@gmail.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=dALLaoY2; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io Add GoogleTestBaseLib, which contains gtest unit tests for BaseLib. For now, only add checksum tests for CRC32C and CRC16; these tests check for correctness on various inputs using precomputed hashes. Signed-off-by: Pedro Falcato Cc: Liming Gao Cc: Michael D Kinney Cc: Zhiguang Liu --- .../Library/BaseLib/GoogleTestBaseLib.inf | 31 +++++++++ .../Library/BaseLib/TestBaseLibMain.cpp | 23 +++++++ .../Library/BaseLib/TestCheckSum.cpp | 64 +++++++++++++++++++ .../SafeIntLibUintnIntnUnitTests64.cpp | 4 +- MdePkg/Test/MdePkgHostTest.dsc | 5 ++ 5 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 MdePkg/Test/GoogleTest/Library/BaseLib/GoogleTestBaseLib.inf create mode 100644 MdePkg/Test/GoogleTest/Library/BaseLib/TestBaseLibMain.cpp create mode 100644 MdePkg/Test/GoogleTest/Library/BaseLib/TestCheckSum.cpp diff --git a/MdePkg/Test/GoogleTest/Library/BaseLib/GoogleTestBaseLib.inf b/MdePkg/Test/GoogleTest/Library/BaseLib/GoogleTestBaseLib.inf new file mode 100644 index 000000000000..c859e5f86b9e --- /dev/null +++ b/MdePkg/Test/GoogleTest/Library/BaseLib/GoogleTestBaseLib.inf @@ -0,0 +1,31 @@ +## @file +# Host OS based Application that unit tests BaseLib using Google Test +# +# Copyright (c) 2023, Pedro Falcato. All rights reserved. +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = GoogleTestBaseLib + FILE_GUID = 34D8CBBA-2442-455F-8454-5B06B12A8B62 + MODULE_TYPE = HOST_APPLICATION + VERSION_STRING = 1.0 + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + TestCheckSum.cpp + TestBaseLibMain.cpp + +[Packages] + MdePkg/MdePkg.dec + UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec + +[LibraryClasses] + GoogleTestLib + BaseLib diff --git a/MdePkg/Test/GoogleTest/Library/BaseLib/TestBaseLibMain.cpp b/MdePkg/Test/GoogleTest/Library/BaseLib/TestBaseLibMain.cpp new file mode 100644 index 000000000000..1a9941492be6 --- /dev/null +++ b/MdePkg/Test/GoogleTest/Library/BaseLib/TestBaseLibMain.cpp @@ -0,0 +1,23 @@ +/** @file + Main routine for BaseLib google tests. + + Copyright (c) 2023 Pedro Falcato. All rights reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include + +// Note: Until we can --whole-archive libs, we're forced to include secondary files from the main one. +// Yuck. + +#include "TestCheckSum.cpp" + +int +main ( + int argc, + char *argv[] + ) +{ + testing::InitGoogleTest (&argc, argv); + return RUN_ALL_TESTS (); +} diff --git a/MdePkg/Test/GoogleTest/Library/BaseLib/TestCheckSum.cpp b/MdePkg/Test/GoogleTest/Library/BaseLib/TestCheckSum.cpp new file mode 100644 index 000000000000..fa97f11dfa9c --- /dev/null +++ b/MdePkg/Test/GoogleTest/Library/BaseLib/TestCheckSum.cpp @@ -0,0 +1,64 @@ +/** @file + Unit tests for BaseLib's checksum capabilities. + + Copyright (c) 2023 Pedro Falcato. All rights reserved
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +extern "C" { +#include +#include +} + +// Precomputed crc32c and crc16-ansi for "hello" (without the null byte) +constexpr STATIC UINT32 mHelloCrc32c = 0x9A71BB4C; +constexpr STATIC UINT16 mHelloCrc16 = 0x34F6; + +TEST (Crc32c, BasicCheck) { + // Note: The magic numbers below are precomputed checksums + // Check for basic operation on even and odd numbers of bytes + EXPECT_EQ (CalculateCrc32c ("hello", 5, 0), mHelloCrc32c); + EXPECT_EQ ( + CalculateCrc32c ("longlonglonglonglong", sizeof ("longlonglonglonglong") - 1, 0), + 0xC50F869D + ); + EXPECT_EQ (CalculateCrc32c ("h", 1, 0), 0xB96298FC); + + // Check if a checksum with no bytes correctly yields 0 + EXPECT_EQ (CalculateCrc32c ("", 0, 0), 0U); +} + +TEST (Crc32c, MultipartCheck) { + // Test multi-part crc32c calculation. So that given a string of bytes + // s[N], crc32c(s, N, 0) == crc32c(s[N - 1], 1, crc32c(s, N - 1, 0)) + // and all other sorts of combinations one might imagine. + UINT32 val; + + val = CalculateCrc32c ("hel", 3, 0); + EXPECT_EQ (CalculateCrc32c (&"hello"[3], 2, val), mHelloCrc32c); +} + +TEST (Crc16, BasicCheck) { + // Note: The magic numbers below are precomputed checksums + // Check for basic operation on even and odd numbers of bytes + EXPECT_EQ (CalculateCrc16Ansi ("hello", 5, CRC16ANSI_INIT), mHelloCrc16); + EXPECT_EQ ( + CalculateCrc16Ansi ("longlonglonglonglong", sizeof ("longlonglonglonglong") - 1, CRC16ANSI_INIT), + 0xF723 + ); + EXPECT_EQ (CalculateCrc16Ansi ("h", 1, CRC16ANSI_INIT), 0xAEBE); + + // Check if a checksum with no bytes correctly yields CRC16ANSI_INIT + EXPECT_EQ (CalculateCrc16Ansi ("", 0, CRC16ANSI_INIT), CRC16ANSI_INIT); +} + +TEST (Crc16, MultipartCheck) { + // Test multi-part crc16 calculation. So that given a string of bytes + // s[N], crc16(s, N, 0) == crc16(s[N - 1], 1, crc16(s, N - 1, 0)) + // and all other sorts of combinations one might imagine. + UINT16 val; + + val = CalculateCrc16Ansi ("hel", 3, CRC16ANSI_INIT); + EXPECT_EQ (CalculateCrc16Ansi (&"hello"[3], 2, val), mHelloCrc16); +} diff --git a/MdePkg/Test/GoogleTest/Library/BaseSafeIntLib/SafeIntLibUintnIntnUnitTests64.cpp b/MdePkg/Test/GoogleTest/Library/BaseSafeIntLib/SafeIntLibUintnIntnUnitTests64.cpp index 6efdd3be7c5e..9fc60c5c71f3 100644 --- a/MdePkg/Test/GoogleTest/Library/BaseSafeIntLib/SafeIntLibUintnIntnUnitTests64.cpp +++ b/MdePkg/Test/GoogleTest/Library/BaseSafeIntLib/SafeIntLibUintnIntnUnitTests64.cpp @@ -10,8 +10,8 @@ #include extern "C" { - #include - #include +#include +#include } TEST (ConversionTestSuite, TestSafeInt32ToUintn) { diff --git a/MdePkg/Test/MdePkgHostTest.dsc b/MdePkg/Test/MdePkgHostTest.dsc index b92b564d434a..583f8fc0ddd8 100644 --- a/MdePkg/Test/MdePkgHostTest.dsc +++ b/MdePkg/Test/MdePkgHostTest.dsc @@ -20,6 +20,7 @@ !include UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc [LibraryClasses] + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLibBase.inf @@ -31,6 +32,10 @@ MdePkg/Test/UnitTest/Library/BaseLib/BaseLibUnitTestsHost.inf MdePkg/Test/GoogleTest/Library/BaseSafeIntLib/GoogleTestBaseSafeIntLib.inf MdePkg/Test/UnitTest/Library/DevicePathLib/TestDevicePathLibHost.inf + # + # BaseLib tests + # + MdePkg/Test/GoogleTest/Library/BaseLib/GoogleTestBaseLib.inf # # Build HOST_APPLICATION Libraries -- 2.43.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111885): https://edk2.groups.io/g/devel/message/111885 Mute This Topic: https://groups.io/mt/102886794/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-