in air/src/air/boundary/tests.rs [70:118]
fn boundary_constraint_from_periodic_assertion() {
let mut test_prng = build_prng();
let (inv_g, mut twiddle_map, mut prng) = build_constraint_params(16);
// constraint should be built correctly for register 0, step 0, stride 4
let value = rand_value::<BaseElement>();
let assertion = Assertion::periodic(0, 0, 4, value);
let constraint = BoundaryConstraint::<BaseElement, BaseElement>::new(
assertion,
inv_g,
&mut twiddle_map,
prng.draw_pair().unwrap(),
);
assert_eq!(0, constraint.register());
assert_eq!(vec![value], constraint.poly());
assert_eq!((0, BaseElement::ONE), constraint.poly_offset());
assert_eq!(test_prng.draw_pair::<BaseElement>().unwrap(), constraint.cc);
// periodic value constraints should evaluate to trace_value - value
let trace_value = rand_value::<BaseElement>();
assert_eq!(
trace_value - value,
constraint.evaluate_at(rand_value::<BaseElement>(), trace_value)
);
// constraint should be built correctly for register 2, first step 3, stride 8
let value = rand_value::<BaseElement>();
let assertion = Assertion::periodic(2, 3, 8, value);
let constraint = BoundaryConstraint::<BaseElement, BaseElement>::new(
assertion,
inv_g,
&mut twiddle_map,
prng.draw_pair().unwrap(),
);
assert_eq!(2, constraint.register());
assert_eq!(vec![value], constraint.poly());
assert_eq!((0, BaseElement::ONE), constraint.poly_offset());
assert_eq!(test_prng.draw_pair::<BaseElement>().unwrap(), constraint.cc);
// periodic value constraints should evaluate to trace_value - value
let trace_value = rand_value::<BaseElement>();
assert_eq!(
trace_value - value,
constraint.evaluate_at(rand_value::<BaseElement>(), trace_value)
);
// twiddle map was not touched
assert!(twiddle_map.is_empty());
}