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;
5const wasm_tester = require("../index.js").wasm_tester;
6
7const __P__ = new bigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617");
8
9const basicCases = require("./basiccases.json");
10
11function normalize(o) {
12 if ((typeof(o) == "bigint") || o.isZero !== undefined) {
13 const res = bigInt(o);
14 return norm(res);
15 } else if (Array.isArray(o)) {
16 return o.map(normalize);
17 } else if (typeof o == "object") {
18 const res = {};
19 for (let k in o) {
20 res[k] = normalize(o[k]);
21 }
22 return res;
23 } else {
24 const res = bigInt(o);
25 return norm(res);
26 }
27
28 function norm(n) {
29 let res = n.mod(__P__);
30 if (res.isNegative()) res = __P__.add(res);
31 return res;
32 }
33}
34
35
36async function doTest(tester, circuit, testVectors) {
37 const cir = await tester(path.join(__dirname, "circuits", circuit));
38
39 for (let i=0; i<testVectors.length; i++) {
40 const w = await cir.calculateWitness(normalize(testVectors[i][0]));
41// console.log(testVectors[i][0]);
42// console.log(w);
43// console.log(testVectors[i][1]);
44 await cir.assertOut(w, normalize(testVectors[i][1]) );
45 }
46
47 await cir.release();
48}
49
50describe("basic cases", function () {
51 this.timeout(100000);
52
53 for (let i=0; i<basicCases.length; i++) {
54 it("c/c++ " + basicCases[i].name, async () => {
55 await doTest(c_tester, basicCases[i].circuit, basicCases[i].tv);
56 });
57 }
58
59/*
60 for (let i=0; i<basicCases.length; i++) {
61 it("wasm " + basicCases[i].name, async () => {
62 await doTest(wasm_tester, basicCases[i].circuit, basicCases[i].tv);
63 });
64 }
65*/
66});