Skip to content

Commit 4273e90

Browse files
Add circuit compare test (#1076)
1 parent 1d349dc commit 4273e90

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

tests/tests/circuit.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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+
}

tests/tests/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ pub mod alexandria;
22
pub mod arrays;
33
pub mod boolean;
44
pub mod cases;
5+
pub mod circuit;
56
pub mod compile_library;
67
pub mod dict;
78
pub mod ec;

0 commit comments

Comments
 (0)