llzk-sys 30.1.0

Rust bindings to the LLZK C API.
use std::{ffi::c_void, ptr::null_mut};

use mlir_sys::{MlirBlock, MlirOperation, MlirRegion};
use rstest::rstest;

use crate::{
    MlirOpBuilderInsertPoint, mlirOpBuilderCreate, mlirOpBuilderCreateWithListener,
    mlirOpBuilderDestroy, mlirOpBuilderListenerCreate, mlirOpBuilderListenerDestroy,
    sanity_tests::{TestContext, context},
};

#[rstest]
fn test_mlir_op_builder_create(context: TestContext) {
    unsafe {
        let builder = mlirOpBuilderCreate(context.ctx);
        mlirOpBuilderDestroy(builder);
    }
}

#[rstest]
fn test_mlir_op_builder_create_with_listener(context: TestContext) {
    unsafe {
        let listener =
            mlirOpBuilderListenerCreate(Some(test_callback1), Some(test_callback2), null_mut());
        let builder = mlirOpBuilderCreateWithListener(context.ctx, listener);

        mlirOpBuilderDestroy(builder);
        mlirOpBuilderListenerDestroy(listener);
    }
}

#[rstest]
fn test_mlir_op_builder_listener_create() {
    unsafe {
        let listener =
            mlirOpBuilderListenerCreate(Some(test_callback1), Some(test_callback2), null_mut());
        mlirOpBuilderListenerDestroy(listener);
    }
}

// Empty functions for passing a valid function pointer as the listeners of a
// [`MlirOpBuilder`] instance. They don't do anything, they just need to exist.
unsafe extern "C" fn test_callback1(_: MlirOperation, _: MlirOpBuilderInsertPoint, _: *mut c_void) {
}
unsafe extern "C" fn test_callback2(_: MlirBlock, _: MlirRegion, _: MlirBlock, _: *mut c_void) {}