use kunquant_rs::{
BatchParams, BufferNameMap, Executor, Library, Result,
run_graph,
};
use std::path::Path;
fn main() -> Result<()> {
println!("KunQuant-rs Simple Example");
println!("==========================");
let lib_path = "test_libs/simple_test_lib.so";
if !Path::new(lib_path).exists() {
eprintln!("Error: Test library not found at {}", lib_path);
eprintln!("Please run 'python generate_test_factor.py' first");
return Ok(());
}
println!("1. Creating executor and loading library...");
let executor = Executor::single_thread()?;
let library = Library::load(lib_path)?;
let module = library.get_module("simple_test")?;
println!(" ✓ Library loaded successfully");
println!("2. Preparing input data...");
let mut input_data = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0];
let mut output_data = vec![0.0f32; 8];
println!(" Input data: {:?}", input_data);
println!("3. Setting up buffers...");
let mut buffers = BufferNameMap::new()?;
buffers.set_buffer_slice("input", &mut input_data)?;
buffers.set_buffer_slice("output", &mut output_data)?;
println!(" ✓ Buffers configured");
println!("4. Running factor computation...");
let params = BatchParams::full_range(8, 1)?;
run_graph(&executor, &module, &buffers, ¶ms)?;
println!(" ✓ Computation completed");
println!("5. Results:");
println!(" Output data: {:?}", output_data);
println!(" Expected: {:?}", input_data.iter().map(|x| x * 3.0).collect::<Vec<_>>());
let tolerance = 1e-5;
let mut all_correct = true;
for i in 0..input_data.len() {
let expected = input_data[i] * 3.0;
let actual = output_data[i];
let diff = (expected - actual).abs();
if diff > tolerance {
println!(" ❌ Mismatch at index {}: expected {}, got {}", i, expected, actual);
all_correct = false;
}
}
if all_correct {
println!(" ✅ All results are correct!");
}
println!("\nExample completed successfully!");
Ok(())
}