in prover/src/trace/tests.rs [42:88]
fn extend_trace_table() {
// build the trace and the domain
let trace_length = 8;
let air = MockAir::with_trace_length(trace_length);
let trace = build_fib_trace(trace_length * 2);
let domain = StarkDomain::new(&air);
// build extended trace commitment
let trace_polys = trace.into_matrix().interpolate_columns_into();
let trace_lde = trace_polys.evaluate_columns_over(&domain);
let trace_tree = trace_lde.commit_to_rows::<Blake3>();
let trace_comm = TraceCommitment::new(trace_lde, trace_tree, domain.trace_to_lde_blowup());
let trace_polys = TracePolyTable::new(trace_polys);
assert_eq!(2, trace_comm.trace_width());
assert_eq!(64, trace_comm.trace_len());
// make sure trace polynomials evaluate to Fibonacci trace
let trace_root = BaseElement::get_root_of_unity(log2(trace_length));
let trace_domain = get_power_series(trace_root, trace_length);
assert_eq!(2, trace_polys.num_polys());
assert_eq!(
vec![1u32, 2, 5, 13, 34, 89, 233, 610]
.into_iter()
.map(BaseElement::from)
.collect::<Vec<BaseElement>>(),
polynom::eval_many(trace_polys.get_poly(0), &trace_domain)
);
assert_eq!(
vec![1u32, 3, 8, 21, 55, 144, 377, 987]
.into_iter()
.map(BaseElement::from)
.collect::<Vec<BaseElement>>(),
polynom::eval_many(trace_polys.get_poly(1), &trace_domain)
);
// make sure register values are consistent with trace polynomials
let lde_domain = build_lde_domain(domain.lde_domain_size());
assert_eq!(
trace_polys.get_poly(0),
polynom::interpolate(&lde_domain, trace_comm.get_trace_column(0), true)
);
assert_eq!(
trace_polys.get_poly(1),
polynom::interpolate(&lde_domain, trace_comm.get_trace_column(1), true)
);
}