arnaucube
arnaucube/circomlibPublic Self-hosted repository
circomlib/test/multiplexer.js
test/multiplexer.jsRaw
  1const chai = require("chai");
  2const path = require("path");
  3const snarkjs = require("snarkjs");
  4const compiler = require("circom");
  5
  6const assert = chai.assert;
  7
  8const bigInt = snarkjs.bigInt;
  9
 10
 11describe("Mux4 test", () => {
 12    it("Should create a constant multiplexer 4", async () => {
 13
 14        const cirDef = await compiler(path.join(__dirname, "circuits", "mux4_1.circom"));
 15
 16//        console.log(JSON.stringify(cirDef, null, 1));
 17
 18//        assert.equal(cirDef.nVars, 2);
 19
 20        const circuit = new snarkjs.Circuit(cirDef);
 21
 22        console.log("NConstrains Mux4: " + circuit.nConstraints);
 23
 24        const ct16 = [
 25            bigInt("123"),
 26            bigInt("456"),
 27            bigInt("789"),
 28            bigInt("012"),
 29            bigInt("111"),
 30            bigInt("222"),
 31            bigInt("333"),
 32            bigInt("4546"),
 33            bigInt("134523"),
 34            bigInt("44356"),
 35            bigInt("15623"),
 36            bigInt("4566"),
 37            bigInt("1223"),
 38            bigInt("4546"),
 39            bigInt("4256"),
 40            bigInt("4456")
 41        ];
 42
 43        for (let i=0; i<16; i++) {
 44            const w = circuit.calculateWitness({ "selector": i });
 45
 46            assert(circuit.checkWitness(w));
 47
 48            assert(w[0].equals(bigInt(1)));
 49
 50            // console.log(i + " -> " + w[circuit.getSignalIdx("main.out")].toString());
 51            assert(w[circuit.getSignalIdx("main.out")].equals(ct16[i]));
 52        }
 53    });
 54
 55    it("Should create a constant multiplexer 3", async () => {
 56
 57        const cirDef = await compiler(path.join(__dirname, "circuits", "mux3_1.circom"));
 58
 59        const circuit = new snarkjs.Circuit(cirDef);
 60
 61        console.log("NConstrains Mux3: " + circuit.nConstraints);
 62
 63        const ct8 = [
 64            bigInt("37"),
 65            bigInt("47"),
 66            bigInt("53"),
 67            bigInt("71"),
 68            bigInt("89"),
 69            bigInt("107"),
 70            bigInt("163"),
 71            bigInt("191")
 72        ];
 73
 74        for (let i=0; i<8; i++) {
 75            const w = circuit.calculateWitness({ "selector": i });
 76
 77            assert(w[0].equals(bigInt(1)));
 78
 79            // console.log(i + " -> " + w[circuit.getSignalIdx("main.out")].toString());
 80            assert(w[circuit.getSignalIdx("main.out")].equals(ct8[i]));
 81        }
 82    });
 83    it("Should create a constant multiplexer 2", async () => {
 84
 85        const cirDef = await compiler(path.join(__dirname, "circuits", "mux2_1.circom"));
 86
 87        const circuit = new snarkjs.Circuit(cirDef);
 88
 89        console.log("NConstrains Mux2: " + circuit.nConstraints);
 90
 91        const ct8 = [
 92            bigInt("37"),
 93            bigInt("47"),
 94            bigInt("53"),
 95            bigInt("71"),
 96        ];
 97
 98        for (let i=0; i<4; i++) {
 99            const w = circuit.calculateWitness({ "selector": i });
100
101            assert(circuit.checkWitness(w));
102
103            assert(w[0].equals(bigInt(1)));
104
105            // console.log(i + " -> " + w[circuit.getSignalIdx("main.out")].toString());
106            assert(w[circuit.getSignalIdx("main.out")].equals(ct8[i]));
107        }
108    });
109    it("Should create a constant multiplexer 1", async () => {
110
111        const cirDef = await compiler(path.join(__dirname, "circuits", "mux1_1.circom"));
112
113        const circuit = new snarkjs.Circuit(cirDef);
114
115        console.log("NConstrains Mux1: " + circuit.nConstraints);
116
117        const ct8 = [
118            bigInt("37"),
119            bigInt("47"),
120        ];
121
122        for (let i=0; i<2; i++) {
123            const w = circuit.calculateWitness({ "selector": i });
124
125            assert(circuit.checkWitness(w));
126
127            assert(w[0].equals(bigInt(1)));
128
129            // console.log(i + " -> " + w[circuit.getSignalIdx("main.out")].toString());
130            assert(w[circuit.getSignalIdx("main.out")].equals(ct8[i]));
131        }
132    });
133});