From 99d96b76cb3bedaa4aaedcaa34929f9e7f6ead1e Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Fri, 30 Oct 2020 21:19:30 -0700 Subject: [PATCH] util: Break up some unit tests in the m5 utility. Some unit tests for the inst and semi call types in the m5 utility were too big and testing multiple scenarioes. This change breaks them up into individual tests, like in the addr call type unit test. Change-Id: I764d9edfbe4f6bdcc5907173247f7511c68aa1d0 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36855 Reviewed-by: Daniel Carvalho Maintainer: Bobby R. Bruce Tested-by: kokoro --- util/m5/src/call_type/inst.test.cc | 24 +++++++++-- util/m5/src/call_type/semi.test.cc | 68 ++++++++++++++++++------------ 2 files changed, 62 insertions(+), 30 deletions(-) diff --git a/util/m5/src/call_type/inst.test.cc b/util/m5/src/call_type/inst.test.cc index be87b0ba3..292eea95c 100644 --- a/util/m5/src/call_type/inst.test.cc +++ b/util/m5/src/call_type/inst.test.cc @@ -58,24 +58,34 @@ class DefaultCallType : public CallType DefaultCallType defaultCallType; -TEST(InstCallType, Detect) +class InstCallTypeTest : public testing::Test { - CallType *ct; + protected: + CallType *ct = nullptr; +}; +TEST_F(InstCallTypeTest, EmptyArgs) +{ // Inst should not be selected if there are no arguments. Args empty({}); defaultCallType.init_called = false; ct = CallType::detect(empty); EXPECT_EQ(ct, &defaultCallType); EXPECT_TRUE(defaultCallType.init_called); +} +TEST_F(InstCallTypeTest, NotAnyArg) +{ // Inst should not be selected if --inst isn't the first argument. Args one_arg({"one"}); defaultCallType.init_called = false; ct = CallType::detect(one_arg); EXPECT_EQ(ct, &defaultCallType); EXPECT_TRUE(defaultCallType.init_called); +} +TEST_F(InstCallTypeTest, FirstArg) +{ // Inst should be selected if --inst is the first argument. Args selected({"--inst"}); defaultCallType.init_called = false; @@ -83,14 +93,20 @@ TEST(InstCallType, Detect) EXPECT_NE(ct, &defaultCallType); EXPECT_NE(ct, nullptr); EXPECT_FALSE(defaultCallType.init_called); +} +TEST_F(InstCallTypeTest, ExtraArg) +{ Args extra({"--inst", "foo"}); defaultCallType.init_called = false; ct = CallType::detect(extra); EXPECT_NE(ct, &defaultCallType); EXPECT_NE(ct, nullptr); EXPECT_FALSE(defaultCallType.init_called); +} +TEST_F(InstCallTypeTest, NotFirstArg) +{ // Inst should not be selected if --inst isn't first. Args not_first({"foo", "--inst"}); defaultCallType.init_called = false; @@ -103,7 +119,7 @@ sigjmp_buf interceptEnv; siginfo_t interceptSiginfo; void -sigill_handler(int sig, siginfo_t *info, void *ucontext) +sigillHandler(int sig, siginfo_t *info, void *ucontext) { std::memcpy(&interceptSiginfo, info, sizeof(interceptSiginfo)); siglongjmp(interceptEnv, 1); @@ -138,7 +154,7 @@ TEST(InstCallType, Sum) struct sigaction sigill_action; std::memset(&sigill_action, 0, sizeof(sigill_action)); - sigill_action.sa_sigaction = &sigill_handler; + sigill_action.sa_sigaction = &sigillHandler; sigill_action.sa_flags = SA_SIGINFO | SA_RESETHAND; struct sigaction old_sigill_action; diff --git a/util/m5/src/call_type/semi.test.cc b/util/m5/src/call_type/semi.test.cc index 6c17a06eb..72fded3c2 100644 --- a/util/m5/src/call_type/semi.test.cc +++ b/util/m5/src/call_type/semi.test.cc @@ -54,57 +54,73 @@ class DefaultCallType : public CallType const DispatchTable &getDispatch() const override { return dt; } }; -DefaultCallType default_call_type; +DefaultCallType defaultCallType; -TEST(SemiCallType, Detect) +class SemiCallTypeTest : public testing::Test { - CallType *ct; + protected: + CallType *ct = nullptr; +}; +TEST_F(SemiCallTypeTest, EmptyArgs) +{ // Semi should not be selected if there are no arguments. Args empty({}); - default_call_type.init_called = false; + defaultCallType.init_called = false; ct = CallType::detect(empty); - EXPECT_EQ(ct, &default_call_type); - EXPECT_TRUE(default_call_type.init_called); + EXPECT_EQ(ct, &defaultCallType); + EXPECT_TRUE(defaultCallType.init_called); +} +TEST_F(SemiCallTypeTest, NotAnyArg) +{ // Inst should not be selected if --semi isn't the first argument. Args one_arg({"one"}); - default_call_type.init_called = false; + defaultCallType.init_called = false; ct = CallType::detect(one_arg); - EXPECT_EQ(ct, &default_call_type); - EXPECT_TRUE(default_call_type.init_called); + EXPECT_EQ(ct, &defaultCallType); + EXPECT_TRUE(defaultCallType.init_called); +} +TEST_F(SemiCallTypeTest, FirstArg) +{ // Semi should be selected if --semi is the first argument. Args selected({"--semi"}); - default_call_type.init_called = false; + defaultCallType.init_called = false; ct = CallType::detect(selected); - EXPECT_NE(ct, &default_call_type); + EXPECT_NE(ct, &defaultCallType); EXPECT_NE(ct, nullptr); - EXPECT_FALSE(default_call_type.init_called); + EXPECT_FALSE(defaultCallType.init_called); +} +TEST_F(SemiCallTypeTest, ExtraArg) +{ Args extra({"--semi", "foo"}); - default_call_type.init_called = false; + defaultCallType.init_called = false; ct = CallType::detect(extra); - EXPECT_NE(ct, &default_call_type); + EXPECT_NE(ct, &defaultCallType); EXPECT_NE(ct, nullptr); - EXPECT_FALSE(default_call_type.init_called); + EXPECT_FALSE(defaultCallType.init_called); +} +TEST_F(SemiCallTypeTest, NotFirstArg) +{ // Semi should not be selected if --semi isn't first. Args not_first({"foo", "--semi"}); - default_call_type.init_called = false; + defaultCallType.init_called = false; ct = CallType::detect(not_first); - EXPECT_EQ(ct, &default_call_type); - EXPECT_TRUE(default_call_type.init_called); + EXPECT_EQ(ct, &defaultCallType); + EXPECT_TRUE(defaultCallType.init_called); } -sigjmp_buf intercept_env; -siginfo_t intercept_siginfo; +sigjmp_buf interceptEnv; +siginfo_t interceptSiginfo; void -sigill_handler(int sig, siginfo_t *info, void *ucontext) +sigillHandler(int sig, siginfo_t *info, void *ucontext) { - std::memcpy(&intercept_siginfo, info, sizeof(intercept_siginfo)); - siglongjmp(intercept_env, 1); + std::memcpy(&interceptSiginfo, info, sizeof(interceptSiginfo)); + siglongjmp(interceptEnv, 1); } TEST(SemiCallType, Sum) @@ -136,14 +152,14 @@ TEST(SemiCallType, Sum) struct sigaction sigill_action; std::memset(&sigill_action, 0, sizeof(sigill_action)); - sigill_action.sa_sigaction = &sigill_handler; + sigill_action.sa_sigaction = &sigillHandler; sigill_action.sa_flags = SA_SIGINFO | SA_RESETHAND; struct sigaction old_sigill_action; sigaction(SIGILL, &sigill_action, &old_sigill_action); - if (!sigsetjmp(intercept_env, 1)) { + if (!sigsetjmp(interceptEnv, 1)) { (*dt.m5_sum)(2, 2, 0, 0, 0, 0); sigaction(SIGILL, &old_sigill_action, nullptr); ADD_FAILURE() << "Didn't die when attempting to run \"sum\"."; @@ -151,7 +167,7 @@ TEST(SemiCallType, Sum) } // Back from siglongjump. - auto &info = intercept_siginfo; + auto &info = interceptSiginfo; EXPECT_EQ(info.si_signo, SIGILL); EXPECT_TRUE(info.si_code == ILL_ILLOPC || info.si_code == ILL_ILLOPN); -- 2.30.2