llzk-sys 30.0.0

Rust bindings to the LLZK C API.
use mlir_sys::{mlirPassManagerAddOwnedPass, mlirPassManagerCreate, mlirPassManagerDestroy};
use rstest::rstest;

use crate::{
    mlirCreateLLZKTransformationRedundantOperationEliminationPass,
    mlirCreateLLZKTransformationRedundantReadAndWriteEliminationPass,
    mlirCreateLLZKTransformationUnusedDeclarationEliminationPass,
    mlirRegisterLLZKTransformationRedundantOperationEliminationPass,
    mlirRegisterLLZKTransformationRedundantReadAndWriteEliminationPass,
    mlirRegisterLLZKTransformationUnusedDeclarationEliminationPass,
    sanity_tests::{TestContext, context},
};
#[cfg(feature = "pcl-backend")]
use crate::{
    mlirCreatePCLTransformationPCLLoweringPass, mlirRegisterPCLTransformationPCLLoweringPass,
};

#[cfg(test)]
#[allow(unused_variables)]
mod tests {
    use super::*;
    use rstest::fixture;

    #[fixture]
    fn register_passes() {
        static ONCE: std::sync::Once = std::sync::Once::new();
        ONCE.call_once(|| unsafe {
            mlirRegisterLLZKTransformationRedundantOperationEliminationPass();
            mlirRegisterLLZKTransformationRedundantReadAndWriteEliminationPass();
            mlirRegisterLLZKTransformationUnusedDeclarationEliminationPass();
            #[cfg(feature = "pcl-backend")]
            mlirRegisterPCLTransformationPCLLoweringPass();
        });
    }

    #[rstest]
    fn test_mlir_register_transformation_passes_and_create(
        register_passes: (),
        context: TestContext,
    ) {
        unsafe {
            let manager = mlirPassManagerCreate(context.ctx);

            let pass1 = mlirCreateLLZKTransformationRedundantOperationEliminationPass();
            let pass2 = mlirCreateLLZKTransformationRedundantReadAndWriteEliminationPass();
            let pass3 = mlirCreateLLZKTransformationUnusedDeclarationEliminationPass();
            #[cfg(feature = "pcl-backend")]
            let pass4 = mlirCreatePCLTransformationPCLLoweringPass();
            mlirPassManagerAddOwnedPass(manager, pass1);
            mlirPassManagerAddOwnedPass(manager, pass2);
            mlirPassManagerAddOwnedPass(manager, pass3);
            #[cfg(feature = "pcl-backend")]
            mlirPassManagerAddOwnedPass(manager, pass4);

            mlirPassManagerDestroy(manager);
        }
    }

    #[rstest]
    fn test_mlir_register_redundant_operation_elimination_pass_and_create(
        register_passes: (),
        context: TestContext,
    ) {
        unsafe {
            let manager = mlirPassManagerCreate(context.ctx);

            let pass = mlirCreateLLZKTransformationRedundantOperationEliminationPass();
            mlirPassManagerAddOwnedPass(manager, pass);

            mlirPassManagerDestroy(manager);
        }
    }
    #[rstest]
    fn test_mlir_register_redudant_read_and_write_elimination_pass_and_create(
        register_passes: (),
        context: TestContext,
    ) {
        unsafe {
            let manager = mlirPassManagerCreate(context.ctx);

            let pass = mlirCreateLLZKTransformationRedundantReadAndWriteEliminationPass();
            mlirPassManagerAddOwnedPass(manager, pass);

            mlirPassManagerDestroy(manager);
        }
    }
    #[rstest]
    fn test_mlir_register_unused_declaration_elimination_pass_and_create(
        register_passes: (),
        context: TestContext,
    ) {
        unsafe {
            let manager = mlirPassManagerCreate(context.ctx);

            let pass = mlirCreateLLZKTransformationUnusedDeclarationEliminationPass();
            mlirPassManagerAddOwnedPass(manager, pass);

            mlirPassManagerDestroy(manager);
        }
    }

    #[cfg(feature = "pcl-backend")]
    #[rstest]
    fn test_mlir_register_pcl_lowering_pass_and_create(register_passes: (), context: TestContext) {
        unsafe {
            let manager = mlirPassManagerCreate(context.ctx);

            let pass = mlirCreatePCLTransformationPCLLoweringPass();
            mlirPassManagerAddOwnedPass(manager, pass);

            mlirPassManagerDestroy(manager);
        }
    }
}