mirror of
https://github.com/logos-blockchain/logos-blockchain-circuits.git
synced 2026-05-20 16:29:31 +00:00
45 lines
1.7 KiB
Rust
45 lines
1.7 KiB
Rust
#[cfg(test)]
|
|
mod tests {
|
|
use lbc_poq_sys::PoqWitnessInput;
|
|
use logos_blockchain_circuits_tests::inputs;
|
|
|
|
#[test]
|
|
fn test_both_circuits_generate_witness() {
|
|
let pol_inputs_raw = std::fs::read_to_string(inputs::POL.as_path()).unwrap();
|
|
let pol_witness_input = lbc_pol_sys::PolWitnessInput::new(pol_inputs_raw).unwrap();
|
|
|
|
// Each sys crate compiles a copy of the same C++ runtime (loadCircuit,
|
|
// get_size_of_witness, ...) under identical symbol names. When two
|
|
// crates are linked into the same binary, the linker silently keeps one
|
|
// definition of each symbol, so one circuit ends up using the
|
|
// other's size constants — corrupting dat parsing and causing a SIGSEGV.
|
|
// This test reproduces the conflict by calling generate_witness on both
|
|
// circuits in the same binary.
|
|
let _pol_witness = lbc_pol_sys::generate_witness(&pol_witness_input);
|
|
|
|
let inputs_json_raw = std::fs::read_to_string(inputs::POQ.as_path()).unwrap();
|
|
let inputs_json = PoqWitnessInput::new(inputs_json_raw).unwrap();
|
|
let poq_result = lbc_poq_sys::generate_witness(&inputs_json);
|
|
assert!(poq_result.is_ok());
|
|
}
|
|
|
|
#[test]
|
|
fn test_concurrent_poq_calls() {
|
|
let inputs_json_raw = std::fs::read_to_string(inputs::POQ.as_path()).unwrap();
|
|
|
|
let handles: Vec<_> = (0..4)
|
|
.map(|_| {
|
|
let json = inputs_json_raw.clone();
|
|
std::thread::spawn(move || {
|
|
let input = PoqWitnessInput::new(json).unwrap();
|
|
lbc_poq_sys::generate_witness(&input)
|
|
})
|
|
})
|
|
.collect();
|
|
|
|
for h in handles {
|
|
assert!(h.join().unwrap().is_ok());
|
|
}
|
|
}
|
|
}
|