use miden_core::{Felt, FieldElement, ONE, QuadFelt, ZERO};
use miden_utils_testing::rand::rand_value;
#[test]
fn circuit_evaluation_prove_verify() {
let num_repetitions = 20;
let pointer = 1 << 16;
let source = format!(
"
const.NUM_READ_ROWS=4
const.NUM_EVAL_ROWS=4
begin
repeat.{num_repetitions}
# Set up the stack for loading data from advice map
push.{pointer}
padw padw padw
# Load data
repeat.2
adv_pipe
end
# Set up the inputs to the arithmetic circuit evaluation op and execute it
push.NUM_EVAL_ROWS push.NUM_READ_ROWS push.{pointer}
eval_circuit
# Clean up the stack
drop drop drop
repeat.3 dropw end
drop
end
end
"
);
let input_0: QuadFelt = rand_value();
let input_1 = input_0 * (input_0 - QuadFelt::ONE);
let mut data = vec![
input_0.base_element(0),
input_0.base_element(1),
input_1.base_element(0),
input_1.base_element(1),
];
data.extend_from_slice(&[
-ONE, ZERO, ZERO, ZERO, ]);
data.extend_from_slice(&[
Felt::new(7 + (5 << 30) + (2 << 60)), Felt::new(7 + (3 << 30) + (1 << 60)), Felt::new(2 + (6 << 30)), Felt::new(1 + (1 << 30) + (1 << 60)), ]);
data.extend_from_slice(&[ZERO, ZERO, ZERO, ZERO]);
let adv_stack = data.repeat(num_repetitions);
let adv_stack: Vec<u64> = adv_stack.iter().map(|a| a.as_int()).collect();
let test = miden_utils_testing::build_test!(source, &[], &adv_stack);
test.expect_stack(&[]);
test.prove_and_verify(vec![], false)
}