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});