use crate::constraint_system::StandardComposer;
use crate::constraint_system::Variable;
use dusk_bls12_381::BlsScalar;
impl StandardComposer {
pub fn boolean_gate(&mut self, a: Variable) -> Variable {
self.w_l.push(a);
self.w_r.push(a);
self.w_o.push(a);
self.w_4.push(self.zero_var);
self.q_m.push(BlsScalar::one());
self.q_l.push(BlsScalar::zero());
self.q_r.push(BlsScalar::zero());
self.q_o.push(-BlsScalar::one());
self.q_c.push(BlsScalar::zero());
self.q_4.push(BlsScalar::zero());
self.q_arith.push(BlsScalar::one());
self.q_range.push(BlsScalar::zero());
self.q_logic.push(BlsScalar::zero());
self.q_fixed_group_add.push(BlsScalar::zero());
self.q_variable_group_add.push(BlsScalar::zero());
self.perm
.add_variables_to_map(a, a, a, self.zero_var, self.n);
self.n += 1;
a
}
}
#[cfg(test)]
mod tests {
use super::super::helper::*;
use dusk_bls12_381::BlsScalar;
#[test]
fn test_correct_bool_gate() {
let res = gadget_tester(
|composer| {
let zero = composer.add_input(BlsScalar::zero());
let one = composer.add_input(BlsScalar::one());
composer.boolean_gate(zero);
composer.boolean_gate(one);
},
32,
);
assert!(res.is_ok())
}
#[test]
fn test_incorrect_bool_gate() {
let res = gadget_tester(
|composer| {
let zero = composer.add_input(BlsScalar::from(5));
let one = composer.add_input(BlsScalar::one());
composer.boolean_gate(zero);
composer.boolean_gate(one);
},
32,
);
assert!(res.is_err())
}
}