use crate::constraint_system::{Constraint, TurboComposer, Witness};
use dusk_bls12_381::BlsScalar;
impl TurboComposer {
pub fn component_boolean(&mut self, a: Witness) {
let zero = Self::constant_zero();
let constraint = Constraint::new()
.mult(1)
.output(-BlsScalar::one())
.a(a)
.b(a)
.o(a)
.d(zero);
self.append_gate(constraint);
}
}
#[cfg(feature = "std")]
#[cfg(test)]
mod tests {
use crate::constraint_system::{helper, TurboComposer};
use dusk_bls12_381::BlsScalar;
#[test]
fn test_correct_bool_gate() {
let res = helper::gadget_tester(
|composer| {
let zero = TurboComposer::constant_zero();
let one = composer.append_witness(BlsScalar::one());
composer.component_boolean(zero);
composer.component_boolean(one);
},
32,
);
assert!(res.is_ok())
}
#[test]
fn test_incorrect_bool_gate() {
let res = helper::gadget_tester(
|composer| {
let zero = composer.append_witness(BlsScalar::from(5));
let one = composer.append_witness(BlsScalar::one());
composer.component_boolean(zero);
composer.component_boolean(one);
},
32,
);
assert!(res.is_err())
}
}