GitHub Actions を使用して、プッシュ時、プルリクエスト作成時にライブラリのコードを自動的に検証します。
この検証を行うことで、ライブラリ追加時にコンパイルエラーになったり、バグが生じることを大幅に減らせます。
テストコードのビルドに失敗、もしくは終了コードが 0 以外の場合、検証が失敗します。
検証の状態は Action タブ から確認できます。ワークフローは
UdonLibrary/.github/workflows/に定義されています。またのメインページの README に貼られているバッジから見ることもできます(反映に少し時間がかかります)。
検証が成功している場合
passingと表示され、失敗しているとfailingと表示されます。
arduino cli を使用してコンパイルできるか検証します。
このテストでは構文のチェックを行うだけで、アルゴリズムのチェックは行いません。コンパイル時に処理可能なアルゴリズムはテストされます。
検証されるボードは Arduino Nano Uno UnoMini Raspberry Pi Pico PicoW Teensy3.5 3.6 4.0 4.1 です。
UdonLibrary/test/ArduinoLint/src 下にディレクトリを作成するだけでよいです。
Arduino の仕様で
srcディレクトリ内のソースファイルは再帰的にコンパイルされるため、srcディレクトリ下に配置したファイルは全て検証されます。
UdonLibrary/test/ArduinoLint/src/Sample に .cpp ファイルを作成します。
testという関数は他のテストファイルにも存在しているため、static関数にし内部リンケージを持たせています。
コンパイル時に値が決定する関数、定数は static_assert(定数式, 文字列リテラル) を使用してテストできます。
static_assertは定数式がfalseであるときにコンパイルエラーになります。
本テストのワークフローは UdonLibrary/.github/workflows/ArduinoLint.yml に定義されています。
このファイルにある matrix: bord: に fqbn を調べ追記することでボードを追加できます。
arduino-cli のインストールがされている場合、以下コマンドで調べられます。
プラットフォームを追加するには (プラットフォームを追加するとfqbnが上記のコマンドで表示されるようになります)
URL プラットフォームをから追加するには
UdonLibrary/test/ArduinoLint/ArduinoLint.ino を ArduinoIDE で開き、検証ボタンを押すことで、プッシュせずにテストを実行できます。
GoogleTest を使用してアルゴリズムの検証を行います。
UdonLibrary/test/UnitTest 下にディレクトリを配置します。
GoogleTest は CMake を使用してビルドを行います。そのためビルドしたいファイル、ディレクトリを CMakeLists.txt に登録する必要があります。
ディレクトリを追加する場合、追加した親ディレクトリ内の CMakeLists.txt に add_subdirectory を使用してディレクトリを登録します。
UdonLibrary/test/UnitTest にディレクトリを追加し、 .cpp ファイルを追加します。
ソースファイルを追加する場合、追加したディレクトリ内の CMakeLists.txt に add_executable を使用してソースファイルを登録します。
加えて GoogleTest とのリンク設定、本ライブラリのインクルードパス設定を行います。
${UDON_LIBRARY_DIR}は実行マシンから見たUdonLibrary/srcの絶対パス名でUdonLibrary/test/UnitTest/CMakeLists.txt内で定義されます。
追加したソースファイルにテストコードを記述します。テストコードの書き方は GoogleTest ドキュメント を参照してください。
EXPECT_EQ(val1, val2)はval1 == val2であるかを検証します。
UdonLibrary/test/UnitTest で以下のコマンドを実行することで、プッシュせずにローカルで実行できます。
CMake のインストールをあらかじめ済ませておく必要があります。
# Windowswinget install -e --id Kitware.CMake# MacOS Linuxbrew install cmake# Linuxsudo apt update && sudo apt install cmake
GoogleTest はサブモジュールとして追加されているため、本ライブラリを
--recursiveオプションを付けずクローンした場合追加されません。サブモジュールをクローンするには次のコマンドを実行します。git submodule update --init --recursive