use super::{ExecutionTrace, Felt, FieldElement, LookupTableRow, Process, Trace, NUM_RAND_ROWS};
use rand_utils::rand_array;
use vm_core::{
code_blocks::CodeBlock, CodeBlockTable, Kernel, Operation, ProgramInputs, ProgramOutputs, Word,
ONE, ZERO,
};
mod chiplets;
mod hasher;
mod range;
mod stack;
pub fn build_trace_from_block(program: &CodeBlock, stack: &[u64]) -> ExecutionTrace {
let inputs = ProgramInputs::new(stack, &[], vec![]).unwrap();
let mut process = Process::new(&Kernel::default(), inputs);
process
.execute_code_block(program, &CodeBlockTable::default())
.unwrap();
ExecutionTrace::new(process, ProgramOutputs::default())
}
pub fn build_trace_from_ops(operations: Vec<Operation>, stack: &[u64]) -> ExecutionTrace {
let program = CodeBlock::new_span(operations);
build_trace_from_block(&program, stack)
}
pub fn build_trace_from_ops_with_inputs(
operations: Vec<Operation>,
inputs: ProgramInputs,
) -> ExecutionTrace {
let mut process = Process::new(&Kernel::default(), inputs);
let program = CodeBlock::new_span(operations);
process
.execute_code_block(&program, &CodeBlockTable::default())
.unwrap();
ExecutionTrace::new(process, ProgramOutputs::default())
}