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