in air/src/air/boundary/tests.rs [121:174]
fn boundary_constraint_from_sequence_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, first step 0, stride 4
let values = rand_vector::<BaseElement>(4);
let constraint_poly = build_sequence_poly(&values, 16);
let assertion = Assertion::sequence(0, 0, 4, values);
let constraint = BoundaryConstraint::<BaseElement, BaseElement>::new(
assertion,
inv_g,
&mut twiddle_map,
prng.draw_pair().unwrap(),
);
assert_eq!(0, constraint.register());
assert_eq!(constraint_poly, constraint.poly());
assert_eq!((0, BaseElement::ONE), constraint.poly_offset());
assert_eq!(test_prng.draw_pair::<BaseElement>().unwrap(), constraint.cc);
assert_eq!(1, twiddle_map.len());
// sequence value constraints with no offset should evaluate to
// trace_value - constraint_poly(x)
let x = rand_value::<BaseElement>();
let trace_value = rand_value::<BaseElement>();
assert_eq!(
trace_value - polynom::eval(&constraint_poly, x),
constraint.evaluate_at(x, trace_value)
);
// constraint should be built correctly for register 0, first step 3, stride 8
let values = rand_vector::<BaseElement>(2);
let constraint_poly = build_sequence_poly(&values, 16);
let assertion = Assertion::sequence(0, 3, 8, values.clone());
let constraint = BoundaryConstraint::<BaseElement, BaseElement>::new(
assertion,
inv_g,
&mut twiddle_map,
prng.draw_pair().unwrap(),
);
assert_eq!(0, constraint.register());
assert_eq!(constraint_poly, constraint.poly());
assert_eq!((3, inv_g.exp(3)), constraint.poly_offset());
assert_eq!(test_prng.draw_pair::<BaseElement>().unwrap(), constraint.cc);
assert_eq!(2, twiddle_map.len());
// sequence value constraints with offset should evaluate to
// trace_value - constraint_poly(x * offset)
let x = rand_value::<BaseElement>();
let trace_value = rand_value::<BaseElement>();
assert_eq!(
trace_value - polynom::eval(&constraint_poly, x * constraint.poly_offset().1),
constraint.evaluate_at(x, trace_value)
);
}