| name: tests |
| |
| on: |
| push: |
| branches: |
| - "*" |
| # not on tags |
| pull_request: |
| |
| env: |
| BLAKE3_CI: "1" |
| RUSTFLAGS: "-D warnings" |
| RUST_BACKTRACE: "1" |
| |
| jobs: |
| cargo_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] |
| |
| steps: |
| - uses: actions/checkout@v1 |
| - uses: actions-rs/toolchain@v1 |
| with: |
| toolchain: ${{ format('{0}-{1}', matrix.channel, matrix.target.toolchain) }} |
| profile: minimal |
| override: true |
| # Print the compiler version, for debugging. |
| - name: print compiler version |
| run: cargo run --quiet |
| working-directory: ./tools/compiler_version |
| # Print out instruction set support, for debugging. |
| - name: print instruction set support |
| run: cargo run --quiet |
| working-directory: ./tools/instruction_set_support |
| # Default tests plus Rayon. |
| - run: cargo test --features=rayon |
| # no_std tests. |
| - run: cargo test --no-default-features |
| |
| # A matrix of different test settings: |
| # - debug vs release |
| # - assembly vs Rust+C intrinsics vs pure Rust intrinsics |
| # - different levels of SIMD support |
| # |
| # Full SIMD support. |
| - 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 |
| # No AVX-512. |
| - 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 |
| # No AVX2. |
| - 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 |
| # No SSE4.1 |
| - 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 |
| # No SSE2 |
| - 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 |
| |
| # Test benchmarks. RUSTC_BOOTSTRAP=1 lets this run on non-nightly toolchains. |
| - run: cargo test --benches |
| env: |
| RUSTC_BOOTSTRAP: 1 |
| # Test vectors. |
| - 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 |
| # Test b3sum. |
| - name: test b3sum |
| run: cargo test |
| working-directory: ./b3sum |
| - name: test b3sum --no-default-features |
| run: cargo test --no-default-features |
| working-directory: ./b3sum |
| # Test C code. |
| - 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 |
| # Reference impl doc test. |
| - name: reference impl doc test |
| run: cargo test |
| working-directory: ./reference_impl |
| |
| 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 |
| - mips-unknown-linux-gnu |
| |
| steps: |
| - uses: actions/checkout@v1 |
| - uses: actions-rs/toolchain@v1 |
| with: |
| toolchain: stable |
| override: true |
| - run: cargo install cross |
| # Test the portable implementation on everything. |
| - run: cross test --target ${{ matrix.arch }} |
| # Test building for ancient i386 processors without guaranteed SSE2 support. |
| - run: cross rustc --target ${{ matrix.arch }} -- -C target-cpu=i386 |
| if: startsWith(matrix.arch, 'i586-') || startsWith(matrix.arch, 'i686-') |
| # Test the NEON implementation on ARM targets. |
| - run: cross test --target ${{ matrix.arch }} --features=neon |
| if: startsWith(matrix.arch, 'armv7-') || startsWith(matrix.arch, 'aarch64-') |
| # Test vectors. Note that this uses a hacky script due to path dependency limitations. |
| - run: ./test_vectors/cross_test.sh --target ${{ matrix.arch }} |
| # C code. Same issue with the hacky script. |
| - 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-') |
| |
| # Currently only on x86. |
| c_tests: |
| name: C Makefile tests |
| runs-on: ubuntu-latest |
| |
| steps: |
| - uses: actions/checkout@v1 |
| # Test the intrinsics-based implementations. |
| - 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 |
| # Test the assembly implementations. |
| - 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 |