Browse Source

[utestcases] add cpp11 base testcase.

guozhanxin 3 years ago
parent
commit
1404186602

+ 16 - 0
.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

+ 4 - 0
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

+ 1 - 0
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

+ 7 - 0
examples/utest/testcases/cpp11/Kconfig

@@ -0,0 +1,7 @@
+menu "CPP11 Testcase"
+
+config UTEST_CPP11_THREAD_TC
+    bool "Cpp11 thread test"
+    default n
+
+endmenu

+ 13 - 0
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')

+ 51 - 0
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 <rtthread.h>
+#include "utest.h"
+#include <thread>
+
+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);