fn extend_trace_table()

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)
    );
}