circomlib/test/comparators.js
test/comparators.jsRaw
1const chai = require("chai");
2const path = require("path");
3const snarkjs = require("snarkjs");
4const crypto = require("crypto");
5
6const compiler = require("circom");
7
8const assert = chai.assert;
9
10describe("Sum test", () => {
11 it("Should create a iszero circuit", async() => {
12 const cirDef = await compiler(path.join(__dirname, "circuits", "iszero.circom"));
13
14 const circuit = new snarkjs.Circuit(cirDef);
15
16 let witness;
17 witness = circuit.calculateWitness({ "in": 111});
18 assert(witness[0].equals(snarkjs.bigInt(1)));
19 assert(witness[1].equals(snarkjs.bigInt(0)));
20
21 witness = circuit.calculateWitness({ "in": 0 });
22 assert(witness[0].equals(snarkjs.bigInt(1)));
23 assert(witness[1].equals(snarkjs.bigInt(1)));
24 });
25 it("Should create a isequal circuit", async() => {
26 const cirDef = await compiler(path.join(__dirname, "circuits", "isequal.circom"));
27
28 const circuit = new snarkjs.Circuit(cirDef);
29
30 let witness;
31 witness = circuit.calculateWitness({ "in[0]": "111", "in[1]": "222" });
32 assert(witness[0].equals(snarkjs.bigInt(1)));
33 assert(witness[1].equals(snarkjs.bigInt(0)));
34
35 witness = circuit.calculateWitness({ "in[0]": "444", "in[1]": "444" });
36 assert(witness[0].equals(snarkjs.bigInt(1)));
37 assert(witness[1].equals(snarkjs.bigInt(1)));
38 });
39 it("Should create a comparison lessthan", async() => {
40 const cirDef = await compiler(path.join(__dirname, "circuits", "lessthan.circom"));
41
42 const circuit = new snarkjs.Circuit(cirDef);
43
44 let witness;
45 witness = circuit.calculateWitness({ "in[0]": "333", "in[1]": "444" });
46 assert(witness[0].equals(snarkjs.bigInt(1)));
47 assert(witness[1].equals(snarkjs.bigInt(1)));
48
49 witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "1" });
50 assert(witness[0].equals(snarkjs.bigInt(1)));
51 assert(witness[1].equals(snarkjs.bigInt(0)));
52
53 witness = circuit.calculateWitness({ "in[0]": "661", "in[1]": "660" });
54 assert(witness[0].equals(snarkjs.bigInt(1)));
55 assert(witness[1].equals(snarkjs.bigInt(0)));
56
57 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "1" });
58 assert(witness[0].equals(snarkjs.bigInt(1)));
59 assert(witness[1].equals(snarkjs.bigInt(1)));
60
61 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "444" });
62 assert(witness[0].equals(snarkjs.bigInt(1)));
63 assert(witness[1].equals(snarkjs.bigInt(1)));
64
65 witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "0" });
66 assert(witness[0].equals(snarkjs.bigInt(1)));
67 assert(witness[1].equals(snarkjs.bigInt(0)));
68
69 witness = circuit.calculateWitness({ "in[0]": "555", "in[1]": "0" });
70 assert(witness[0].equals(snarkjs.bigInt(1)));
71 assert(witness[1].equals(snarkjs.bigInt(0)));
72
73 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "0" });
74 assert(witness[0].equals(snarkjs.bigInt(1)));
75 assert(witness[1].equals(snarkjs.bigInt(0)));
76 });
77 it("Should create a comparison lesseqthan", async() => {
78 const cirDef = await compiler(path.join(__dirname, "circuits", "lesseqthan.circom"));
79
80 const circuit = new snarkjs.Circuit(cirDef);
81
82 let witness;
83 witness = circuit.calculateWitness({ "in[0]": "333", "in[1]": "444" });
84 assert(witness[0].equals(snarkjs.bigInt(1)));
85 assert(witness[1].equals(snarkjs.bigInt(1)));
86
87 witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "1" });
88 assert(witness[0].equals(snarkjs.bigInt(1)));
89 assert(witness[1].equals(snarkjs.bigInt(1)));
90
91 witness = circuit.calculateWitness({ "in[0]": "661", "in[1]": "660" });
92 assert(witness[0].equals(snarkjs.bigInt(1)));
93 assert(witness[1].equals(snarkjs.bigInt(0)));
94
95 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "1" });
96 assert(witness[0].equals(snarkjs.bigInt(1)));
97 assert(witness[1].equals(snarkjs.bigInt(1)));
98
99 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "444" });
100 assert(witness[0].equals(snarkjs.bigInt(1)));
101 assert(witness[1].equals(snarkjs.bigInt(1)));
102
103 witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "0" });
104 assert(witness[0].equals(snarkjs.bigInt(1)));
105 assert(witness[1].equals(snarkjs.bigInt(0)));
106
107 witness = circuit.calculateWitness({ "in[0]": "555", "in[1]": "0" });
108 assert(witness[0].equals(snarkjs.bigInt(1)));
109 assert(witness[1].equals(snarkjs.bigInt(0)));
110
111 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "0" });
112 assert(witness[0].equals(snarkjs.bigInt(1)));
113 assert(witness[1].equals(snarkjs.bigInt(1)));
114 });
115 it("Should create a comparison greaterthan", async() => {
116 const cirDef = await compiler(path.join(__dirname, "circuits", "greaterthan.circom"));
117
118 const circuit = new snarkjs.Circuit(cirDef);
119
120 let witness;
121 witness = circuit.calculateWitness({ "in[0]": "333", "in[1]": "444" });
122 assert(witness[0].equals(snarkjs.bigInt(1)));
123 assert(witness[1].equals(snarkjs.bigInt(0)));
124
125 witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "1" });
126 assert(witness[0].equals(snarkjs.bigInt(1)));
127 assert(witness[1].equals(snarkjs.bigInt(0)));
128
129 witness = circuit.calculateWitness({ "in[0]": "661", "in[1]": "660" });
130 assert(witness[0].equals(snarkjs.bigInt(1)));
131 assert(witness[1].equals(snarkjs.bigInt(1)));
132
133 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "1" });
134 assert(witness[0].equals(snarkjs.bigInt(1)));
135 assert(witness[1].equals(snarkjs.bigInt(0)));
136
137 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "444" });
138 assert(witness[0].equals(snarkjs.bigInt(1)));
139 assert(witness[1].equals(snarkjs.bigInt(0)));
140
141 witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "0" });
142 assert(witness[0].equals(snarkjs.bigInt(1)));
143 assert(witness[1].equals(snarkjs.bigInt(1)));
144
145 witness = circuit.calculateWitness({ "in[0]": "555", "in[1]": "0" });
146 assert(witness[0].equals(snarkjs.bigInt(1)));
147 assert(witness[1].equals(snarkjs.bigInt(1)));
148
149 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "0" });
150 assert(witness[0].equals(snarkjs.bigInt(1)));
151 assert(witness[1].equals(snarkjs.bigInt(0)));
152 });
153 it("Should create a comparison greatereqthan", async() => {
154 const cirDef = await compiler(path.join(__dirname, "circuits", "greatereqthan.circom"));
155
156 const circuit = new snarkjs.Circuit(cirDef);
157
158 console.log("NConstraints BalancesUpdater: " + circuit.nConstraints);
159
160 let witness;
161 witness = circuit.calculateWitness({ "in[0]": "333", "in[1]": "444" });
162 assert(witness[0].equals(snarkjs.bigInt(1)));
163 assert(witness[1].equals(snarkjs.bigInt(0)));
164
165 witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "1" });
166 assert(witness[0].equals(snarkjs.bigInt(1)));
167 assert(witness[1].equals(snarkjs.bigInt(1)));
168
169 witness = circuit.calculateWitness({ "in[0]": "661", "in[1]": "660" });
170 assert(witness[0].equals(snarkjs.bigInt(1)));
171 assert(witness[1].equals(snarkjs.bigInt(1)));
172
173 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "1" });
174 assert(witness[0].equals(snarkjs.bigInt(1)));
175 assert(witness[1].equals(snarkjs.bigInt(0)));
176
177 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "444" });
178 assert(witness[0].equals(snarkjs.bigInt(1)));
179 assert(witness[1].equals(snarkjs.bigInt(0)));
180
181 witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "0" });
182 assert(witness[0].equals(snarkjs.bigInt(1)));
183 assert(witness[1].equals(snarkjs.bigInt(1)));
184
185 witness = circuit.calculateWitness({ "in[0]": "555", "in[1]": "0" });
186 assert(witness[0].equals(snarkjs.bigInt(1)));
187 assert(witness[1].equals(snarkjs.bigInt(1)));
188
189 witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "0" });
190 assert(witness[0].equals(snarkjs.bigInt(1)));
191 assert(witness[1].equals(snarkjs.bigInt(1)));
192 });
193});