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 });