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