grapevine-sonobe/circom/node_modules/circomlib/test/binsub.js
circom/node_modules/circomlib/test/binsub.jsRaw
1const path = require("path");
2
3const Scalar = require("ffjavascript").Scalar;
4const wasm_tester = require("circom_tester").wasm;
5
6function print(circuit, w, s) {
7 console.log(s + ": " + w[circuit.getSignalIdx(s)]);
8}
9
10async function checkSub(_a,_b, circuit) {
11 let a=Scalar.e(_a);
12 let b=Scalar.e(_b);
13 if (Scalar.lt(a, 0)) a = Scalar.add(a, Scalar.shl(1, 16));
14 if (Scalar.lt(b, 0)) b = Scalar.add(b, Scalar.shl(1, 16));
15 const w = await circuit.calculateWitness({a: a, b: b}, true);
16
17 let res = Scalar.sub(a, b);
18 if (Scalar.lt(res, 0)) res = Scalar.add(res, Scalar.shl(1, 16));
19
20 await circuit.assertOut(w, {out: res});
21}
22
23describe("BinSub test", function () {
24
25 this.timeout(100000);
26
27 let circuit;
28 before( async() => {
29 circuit = await wasm_tester(path.join(__dirname, "circuits", "binsub_test.circom"));
30 });
31
32 it("Should check variuos ege cases", async () => {
33 await checkSub(0,0, circuit);
34 await checkSub(1,0, circuit);
35 await checkSub(-1,0, circuit);
36 await checkSub(2,1, circuit);
37 await checkSub(2,2, circuit);
38 await checkSub(2,3, circuit);
39 await checkSub(2,-1, circuit);
40 await checkSub(2,-2, circuit);
41 await checkSub(2,-3, circuit);
42 await checkSub(-2,-3, circuit);
43 await checkSub(-2,-2, circuit);
44 await checkSub(-2,-1, circuit);
45 await checkSub(-2,0, circuit);
46 await checkSub(-2,1, circuit);
47 await checkSub(-2,2, circuit);
48 await checkSub(-2,3, circuit);
49 });
50
51
52});