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