diff --git a/.github/codecov.yml b/.github/codecov.yml index 6d4b076c..2af9c192 100644 --- a/.github/codecov.yml +++ b/.github/codecov.yml @@ -9,6 +9,5 @@ coverage: threshold: 1% ignore: - - "ffi" - "benches" - "tests" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 64821c3a..682f8691 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -110,6 +110,8 @@ jobs: coverage: runs-on: ubuntu-latest steps: + - name: Install opencl + run: sudo apt-get install -y libpocl2 mesa-opencl-icd ocl-icd-opencl-dev - uses: actions/checkout@v3 - name: Install stable uses: dtolnay/rust-toolchain@stable @@ -117,11 +119,8 @@ jobs: components: llvm-tools-preview - name: cargo install cargo-llvm-cov uses: taiki-e/install-action@cargo-llvm-cov - - name: cargo generate-lockfile - if: hashFiles('Cargo.lock') == '' - run: cargo generate-lockfile - name: cargo llvm-cov - run: cargo llvm-cov --locked --all-features --lcov --output-path lcov.info + run: cargo llvm-cov --locked --all-features --lcov --output-path lcov.info --workspace --ignore-filename-regex "main.rs" -- --test-threads=1 - name: Upload to codecov.io uses: codecov/codecov-action@v3 with: @@ -171,7 +170,7 @@ jobs: toolchain: stable steps: - if: matrix.os == 'ubuntu-20.04' - run: sudo apt-get install -y libpocl2 mesa-opencl-icd ocl-icd-opencl-dev + run: sudo apt-get install -y mesa-opencl-icd ocl-icd-opencl-dev name: Install opencl - if: matrix.os == 'windows-2019' name: Install opencl diff --git a/ffi/src/log.rs b/ffi/src/log.rs index de212449..11222c29 100644 --- a/ffi/src/log.rs +++ b/ffi/src/log.rs @@ -77,3 +77,60 @@ pub extern "C" fn set_logging_callback( } } } + +#[cfg(test)] +mod tests { + use log::{Level, Log, Metadata, Record}; + + use super::ExternCLog; + + #[test] + fn test_c_logger() { + extern "C" fn cb(record: &super::ExternCRecord) { + assert_eq!(record.level, Level::Info); + assert_eq!( + unsafe { + std::str::from_utf8(std::slice::from_raw_parts( + record.message.ptr as _, + record.message.len, + )) + }, + Ok("Hello, world!") + ); + assert_eq!(record.line, 77,); + assert_eq!( + unsafe { + std::str::from_utf8(std::slice::from_raw_parts( + record.file.ptr as _, + record.file.len, + )) + }, + Ok("test.rs") + ); + assert_eq!( + unsafe { + std::str::from_utf8(std::slice::from_raw_parts( + record.module_path.ptr as _, + record.module_path.len, + )) + }, + Ok("test_module") + ); + } + + let logger = ExternCLog::new(Level::Info, cb); + + assert!(logger.enabled(&Metadata::builder().level(Level::Info).build())); + assert!(!logger.enabled(&Metadata::builder().level(Level::Debug).build())); + + logger.log( + &Record::builder() + .args(format_args!("Hello, world!")) + .level(Level::Info) + .file(Some("test.rs")) + .line(Some(77)) + .module_path(Some("test_module")) + .build(), + ); + } +}