use dusk_curves::bls12_381::BlsScalar;
use crate::prelude::Witness;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Gate {
pub(crate) q_m: BlsScalar,
pub(crate) q_l: BlsScalar,
pub(crate) q_r: BlsScalar,
pub(crate) q_o: BlsScalar,
pub(crate) q_f: BlsScalar,
pub(crate) q_c: BlsScalar,
pub(crate) q_arith: BlsScalar,
pub(crate) q_range: BlsScalar,
pub(crate) q_logic: BlsScalar,
pub(crate) q_fixed_group_add: BlsScalar,
pub(crate) q_variable_group_add: BlsScalar,
pub(crate) a: Witness,
pub(crate) b: Witness,
pub(crate) c: Witness,
pub(crate) d: Witness,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn gate_is_copy_clone_and_eq() {
let gate = Gate {
q_m: BlsScalar::from(1u64),
q_l: BlsScalar::from(2u64),
q_r: BlsScalar::from(3u64),
q_o: BlsScalar::from(4u64),
q_f: BlsScalar::from(5u64),
q_c: BlsScalar::from(6u64),
q_arith: BlsScalar::one(),
q_range: BlsScalar::zero(),
q_logic: BlsScalar::zero(),
q_fixed_group_add: BlsScalar::zero(),
q_variable_group_add: BlsScalar::zero(),
a: Witness::ZERO,
b: Witness::ONE,
c: Witness::new(2),
d: Witness::new(3),
};
let gate_copy = gate;
assert_eq!(gate, gate_copy);
let gate_clone = gate_copy.clone();
assert_eq!(gate_copy, gate_clone);
let _ = format!("{gate_clone:?}");
}
#[test]
fn gate_partial_eq_compares_fields() {
let a = Gate {
q_m: BlsScalar::from(1u64),
q_l: BlsScalar::from(2u64),
q_r: BlsScalar::from(3u64),
q_o: BlsScalar::from(4u64),
q_f: BlsScalar::from(5u64),
q_c: BlsScalar::from(6u64),
q_arith: BlsScalar::one(),
q_range: BlsScalar::zero(),
q_logic: BlsScalar::zero(),
q_fixed_group_add: BlsScalar::zero(),
q_variable_group_add: BlsScalar::zero(),
a: Witness::ZERO,
b: Witness::ONE,
c: Witness::new(2),
d: Witness::new(3),
};
let mut b = a;
assert_eq!(a, b);
b.q_c = BlsScalar::from(7u64);
assert_ne!(a, b);
}
}