circom/test/basiccases.js
test/basiccases.jsRaw
1const path = require("path");
2
3const bigInt = require("big-integer");
4const c_tester = require("../index.js").c_tester;
5
6const __P__ = new bigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617");
7
8
9async function doTest(circuit, testVectors) {
10 const cir = await c_tester(path.join(__dirname, "circuits", circuit));
11
12 for (let i=0; i<testVectors.length; i++) {
13 const w = await cir.calculateWitness(testVectors[i][0]);
14 await cir.assertOut(w, testVectors[i][1] );
15 }
16
17 await cir.release();
18}
19
20describe("basic cases", function () {
21 this.timeout(100000);
22 it("inout", async () => {
23 await doTest(
24 "inout.circom",
25 [
26 [{in1: 1, in2: [2,3], in3:[[4,5], [6,7], [8,9]]}, {out1: 1, out2: [2,3], out3: [[4,5], [6,7],[8,9]]}],
27 ]
28 );
29 });
30 it("add", async () => {
31 await doTest(
32 "add.circom",
33 [
34 [{in: [0,0]}, {out: 0}],
35 [{in: [0,1]}, {out: 1}],
36 [{in: [1,2]}, {out: 3}],
37 [{in: [__P__.minus(1),1]}, {out: 0}],
38 ]
39 );
40 });
41 it("add constant", async () => {
42 await doTest(
43 "addconst1.circom",
44 [
45 [{in: 0}, {out: 15}],
46 [{in: 10}, {out: 25}],
47 [{in: __P__.minus(2)}, {out: 13}],
48 ]
49 );
50 });
51 it("for unrolled", async () => {
52 await doTest(
53 "forunrolled.circom",
54 [
55 [{in: 0}, {out: [0,1,2]}],
56 [{in: 10}, {out: [10, 11, 12]}],
57 [{in: __P__.minus(2)}, {out: [__P__.minus(2), __P__.minus(1), 0]}],
58 ]
59 );
60 });
61 it("for rolled", async () => {
62 await doTest(
63 "forrolled.circom",
64 [
65 [{in: 0}, {out: 0}],
66 [{in: 10}, {out: 10}],
67 ]
68 );
69 });
70 it("function1", async () => {
71 await doTest(
72 "function1.circom",
73 [
74 [{in: 0}, {out: 3}],
75 [{in: 10}, {out: 13}],
76 [{in: __P__.minus(2)}, {out: 1}],
77 ]
78 );
79 });
80 it("function2", async () => {
81 await doTest(
82 "function2.circom",
83 [
84 [{in: 0}, {out: 3}],
85 [{in: 10}, {out: 13}],
86 [{in: __P__.minus(2)}, {out: 1}],
87 ]
88 );
89 });
90 it("constants1", async () => {
91 await doTest(
92 "constants1.circom",
93 [
94 [{in: 0}, {out: 42}],
95 [{in: 10}, {out: 52}],
96 [{in: __P__.minus(2)}, {out: 40}],
97 ]
98 );
99 });
100 it("arrays", async () => {
101 await doTest(
102 "arrays.circom",
103 [
104 [{in: 0}, {out: [1, 8, 51]}],
105 [{in: 10}, {out: [11, 28, 111]}],
106 [{in: __P__.minus(2)}, {out: [__P__.minus(1), 4, 39]}],
107 ]
108 );
109 });
110});