Skip to content

bridgestan tests

bridgestan tests #703

Workflow file for this run

name: bridgestan tests
on:
push:
branches:
- "main"
pull_request:
workflow_dispatch: {}
env:
CACHE_VERSION: 0
# only run one copy per PR
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build:
runs-on: ${{matrix.os}}
strategy:
fail-fast: false
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Check out github
uses: actions/checkout@v4
with:
submodules: recursive
- name: Stan build caching
uses: actions/cache@v4
id: stan-cache
with:
path: ./stan/
key: ${{ runner.os }}-stan-${{ hashFiles('stan/src/stan/version.hpp') }}-v${{ env.CACHE_VERSION }}
- name: Set up PATH for C example
if: matrix.os == 'windows-latest'
run: |
Add-Content $env:GITHUB_PATH "$(pwd)/stan/lib/stan_math/lib/tbb"
Add-Content $env:GITHUB_PATH "$(pwd)/test_models/full"
- name: Build C example (Windows)
if: matrix.os == 'windows-latest'
run: |
cd c-example/
make -j4 example.exe example_runtime.exe
rm ../src/bridgestan.o
echo "Dynamically linked example"
./example.exe
echo "Runtime loading example"
./example_runtime.exe ../test_models/full/full_model.so
- name: Build C example (Unix)
if: matrix.os != 'windows-latest'
run: |
cd c-example/
make -j4 example example_static example_runtime
rm ../src/bridgestan.o ../test_models/full/*.a
echo "Dynamically linked example"
./example
echo "Statically linked example"
./example_static
echo "Runtime loading example"
./example_runtime ../test_models/full/full_model.so
shell: bash
# we use the cache here to build the Stan models once for multiple interfaces
- name: Set up test model cache
uses: actions/cache@v4
id: test-models
with:
path: ./test_models/
key: ${{ hashFiles('**/*.stan', 'src/*', 'stan/src/stan/version.hpp', 'Makefile') }}-${{ matrix.os }}-v${{ env.CACHE_VERSION }}
- name: Build test models
if: steps.test-models.outputs.cache-hit != 'true'
run: |
make STAN_THREADS=true O=0 test_models -j4
python:
needs: [build]
runs-on: ${{matrix.os}}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.9", "3.12"]
fail-fast: false
steps:
- name: Check out github
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Restore Stan
uses: actions/cache@v4
id: stan-cache
with:
path: ./stan/
key: ${{ runner.os }}-stan-${{ hashFiles('stan/src/stan/version.hpp') }}-v${{ env.CACHE_VERSION }}
- name: Restore built models
uses: actions/cache@v4
id: test-models
with:
path: ./test_models/
key: ${{ hashFiles('**/*.stan', 'src/*', 'stan/src/stan/version.hpp', 'Makefile') }}-${{ matrix.os }}-v${{ env.CACHE_VERSION }}
- name: Install package
run: |
cd python/
pip install pytest
pip install .
- name: Test import
run: |
python -c "import bridgestan"
- name: Run tests
run: |
pytest -v python/
cd python/
python example.py
env:
BRIDGESTAN: ${{ github.workspace }}
- name: Run tests (Unix-specific)
if: matrix.os != 'windows-latest'
run: |
pytest -v python/ --run-type=ad_hessian
env:
BRIDGESTAN: ${{ github.workspace }}
julia:
needs: [build]
runs-on: ${{matrix.os}}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
julia-version: ["1"]
include:
- julia-version: "1.6"
os: ubuntu-latest
fail-fast: false
steps:
- name: Check out github
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Julia
uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.julia-version }}
- name: Restore Stan
uses: actions/cache@v4
id: stan-cache
with:
path: ./stan/
key: ${{ runner.os }}-stan-${{ hashFiles('stan/src/stan/version.hpp') }}-v${{ env.CACHE_VERSION }}
- name: Restore built models
uses: actions/cache@v4
id: test-models
with:
path: ./test_models/
key: ${{ hashFiles('**/*.stan', 'src/*', 'stan/src/stan/version.hpp', 'Makefile') }}-${{ matrix.os }}-v${{ env.CACHE_VERSION }}
- name: Check import
run: |
cd julia/
julia --project=. -e "using Pkg; Pkg.instantiate()"
julia --project=. -e "using BridgeStan"
- name: Run tests
run: |
cd julia/
julia --project=. -t 2 -e "using Pkg; Pkg.test()"
julia --project=. example.jl
env:
BRIDGESTAN: ${{ github.workspace }}
Rlang:
needs: [build]
runs-on: ${{matrix.os}}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
fail-fast: false
steps:
- name: Check out github
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install R
uses: r-lib/actions/setup-r@v2.10.1
- name: Install R dependencies
uses: r-lib/actions/setup-r-dependencies@v2.10.1
with:
packages: |
any::R6
any::testthat
any::devtools
- name: Restore Stan
uses: actions/cache@v4
with:
path: ./stan/
key: ${{ runner.os }}-stan-${{ hashFiles('stan/src/stan/version.hpp') }}-v${{ env.CACHE_VERSION }}
- name: Restore built models
uses: actions/cache@v4
id: test-models
with:
path: ./test_models/
key: ${{ hashFiles('**/*.stan', 'src/*', 'stan/src/stan/version.hpp', 'Makefile') }}-${{ matrix.os }}-v${{ env.CACHE_VERSION }}
- name: Run tests
if: matrix.os != 'windows-latest'
run: |
cd R/tests/testthat
gcc -fpic -shared -o test_collisions.so test_collisions.c
cd ../..
Rscript -e "devtools::test(reporter = c(\"summary\", \"fail\"))"
Rscript -e "install.packages(getwd(), repos=NULL, type=\"source\")"
Rscript example.R
env:
BRIDGESTAN: ${{ github.workspace }}
- name: Run tests (windows)
if: matrix.os == 'windows-latest'
run: |
cd R/tests/testthat
gcc -fpic -shared -o test_collisions.dll test_collisions.c
if (!$LASTEXITCODE.Equals(0)) {exit $LASTEXITCODE}
cd ../..
Rscript -e 'devtools::test(reporter = c("summary", "fail"))'
if (!$LASTEXITCODE.Equals(0)) {exit $LASTEXITCODE}
Rscript -e 'install.packages(getwd(), repos=NULL, type="source")'
if (!$LASTEXITCODE.Equals(0)) {exit $LASTEXITCODE}
Rscript example.R
if (!$LASTEXITCODE.Equals(0)) {exit $LASTEXITCODE}
env:
BRIDGESTAN: ${{ github.workspace }}
rust:
needs: [build]
runs-on: ${{matrix.os}}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
fail-fast: false
steps:
- name: Check out github
uses: actions/checkout@v4
with:
submodules: recursive
- name: Restore Stan
uses: actions/cache@v4
with:
path: ./stan/
key: ${{ runner.os }}-stan-${{ hashFiles('stan/src/stan/version.hpp') }}-v${{ env.CACHE_VERSION }}
- name: Restore built models
uses: actions/cache@v4
id: test-models
with:
path: ./test_models/
key: ${{ hashFiles('**/*.stan', 'src/*', 'stan/src/stan/version.hpp', 'Makefile') }}-${{ matrix.os }}-v${{ env.CACHE_VERSION }}
- name: Set up TBB
if: matrix.os == 'windows-latest'
run: |
Add-Content $env:GITHUB_PATH "$(pwd)/stan/lib/stan_math/lib/tbb"
- name: Run rust tests
working-directory: ./rust
timeout-minutes: 60
run: |
cargo clippy
cargo fmt --check
cargo run --example=example
# run all tests with feature download-bridgestan-src
cargo test --verbose --all-features
cargo test --verbose model_compiling -- --ignored