diff --git a/.github/workflows/action_utest.yml b/.github/workflows/action_utest.yml index 94f4245d4d..eb85038c60 100644 --- a/.github/workflows/action_utest.yml +++ b/.github/workflows/action_utest.yml @@ -35,6 +35,7 @@ jobs: - {UTEST: "kernel/timer", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", CONFIG_FILE: "kernel/timer.conf", SD_FILE: "sd.bin"} - {UTEST: "kernel/thread", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", CONFIG_FILE: "kernel/thread.conf", SD_FILE: "sd.bin"} - {UTEST: "components/utest", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", CONFIG_FILE: "utest_self/self.conf", SD_FILE: "sd.bin"} + - {UTEST: "components/cpp11", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", CONFIG_FILE: "cpp11/cpp11.conf", SD_FILE: "sd.bin"} - {UTEST: "kernel/mem/riscv64", RTT_BSP: "bsp/qemu-riscv-virt64", QEMU_ARCH: "riscv64", QEMU_MACHINE: "virt", CONFIG_FILE: "kernel/mem.conf", SD_FILE: "None"} env: TEST_QEMU_ARCH: ${{ matrix.legs.QEMU_ARCH }} @@ -68,6 +69,21 @@ jobs: /opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc --version echo "RTT_EXEC_PATH=/opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin" >> $GITHUB_ENV + - name: CPP11 Preprocessing Toolchain + if: ${{ matrix.legs.QEMU_ARCH == 'arm' && matrix.legs.UTEST == 'components/cpp11' && success() }} + shell: bash + run: | + # Delete the following files + sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/thread + sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/mutex + sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/condition_variable + sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/future + sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/pthread.h + # Clear the contents of the following files + sudo cat /dev/null > /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/sys/_pthreadtypes.h + # Clear -fno-exceptions in rtconfig.py + sed -i 's/-fno-exceptions/ /g' $TEST_BSP_ROOT/rtconfig.py + - name: Build BSP run: | echo CONFIG_RT_USING_UTESTCASES=y >> $TEST_BSP_ROOT/.config diff --git a/examples/utest/configs/cpp11/cpp11.conf b/examples/utest/configs/cpp11/cpp11.conf new file mode 100644 index 0000000000..1aa8f2e3b8 --- /dev/null +++ b/examples/utest/configs/cpp11/cpp11.conf @@ -0,0 +1,4 @@ +CONFIG_UTEST_CPP11_THREAD_TC=y +# dependencies +CONFIG_RT_USING_CPLUSPLUS=y +CONFIG_RT_USING_CPLUSPLUS11=y diff --git a/examples/utest/testcases/Kconfig b/examples/utest/testcases/Kconfig index 5dc1c6c420..e813a5fcc1 100644 --- a/examples/utest/testcases/Kconfig +++ b/examples/utest/testcases/Kconfig @@ -9,6 +9,7 @@ if RT_USING_UTESTCASES source "$RTT_DIR/examples/utest/testcases/utest/Kconfig" source "$RTT_DIR/examples/utest/testcases/kernel/Kconfig" +source "$RTT_DIR/examples/utest/testcases/cpp11/Kconfig" source "$RTT_DIR/examples/utest/testcases/drivers/serial_v2/Kconfig" endif diff --git a/examples/utest/testcases/cpp11/Kconfig b/examples/utest/testcases/cpp11/Kconfig new file mode 100644 index 0000000000..1d08163d13 --- /dev/null +++ b/examples/utest/testcases/cpp11/Kconfig @@ -0,0 +1,7 @@ +menu "CPP11 Testcase" + +config UTEST_CPP11_THREAD_TC + bool "Cpp11 thread test" + default n + +endmenu diff --git a/examples/utest/testcases/cpp11/SConscript b/examples/utest/testcases/cpp11/SConscript new file mode 100644 index 0000000000..cf92d755b0 --- /dev/null +++ b/examples/utest/testcases/cpp11/SConscript @@ -0,0 +1,13 @@ +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Split(''' +thread_tc.cpp +''') + +CPPPATH = [cwd] + +group = DefineGroup('utestcases', src, depend = ['UTEST_CPP11_THREAD_TC'], CPPPATH = CPPPATH) + +Return('group') diff --git a/examples/utest/testcases/cpp11/thread_tc.cpp b/examples/utest/testcases/cpp11/thread_tc.cpp new file mode 100644 index 0000000000..751540937a --- /dev/null +++ b/examples/utest/testcases/cpp11/thread_tc.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2006-2019, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-09-03 liukang the first version + */ + +#include +#include "utest.h" +#include + +static void test_thread(void) +{ + int count = 0; + auto func = [&]() mutable + { + for (int i = 0; i < 100; ++i) + { + ++count; + } + }; + + std::thread t1(func); + t1.join(); + + if (count != 100) + { + uassert_false(1); + } + + uassert_true(1); +} + +static rt_err_t utest_tc_init(void) +{ + return RT_EOK; +} + +static rt_err_t utest_tc_cleanup(void) +{ + return RT_EOK; +} + +static void testcase(void) +{ + UTEST_UNIT_RUN(test_thread); +} +UTEST_TC_EXPORT(testcase, "testcases.cpp11.thread_tc", utest_tc_init, utest_tc_cleanup, 10);