mirror of
https://gitee.com/openharmony/arkcompiler_runtime_core
synced 2024-11-24 07:10:22 +00:00
Add TDD test cases
Add TDD test cases to verify code correctness. Issue: I6375E Test: device/host ut, ark standalone build Signed-off-by: songqi <songqi32@huawei.com> Change-Id: If2d4d91c50e7a4481ddf10a7f38b11343acb1483
This commit is contained in:
parent
c42a3a8d5f
commit
2d7f29f8e1
@ -39,6 +39,14 @@ host_unittest_action("LibPandaBaseTest") {
|
|||||||
"utf_test.cpp",
|
"utf_test.cpp",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (!is_mingw && !is_mac && target_os != "ios") {
|
||||||
|
sources += [
|
||||||
|
"genmc/mutex_test_2.cpp",
|
||||||
|
"unix_file_test.cpp",
|
||||||
|
"unix_native_stack_test.cpp",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
configs = [
|
configs = [
|
||||||
"$ark_root:ark_config",
|
"$ark_root:ark_config",
|
||||||
"$ark_root/libpandabase:arkbase_public_config",
|
"$ark_root/libpandabase:arkbase_public_config",
|
||||||
|
@ -82,20 +82,17 @@ HWTEST_F(BaseMemStatsTest, HeapAllocateTest, testing::ext::TestSize.Level0)
|
|||||||
stats.RecordAllocateRaw(1U, SpaceType::SPACE_TYPE_CODE);
|
stats.RecordAllocateRaw(1U, SpaceType::SPACE_TYPE_CODE);
|
||||||
ASSERT_EQ(stats.GetAllocated(SpaceType::SPACE_TYPE_CODE), 1U);
|
ASSERT_EQ(stats.GetAllocated(SpaceType::SPACE_TYPE_CODE), 1U);
|
||||||
|
|
||||||
stats.RecordAllocateRaw(2U, SpaceType::SPACE_TYPE_OBJECT);
|
stats.RecordAllocateRaw(2U, SpaceType::SPACE_TYPE_INTERNAL);
|
||||||
ASSERT_EQ(stats.GetAllocated(SpaceType::SPACE_TYPE_OBJECT), 2U);
|
ASSERT_EQ(stats.GetAllocated(SpaceType::SPACE_TYPE_INTERNAL), 2U);
|
||||||
|
|
||||||
stats.RecordAllocateRaw(3U, SpaceType::SPACE_TYPE_HUMONGOUS_OBJECT);
|
|
||||||
ASSERT_EQ(stats.GetAllocated(SpaceType::SPACE_TYPE_HUMONGOUS_OBJECT), 3U);
|
|
||||||
|
|
||||||
stats.RecordFreeRaw(4U, SpaceType::SPACE_TYPE_CODE);
|
stats.RecordFreeRaw(4U, SpaceType::SPACE_TYPE_CODE);
|
||||||
ASSERT_EQ(stats.GetFreed(SpaceType::SPACE_TYPE_CODE), 4U);
|
ASSERT_EQ(stats.GetFreed(SpaceType::SPACE_TYPE_CODE), 4U);
|
||||||
|
|
||||||
stats.RecordFreeRaw(5U, SpaceType::SPACE_TYPE_OBJECT);
|
stats.RecordFreeRaw(5U, SpaceType::SPACE_TYPE_INTERNAL);
|
||||||
ASSERT_EQ(stats.GetFreed(SpaceType::SPACE_TYPE_OBJECT), 5U);
|
ASSERT_EQ(stats.GetFreed(SpaceType::SPACE_TYPE_INTERNAL), 5U);
|
||||||
|
|
||||||
ASSERT_EQ(5U, stats.GetAllocatedHeap());
|
ASSERT_EQ(0U, stats.GetAllocatedHeap());
|
||||||
ASSERT_EQ(5U, stats.GetFreedHeap());
|
ASSERT_EQ(0U, stats.GetFreedHeap());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace panda
|
} // namespace panda
|
||||||
|
@ -13,17 +13,21 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <pthread.h>
|
#pragma clang diagnostic ignored "-Wc11-extensions"
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#define MC_ON
|
#define MC_ON
|
||||||
#include "../../../platforms/unix/libpandabase/futex/fmutex.cpp"
|
#include "../../../platforms/unix/libpandabase/futex/fmutex.cpp"
|
||||||
|
|
||||||
// The tests checks mutex try lock
|
|
||||||
|
|
||||||
pthread_t pthread_self(void);
|
pthread_t pthread_self(void);
|
||||||
// Copy of mutex storage, after complete implementation should totally replace mutex::current_tid
|
// Copy of mutex storage, after complete implementation should totally replace mutex::current_tid
|
||||||
thread_local pthread_t current_tid;
|
thread_local pthread_t current_tid;
|
||||||
|
|
||||||
|
namespace panda::test {
|
||||||
static struct fmutex g_x;
|
static struct fmutex g_x;
|
||||||
static int g_shared;
|
static int g_shared;
|
||||||
|
|
||||||
@ -35,19 +39,29 @@ static void *ThreadN(void *arg)
|
|||||||
do {
|
do {
|
||||||
ret = MutexLock(&g_x, true);
|
ret = MutexLock(&g_x, true);
|
||||||
} while (!ret);
|
} while (!ret);
|
||||||
|
EXPECT_EQ(g_x.recursiveCount, 1);
|
||||||
|
|
||||||
g_shared = index;
|
g_shared = index;
|
||||||
int r = g_shared;
|
int r = g_shared;
|
||||||
ASSERT(r == index);
|
EXPECT_TRUE(r == index);
|
||||||
|
|
||||||
MutexUnlock(&g_x);
|
MutexUnlock(&g_x);
|
||||||
|
EXPECT_EQ(g_x.recursiveCount, 0);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
HWTEST(FMutexTest, TryLockTest, testing::ext::TestSize.Level0)
|
||||||
{
|
{
|
||||||
|
// The tests check mutex try lock
|
||||||
constexpr int N = 2;
|
constexpr int N = 2;
|
||||||
MutexInit(&g_x);
|
|
||||||
pthread_t t[N];
|
|
||||||
|
|
||||||
|
MutexInit(&g_x);
|
||||||
|
ASSERT_EQ(g_x.recursiveCount, 0);
|
||||||
|
ASSERT_EQ(g_x.state_and_waiters_, 0);
|
||||||
|
ASSERT_EQ(g_x.exclusive_owner_, 0U);
|
||||||
|
ASSERT_FALSE(g_x.recursive_mutex_);
|
||||||
|
|
||||||
|
pthread_t t[N];
|
||||||
for (long i = 0u; i < N; i++) {
|
for (long i = 0u; i < N; i++) {
|
||||||
pthread_create(&t[i], nullptr, ThreadN, reinterpret_cast<void *>(i));
|
pthread_create(&t[i], nullptr, ThreadN, reinterpret_cast<void *>(i));
|
||||||
}
|
}
|
||||||
@ -56,6 +70,10 @@ int main()
|
|||||||
pthread_join(t[i], nullptr);
|
pthread_join(t[i], nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASSERT_TRUE(MutexTryLockWithSpinning(&g_x));
|
||||||
|
|
||||||
MutexDestroy(&g_x);
|
MutexDestroy(&g_x);
|
||||||
return 0;
|
ASSERT_FALSE(MutexDoNotCheckOnDeadlock());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
41
libpandabase/tests/unix_file_test.cpp
Normal file
41
libpandabase/tests/unix_file_test.cpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Huawei Device Co., Ltd.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include "libpandabase/os/file.h"
|
||||||
|
|
||||||
|
namespace panda::test {
|
||||||
|
|
||||||
|
HWTEST(UnixFileTest, OpenAndGetFlagsTest, testing::ext::TestSize.Level0)
|
||||||
|
{
|
||||||
|
remove("./test_openfile.txt");
|
||||||
|
os::file::File file1 = os::file::Open("./test_openfile.txt", os::file::Mode::READONLY);
|
||||||
|
ASSERT_FALSE(file1.IsValid());
|
||||||
|
remove("./test_openfile.txt");
|
||||||
|
os::file::File file2 = os::file::Open("./test_openfile.txt", os::file::Mode::READWRITE);
|
||||||
|
ASSERT_FALSE(file2.IsValid());
|
||||||
|
remove("./test_openfile.txt");
|
||||||
|
os::file::File file3 = os::file::Open("./test_openfile.txt", os::file::Mode::WRITEONLY);
|
||||||
|
ASSERT_TRUE(file3.IsValid());
|
||||||
|
remove("./test_openfile.txt");
|
||||||
|
os::file::File file4 = os::file::Open("./test_openfile.txt", os::file::Mode::READWRITECREATE);
|
||||||
|
ASSERT_TRUE(file4.IsValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace panda::test
|
45
libpandabase/tests/unix_native_stack_test.cpp
Normal file
45
libpandabase/tests/unix_native_stack_test.cpp
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Huawei Device Co., Ltd.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include "libpandabase/os/native_stack.h"
|
||||||
|
|
||||||
|
namespace panda::test {
|
||||||
|
|
||||||
|
HWTEST(NativeStackTest, ReadAndWriteFileTest, testing::ext::TestSize.Level0)
|
||||||
|
{
|
||||||
|
remove("./test_native_stack.txt");
|
||||||
|
|
||||||
|
int fd = open("./test_native_stack.txt", O_WRONLY|O_APPEND|O_CREAT, 0777);
|
||||||
|
ASSERT_NE(fd, -1);
|
||||||
|
|
||||||
|
char buff[1024] = "abcdefg";
|
||||||
|
ASSERT_TRUE(os::native_stack::WriterOsFile(reinterpret_cast<void *>(buff), static_cast<size_t>(strlen(buff)), fd));
|
||||||
|
|
||||||
|
std::string result = "";
|
||||||
|
ASSERT_TRUE(os::native_stack::ReadOsFile("./test_native_stack.txt", &result));
|
||||||
|
|
||||||
|
ASSERT_EQ(result, "abcdefg");
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace panda::test
|
@ -409,20 +409,23 @@ HWTEST(Utf, IsValidModifiedUTF8, testing::ext::TestSize.Level0)
|
|||||||
const std::vector<uint8_t> v1 {0x31, 0x00};
|
const std::vector<uint8_t> v1 {0x31, 0x00};
|
||||||
EXPECT_TRUE(IsValidModifiedUTF8(v1.data()));
|
EXPECT_TRUE(IsValidModifiedUTF8(v1.data()));
|
||||||
|
|
||||||
const std::vector<uint8_t> v2 {0x9f};
|
const std::vector<uint8_t> v2 {0x9f, 0x00};
|
||||||
EXPECT_FALSE(IsValidModifiedUTF8(v2.data()));
|
EXPECT_FALSE(IsValidModifiedUTF8(v2.data()));
|
||||||
|
|
||||||
const std::vector<uint8_t> v3 {0xf7};
|
const std::vector<uint8_t> v3 {0xf7, 0x00};
|
||||||
EXPECT_FALSE(IsValidModifiedUTF8(v3.data()));
|
EXPECT_FALSE(IsValidModifiedUTF8(v3.data()));
|
||||||
|
|
||||||
const std::vector<uint8_t> v4 {0xe0};
|
const std::vector<uint8_t> v4 {0xe0, 0x00};
|
||||||
EXPECT_FALSE(IsValidModifiedUTF8(v4.data()));
|
EXPECT_FALSE(IsValidModifiedUTF8(v4.data()));
|
||||||
|
|
||||||
const std::vector<uint8_t> v5 {0xd4};
|
const std::vector<uint8_t> v5 {0xd4, 0x00};
|
||||||
EXPECT_FALSE(IsValidModifiedUTF8(v5.data()));
|
EXPECT_FALSE(IsValidModifiedUTF8(v5.data()));
|
||||||
|
|
||||||
const std::vector<uint8_t> v6 {0x11, 0x31, 0x00};
|
const std::vector<uint8_t> v6 {0x11, 0x31, 0x00};
|
||||||
EXPECT_TRUE(IsValidModifiedUTF8(v6.data()));
|
EXPECT_TRUE(IsValidModifiedUTF8(v6.data()));
|
||||||
|
|
||||||
|
const std::vector<uint8_t> v7 {0xf8, 0x00};
|
||||||
|
EXPECT_FALSE(IsValidModifiedUTF8(v7.data()));
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST(Utf, ConvertMUtf8ToUtf16Pair, testing::ext::TestSize.Level0)
|
HWTEST(Utf, ConvertMUtf8ToUtf16Pair, testing::ext::TestSize.Level0)
|
||||||
|
Loading…
Reference in New Issue
Block a user