name: tests
on:
push:
branches:
- "*"
pull_request:
env:
BLAKE3_CI: "1"
RUSTFLAGS: "-D warnings"
RUST_BACKTRACE: "1"
jobs:
library_tests:
name: ${{ matrix.target.name }} ${{ matrix.channel }}
runs-on: ${{ matrix.target.os }}
strategy:
fail-fast: false
matrix:
target: [
{ "os": "ubuntu-latest", "toolchain": "x86_64-unknown-linux-gnu", "name": "Linux GNU" },
{ "os": "macOS-latest", "toolchain": "x86_64-apple-darwin", "name": "macOS" },
{ "os": "windows-latest", "toolchain": "x86_64-pc-windows-msvc", "name": "Windows MSVC" },
{ "os": "windows-latest", "toolchain": "x86_64-pc-windows-gnu", "name": "Windows GNU" }
]
channel: [
"stable",
"beta",
"nightly",
"1.70.0",
]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ format('{0}-{1}', matrix.channel, matrix.target.toolchain) }}
- name: print compiler version
run: cargo run --quiet
working-directory: ./tools/compiler_version
- name: print instruction set support
run: cargo run --quiet
working-directory: ./tools/instruction_set_support
- run: cargo test --features=rayon,traits-preview,serde,zeroize
- name: "again with RAYON_NUM_THREADS=1"
run: cargo test --features=rayon,traits-preview,serde,zeroize
env:
RAYON_NUM_THREADS: 1
- run: cargo test --features=mmap
- run: cargo test --features=mmap,rayon,traits-preview,serde,zeroize
- run: cargo test --no-default-features
- run: cargo test --features=
- run: cargo test --features=prefer_intrinsics
- run: cargo test --features=pure
- run: cargo test --features= --release
- run: cargo test --features=prefer_intrinsics --release
- run: cargo test --features=pure --release
- run: cargo test --features=no_avx512
- run: cargo test --features=no_avx512,prefer_intrinsics
- run: cargo test --features=no_avx512,pure
- run: cargo test --features=no_avx512 --release
- run: cargo test --features=no_avx512,prefer_intrinsics --release
- run: cargo test --features=no_avx512,pure --release
- run: cargo test --features=no_avx512,no_avx2
- run: cargo test --features=no_avx512,no_avx2,prefer_intrinsics
- run: cargo test --features=no_avx512,no_avx2,pure
- run: cargo test --features=no_avx512,no_avx2 --release
- run: cargo test --features=no_avx512,no_avx2,prefer_intrinsics --release
- run: cargo test --features=no_avx512,no_avx2,pure --release
- run: cargo test --features=no_avx512,no_avx2,no_sse41
- run: cargo test --features=no_avx512,no_avx2,no_sse41,prefer_intrinsics
- run: cargo test --features=no_avx512,no_avx2,no_sse41,pure
- run: cargo test --features=no_avx512,no_avx2,no_sse41 --release
- run: cargo test --features=no_avx512,no_avx2,no_sse41,prefer_intrinsics --release
- run: cargo test --features=no_avx512,no_avx2,no_sse41,pure --release
- run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2
- run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2,prefer_intrinsics
- run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2,pure
- run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2 --release
- run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2,prefer_intrinsics --release
- run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2,pure --release
- run: cargo test --benches --features=rayon
env:
RUSTC_BOOTSTRAP: 1
- name: test vectors
run: cargo test
working-directory: ./test_vectors
- name: test vectors intrinsics
run: cargo test --features=prefer_intrinsics
working-directory: ./test_vectors
- name: test vectors pure
run: cargo test --features=pure
working-directory: ./test_vectors
- name: cargo test C bindings assembly
run: cargo test
working-directory: ./c/blake3_c_rust_bindings
- name: cargo test C bindings intrinsics
run: cargo test --features=prefer_intrinsics
working-directory: ./c/blake3_c_rust_bindings
- name: cargo test C bindings no AVX-512
run: cargo test
working-directory: ./c/blake3_c_rust_bindings
env:
CFLAGS: -DBLAKE3_NO_AVX512
- name: cargo test C bindings no AVX2
run: cargo test
working-directory: ./c/blake3_c_rust_bindings
env:
CFLAGS: -DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2
- name: cargo test C bindings no SSE41
run: cargo test
working-directory: ./c/blake3_c_rust_bindings
env:
CFLAGS: -DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_SSE41
- name: cargo test C bindings no SSE2
run: cargo test
working-directory: ./c/blake3_c_rust_bindings
env:
CFLAGS: -DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_SSE2
- name: reference impl doc test
run: cargo test
working-directory: ./reference_impl
b3sum_tests:
name: b3sum ${{ matrix.target.name }} ${{ matrix.channel }}
runs-on: ${{ matrix.target.os }}
strategy:
fail-fast: false
matrix:
target: [
{ "os": "ubuntu-latest", "toolchain": "x86_64-unknown-linux-gnu", "name": "Linux GNU" },
{ "os": "macOS-latest", "toolchain": "x86_64-apple-darwin", "name": "macOS" },
{ "os": "windows-latest", "toolchain": "x86_64-pc-windows-msvc", "name": "Windows MSVC" },
{ "os": "windows-latest", "toolchain": "x86_64-pc-windows-gnu", "name": "Windows GNU" }
]
channel: [
"stable",
"beta",
"nightly",
"1.74.1",
]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ format('{0}-{1}', matrix.channel, matrix.target.toolchain) }}
- name: test b3sum
run: cargo test
working-directory: ./b3sum
- name: test b3sum --no-default-features
run: cargo test --no-default-features
working-directory: ./b3sum
cross_tests:
name: cross ${{ matrix.arch }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
arch:
- i586-unknown-linux-musl
- i686-unknown-linux-musl
- armv7-unknown-linux-gnueabihf
- aarch64-unknown-linux-gnu
- powerpc64-unknown-linux-gnu
- s390x-unknown-linux-gnu
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo install cross
- run: cross test --target ${{ matrix.arch }}
- run: cross rustc --target ${{ matrix.arch }} -- -C target-cpu=i386
if: startsWith(matrix.arch, 'i586-') || startsWith(matrix.arch, 'i686-')
- run: cross test --target ${{ matrix.arch }} --features=neon
if: startsWith(matrix.arch, 'armv7-') || startsWith(matrix.arch, 'aarch64-')
- run: cross test --target ${{ matrix.arch }} --features=no_neon
if: startsWith(matrix.arch, 'aarch64-')
- run: ./test_vectors/cross_test.sh --target ${{ matrix.arch }}
- run: ./c/blake3_c_rust_bindings/cross_test.sh --target ${{ matrix.arch }}
- run: ./c/blake3_c_rust_bindings/cross_test.sh --target ${{ matrix.arch }} --features=neon
if: startsWith(matrix.arch, 'armv7-') || startsWith(matrix.arch, 'aarch64-')
c_tests:
name: C Makefile tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make -f Makefile.testing test
working-directory: ./c
- run: make -f Makefile.testing clean && rm blake3_sse2.c
working-directory: ./c
- run: BLAKE3_NO_SSE2=1 make -f Makefile.testing test
working-directory: ./c
- run: make -f Makefile.testing clean && rm blake3_sse41.c
working-directory: ./c
- run: BLAKE3_NO_SSE2=1 BLAKE3_NO_SSE41=1 make -f Makefile.testing test
working-directory: ./c
- run: make -f Makefile.testing clean && rm blake3_avx2.c
working-directory: ./c
- run: BLAKE3_NO_SSE2=1 BLAKE3_NO_SSE41=1 BLAKE3_NO_AVX2=1 make -f Makefile.testing test
working-directory: ./c
- run: make -f Makefile.testing clean && rm blake3_avx512.c
working-directory: ./c
- run: BLAKE3_NO_SSE2=1 BLAKE3_NO_SSE41=1 BLAKE3_NO_AVX2=1 BLAKE3_NO_AVX512=1 make -f Makefile.testing test
working-directory: ./c
- run: make -f Makefile.testing test_asm
working-directory: ./c
- run: make -f Makefile.testing clean && rm blake3_sse2_x86-64_unix.S
working-directory: ./c
- run: BLAKE3_NO_SSE2=1 make -f Makefile.testing test_asm
working-directory: ./c
- run: make -f Makefile.testing clean && rm blake3_sse41_x86-64_unix.S
working-directory: ./c
- run: BLAKE3_NO_SSE2=1 BLAKE3_NO_SSE41=1 make -f Makefile.testing test_asm
working-directory: ./c
- run: make -f Makefile.testing clean && rm blake3_avx2_x86-64_unix.S
working-directory: ./c
- run: BLAKE3_NO_SSE2=1 BLAKE3_NO_SSE41=1 BLAKE3_NO_AVX2=1 make -f Makefile.testing test_asm
working-directory: ./c
- run: make -f Makefile.testing clean && rm blake3_avx512_x86-64_unix.S
working-directory: ./c
- run: BLAKE3_NO_SSE2=1 BLAKE3_NO_SSE41=1 BLAKE3_NO_AVX2=1 BLAKE3_NO_AVX512=1 make -f Makefile.testing test_asm
working-directory: ./c
- run: git checkout .
- run: make -f Makefile.testing example
working-directory: ./c
build_apple_silicon:
name: build for Apple Silicon
runs-on: macOS-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin
- name: build blake3
run: cargo build --target aarch64-apple-darwin
- name: build b3sum
run: cargo build --target aarch64-apple-darwin
working-directory: ./b3sum
build_tinycc:
name: build with the Tiny C Compiler
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: install TCC
run: sudo apt-get install -y tcc
- name: compile
run: >
tcc -shared -O3 -o libblake3.so \
-DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512 \
blake3.c blake3_dispatch.c blake3_portable.c
working-directory: ./c
gcc54:
name: "compile and test with GCC 5.4"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: addnab/docker-run-action@v3
with:
image: gcc:5.4
options: -v ${{ github.workspace }}:/work
run: |
cat /proc/cpuinfo
curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal
cd /work
~/.cargo/bin/cargo test --features prefer_intrinsics
cmake_build:
name: CMake ${{ matrix.os }} ${{ matrix.compiler }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest", "macOS-latest", "windows-latest"]
compiler: [gcc, clang, cl]
exclude:
- os: windows-latest
compiler: gcc
- os: ubuntu-latest
compiler: msvc
- os: macOS-latest
compiler: msvc
steps:
- uses: actions/checkout@v4
- name: CMake generation
run: cmake -S c -B c/build -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/target
- name: CMake build / install
run: cmake --build c/build --target install
miri_smoketest:
name: Miri smoketest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: miri
- run: cargo miri test miri