use super::{
super::chiplets::init_state_from_words, ExecutionTrace, Felt, FieldElement, Process, Trace,
NUM_RAND_ROWS,
};
use crate::{AdviceInputs, DefaultHost, ExecutionOptions, MemAdviceProvider, StackInputs};
use alloc::vec::Vec;
use test_utils::rand::rand_array;
use vm_core::{
code_blocks::CodeBlock, CodeBlockTable, Kernel, Operation, StackOutputs, Word, ONE, ZERO,
};
mod chiplets;
mod decoder;
mod hasher;
mod range;
mod stack;
pub fn build_trace_from_block(program: &CodeBlock, stack_inputs: &[u64]) -> ExecutionTrace {
let stack_inputs = StackInputs::try_from_ints(stack_inputs.iter().copied()).unwrap();
let host = DefaultHost::default();
let mut process =
Process::new(Kernel::default(), stack_inputs, host, ExecutionOptions::default());
process.execute_code_block(program, &CodeBlockTable::default()).unwrap();
ExecutionTrace::new(process, StackOutputs::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>,
stack_inputs: StackInputs,
advice_inputs: AdviceInputs,
) -> ExecutionTrace {
let advice_provider = MemAdviceProvider::from(advice_inputs);
let host = DefaultHost::new(advice_provider);
let mut process =
Process::new(Kernel::default(), stack_inputs, host, ExecutionOptions::default());
let program = CodeBlock::new_span(operations);
process.execute_code_block(&program, &CodeBlockTable::default()).unwrap();
ExecutionTrace::new(process, StackOutputs::default())
}