|
| 1 | +use crate::common::{compare_outputs, DEFAULT_GAS}; |
| 2 | +use crate::common::{load_cairo, run_native_program, run_vm_program}; |
| 3 | +use cairo_lang_runner::SierraCasmRunner; |
| 4 | +use cairo_lang_sierra::program::Program; |
| 5 | +use cairo_native::starknet::DummySyscallHandler; |
| 6 | +use lazy_static::lazy_static; |
| 7 | + |
| 8 | +lazy_static! { |
| 9 | + // Taken from: https://github.com/starkware-libs/sequencer/blob/7ee6f4c8a81def87402c626c9d72a33c74bc3243/crates/blockifier/feature_contracts/cairo1/test_contract.cairo#L656 |
| 10 | + static ref TEST: (String, Program, SierraCasmRunner) = load_cairo! { |
| 11 | + use core::circuit::{ |
| 12 | + CircuitElement, CircuitInput, circuit_add, circuit_sub, circuit_mul, circuit_inverse, |
| 13 | + EvalCircuitResult, EvalCircuitTrait, u384, CircuitOutputsTrait, CircuitModulus, |
| 14 | + CircuitInputs, AddInputResultTrait |
| 15 | + }; |
| 16 | + |
| 17 | + fn test() { |
| 18 | + let in1 = CircuitElement::<CircuitInput<0>> {}; |
| 19 | + let in2 = CircuitElement::<CircuitInput<1>> {}; |
| 20 | + let add = circuit_add(in1, in2); |
| 21 | + let inv = circuit_inverse(add); |
| 22 | + let sub = circuit_sub(inv, in2); |
| 23 | + let mul = circuit_mul(inv, sub); |
| 24 | + |
| 25 | + let modulus = TryInto::<_, CircuitModulus>::try_into([7, 0, 0, 0]).unwrap(); |
| 26 | + let outputs = (mul,) |
| 27 | + .new_inputs() |
| 28 | + .next([3, 0, 0, 0]) |
| 29 | + .next([6, 0, 0, 0]) |
| 30 | + .done() |
| 31 | + .eval(modulus) |
| 32 | + .unwrap(); |
| 33 | + |
| 34 | + assert!(outputs.get_output(mul) == u384 { limb0: 6, limb1: 0, limb2: 0, limb3: 0 }); |
| 35 | + } |
| 36 | + }; |
| 37 | +} |
| 38 | + |
| 39 | +#[test] |
| 40 | +fn circuit() { |
| 41 | + let program = &TEST; |
| 42 | + |
| 43 | + let result_vm = run_vm_program(program, "test", vec![], Some(DEFAULT_GAS as usize)).unwrap(); |
| 44 | + |
| 45 | + let result_native = run_native_program( |
| 46 | + program, |
| 47 | + "test", |
| 48 | + &[], |
| 49 | + Some(DEFAULT_GAS), |
| 50 | + Option::<DummySyscallHandler>::None, |
| 51 | + ); |
| 52 | + |
| 53 | + compare_outputs( |
| 54 | + &program.1, |
| 55 | + &program.2.find_function("test").unwrap().id, |
| 56 | + &result_vm, |
| 57 | + &result_native, |
| 58 | + ) |
| 59 | + .unwrap(); |
| 60 | +} |
0 commit comments