/ test / comparators.js
comparators.js
  1  const chai = require("chai");
  2  const path = require("path");
  3  const F1Field = require("ffjavascript").F1Field;
  4  const Scalar = require("ffjavascript").Scalar;
  5  exports.p = Scalar.fromString("21888242871839275222246405745257275088548364400416034343698204186575808495617");
  6  const Fr = new F1Field(exports.p);
  7  
  8  const wasm_tester = require("circom_tester").wasm;
  9  
 10  const assert = chai.assert;
 11  
 12  describe("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  });