You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

185 lines
7.1 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. const chai = require("chai");
  2. const path = require("path");
  3. const tester = require("circom").tester;
  4. const Fr = require("ffjavascript").bn128.Fr;
  5. const assert = chai.assert;
  6. describe("Comparators test", function () {
  7. this.timeout(100000);
  8. it("Should create a iszero circuit", async() => {
  9. const circuit = await tester(path.join(__dirname, "circuits", "iszero.circom"));
  10. let witness;
  11. witness = await circuit.calculateWitness({ "in": 111}, true);
  12. assert(Fr.eq(witness[0], Fr.e(1)));
  13. assert(Fr.eq(witness[1], Fr.e(0)));
  14. witness = await circuit.calculateWitness({ "in": 0 }, true);
  15. assert(Fr.eq(witness[0], Fr.e(1)));
  16. assert(Fr.eq(witness[1], Fr.e(1)));
  17. });
  18. it("Should create a isequal circuit", async() => {
  19. const circuit = await tester(path.join(__dirname, "circuits", "isequal.circom"));
  20. let witness;
  21. witness = await circuit.calculateWitness({ "in": [111,222] }, true);
  22. assert(Fr.eq(witness[0], Fr.e(1)));
  23. assert(Fr.eq(witness[1], Fr.e(0)));
  24. witness = await circuit.calculateWitness({ "in": [444,444] }, true);
  25. assert(Fr.eq(witness[0], Fr.e(1)));
  26. assert(Fr.eq(witness[1], Fr.e(1)));
  27. });
  28. it("Should create a comparison lessthan", async() => {
  29. const circuit = await tester(path.join(__dirname, "circuits", "lessthan.circom"));
  30. let witness;
  31. witness = await circuit.calculateWitness({ "in": [333,444] }), true;
  32. assert(Fr.eq(witness[0], Fr.e(1)));
  33. assert(Fr.eq(witness[1], Fr.e(1)));
  34. witness = await circuit.calculateWitness({ "in":[1,1] }, true);
  35. assert(Fr.eq(witness[0], Fr.e(1)));
  36. assert(Fr.eq(witness[1], Fr.e(0)));
  37. witness = await circuit.calculateWitness({ "in": [661, 660] }, true);
  38. assert(Fr.eq(witness[0], Fr.e(1)));
  39. assert(Fr.eq(witness[1], Fr.e(0)));
  40. witness = await circuit.calculateWitness({ "in": [0, 1] }, true);
  41. assert(Fr.eq(witness[0], Fr.e(1)));
  42. assert(Fr.eq(witness[1], Fr.e(1)));
  43. witness = await circuit.calculateWitness({ "in": [0, 444] }, true);
  44. assert(Fr.eq(witness[0], Fr.e(1)));
  45. assert(Fr.eq(witness[1], Fr.e(1)));
  46. witness = await circuit.calculateWitness({ "in": [1, 0] }, true);
  47. assert(Fr.eq(witness[0], Fr.e(1)));
  48. assert(Fr.eq(witness[1], Fr.e(0)));
  49. witness = await circuit.calculateWitness({ "in": [555, 0] }, true);
  50. assert(Fr.eq(witness[0], Fr.e(1)));
  51. assert(Fr.eq(witness[1], Fr.e(0)));
  52. witness = await circuit.calculateWitness({ "in": [0, 0] }, true);
  53. assert(Fr.eq(witness[0], Fr.e(1)));
  54. assert(Fr.eq(witness[1], Fr.e(0)));
  55. });
  56. it("Should create a comparison lesseqthan", async() => {
  57. const circuit = await tester(path.join(__dirname, "circuits", "lesseqthan.circom"));
  58. let witness;
  59. witness = await circuit.calculateWitness({ "in": [333,444] }, true);
  60. assert(Fr.eq(witness[0], Fr.e(1)));
  61. assert(Fr.eq(witness[1], Fr.e(1)));
  62. witness = await circuit.calculateWitness({ "in":[1,1] }, true);
  63. assert(Fr.eq(witness[0], Fr.e(1)));
  64. assert(Fr.eq(witness[1], Fr.e(1)));
  65. witness = await circuit.calculateWitness({ "in": [661, 660] }, true);
  66. assert(Fr.eq(witness[0], Fr.e(1)));
  67. assert(Fr.eq(witness[1], Fr.e(0)));
  68. witness = await circuit.calculateWitness({ "in": [0, 1] }, true);
  69. assert(Fr.eq(witness[0], Fr.e(1)));
  70. assert(Fr.eq(witness[1], Fr.e(1)));
  71. witness = await circuit.calculateWitness({ "in": [0, 444] }, true);
  72. assert(Fr.eq(witness[0], Fr.e(1)));
  73. assert(Fr.eq(witness[1], Fr.e(1)));
  74. witness = await circuit.calculateWitness({ "in": [1, 0] }, true);
  75. assert(Fr.eq(witness[0], Fr.e(1)));
  76. assert(Fr.eq(witness[1], Fr.e(0)));
  77. witness = await circuit.calculateWitness({ "in": [555, 0] }, true);
  78. assert(Fr.eq(witness[0], Fr.e(1)));
  79. assert(Fr.eq(witness[1], Fr.e(0)));
  80. witness = await circuit.calculateWitness({ "in": [0, 0] }, true);
  81. assert(Fr.eq(witness[0], Fr.e(1)));
  82. assert(Fr.eq(witness[1], Fr.e(1)));
  83. });
  84. it("Should create a comparison greaterthan", async() => {
  85. const circuit = await tester(path.join(__dirname, "circuits", "greaterthan.circom"));
  86. let witness;
  87. witness = await circuit.calculateWitness({ "in": [333,444] }, true);
  88. assert(Fr.eq(witness[0], Fr.e(1)));
  89. assert(Fr.eq(witness[1], Fr.e(0)));
  90. witness = await circuit.calculateWitness({ "in":[1,1] }, true);
  91. assert(Fr.eq(witness[0], Fr.e(1)));
  92. assert(Fr.eq(witness[1], Fr.e(0)));
  93. witness = await circuit.calculateWitness({ "in": [661, 660] }, true);
  94. assert(Fr.eq(witness[0], Fr.e(1)));
  95. assert(Fr.eq(witness[1], Fr.e(1)));
  96. witness = await circuit.calculateWitness({ "in": [0, 1] }, true);
  97. assert(Fr.eq(witness[0], Fr.e(1)));
  98. assert(Fr.eq(witness[1], Fr.e(0)));
  99. witness = await circuit.calculateWitness({ "in": [0, 444] }, true);
  100. assert(Fr.eq(witness[0], Fr.e(1)));
  101. assert(Fr.eq(witness[1], Fr.e(0)));
  102. witness = await circuit.calculateWitness({ "in": [1, 0] }, true);
  103. assert(Fr.eq(witness[0], Fr.e(1)));
  104. assert(Fr.eq(witness[1], Fr.e(1)));
  105. witness = await circuit.calculateWitness({ "in": [555, 0] }, true);
  106. assert(Fr.eq(witness[0], Fr.e(1)));
  107. assert(Fr.eq(witness[1], Fr.e(1)));
  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(0)));
  111. });
  112. it("Should create a comparison greatereqthan", async() => {
  113. const circuit = await tester(path.join(__dirname, "circuits", "greatereqthan.circom"));
  114. let witness;
  115. witness = await circuit.calculateWitness({ "in": [333,444] }, true);
  116. assert(Fr.eq(witness[0], Fr.e(1)));
  117. assert(Fr.eq(witness[1], Fr.e(0)));
  118. witness = await circuit.calculateWitness({ "in":[1,1] }, true);
  119. assert(Fr.eq(witness[0], Fr.e(1)));
  120. assert(Fr.eq(witness[1], Fr.e(1)));
  121. witness = await circuit.calculateWitness({ "in": [661, 660] }, true);
  122. assert(Fr.eq(witness[0], Fr.e(1)));
  123. assert(Fr.eq(witness[1], Fr.e(1)));
  124. witness = await circuit.calculateWitness({ "in": [0, 1] }, true);
  125. assert(Fr.eq(witness[0], Fr.e(1)));
  126. assert(Fr.eq(witness[1], Fr.e(0)));
  127. witness = await circuit.calculateWitness({ "in": [0, 444] }, true);
  128. assert(Fr.eq(witness[0], Fr.e(1)));
  129. assert(Fr.eq(witness[1], Fr.e(0)));
  130. witness = await circuit.calculateWitness({ "in": [1, 0] }, true);
  131. assert(Fr.eq(witness[0], Fr.e(1)));
  132. assert(Fr.eq(witness[1], Fr.e(1)));
  133. witness = await circuit.calculateWitness({ "in": [555, 0] }, true);
  134. assert(Fr.eq(witness[0], Fr.e(1)));
  135. assert(Fr.eq(witness[1], Fr.e(1)));
  136. witness = await circuit.calculateWitness({ "in": [0, 0] }, true);
  137. assert(Fr.eq(witness[0], Fr.e(1)));
  138. assert(Fr.eq(witness[1], Fr.e(1)));
  139. });
  140. });