in air/src/air/divisor.rs [205:235]
fn constraint_divisor_evaluation() {
// single term numerator: (x^4 - 1)
let div = ConstraintDivisor::new(vec![(4, BaseElement::ONE)], vec![]);
assert_eq!(BaseElement::new(15), div.evaluate_at(BaseElement::new(2)));
// multi-term numerator: (x^4 - 1) * (x^2 - 2) * (x^3 - 3)
let div = ConstraintDivisor::new(
vec![
(4, BaseElement::ONE),
(2, BaseElement::new(2)),
(3, BaseElement::new(3)),
],
vec![],
);
let expected = BaseElement::new(15) * BaseElement::new(2) * BaseElement::new(5);
assert_eq!(expected, div.evaluate_at(BaseElement::new(2)));
// multi-term numerator with exclusion points:
// (x^4 - 1) * (x^2 - 2) * (x^3 - 3) / ((x - 1) * (x - 2))
let div = ConstraintDivisor::new(
vec![
(4, BaseElement::ONE),
(2, BaseElement::new(2)),
(3, BaseElement::new(3)),
],
vec![BaseElement::ONE, BaseElement::new(2)],
);
let expected = BaseElement::new(255) * BaseElement::new(14) * BaseElement::new(61)
/ BaseElement::new(6);
assert_eq!(expected, div.evaluate_at(BaseElement::new(4)));
}