arnaucube
arnaucube/circomPublic Self-hosted repository
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});