arnaucube
arnaucube/grapevine-sonobePublic Self-hosted repository
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});