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