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