@coti-io/coti-contracts 1.0.8 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.sol +260 -0
- package/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.sol +264 -0
- package/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.sol +91 -0
- package/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.sol +91 -0
- package/contracts/mocks/utils/mpc/Comparison128BitTestsContract.sol +158 -0
- package/contracts/mocks/utils/mpc/Comparison256BitTestsContract.sol +158 -0
- package/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.sol +185 -0
- package/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.sol +190 -0
- package/contracts/utils/mpc/MpcCore.sol +2804 -180
- package/hardhat.config.ts +6 -2
- package/package.json +2 -2
- package/test/token/PrivateERC20/PrivateERC20.test.ts +3 -3
- package/test/utils/mpc/Unsigned128BitIntegers.test.ts +945 -0
- package/test/utils/mpc/Unsigned256BitIntegers.test.ts +1124 -0
- package/test/utils/mpc/helpers.ts +77 -0
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.ts +341 -0
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.ts +347 -0
- package/typechain-types/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.ts +186 -0
- package/typechain-types/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.ts +186 -0
- package/typechain-types/contracts/mocks/utils/mpc/Comparison128BitTestsContract.ts +260 -0
- package/typechain-types/contracts/mocks/utils/mpc/Comparison256BitTestsContract.ts +260 -0
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.ts +302 -0
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +322 -0
- package/typechain-types/contracts/mocks/utils/mpc/index.ts +8 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +349 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +364 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128BitTestsContract__factory.ts +182 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +182 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128BitTestsContract__factory.ts +255 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256BitTestsContract__factory.ts +255 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract__factory.ts +332 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +380 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +8 -0
- package/typechain-types/hardhat.d.ts +144 -0
- package/typechain-types/index.ts +16 -0
- package/contracts/package.json +0 -11
|
@@ -0,0 +1,1124 @@
|
|
|
1
|
+
import hre from "hardhat"
|
|
2
|
+
import { expect } from "chai"
|
|
3
|
+
import { setupAccounts } from "../accounts"
|
|
4
|
+
import { ItUint256Struct } from "../../../typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract"
|
|
5
|
+
import { decryptUint256, encryptUint256, generateRandomNumber } from "./helpers"
|
|
6
|
+
|
|
7
|
+
const MAX_UINT256 = BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
|
|
8
|
+
|
|
9
|
+
async function deploy() {
|
|
10
|
+
const [owner, otherAccount] = await setupAccounts()
|
|
11
|
+
|
|
12
|
+
const extendedMiscellaneousTestsContract = await hre.ethers.getContractFactory("Miscellaneous256BitTestsContract")
|
|
13
|
+
const extendedMiscellaneousTests = await extendedMiscellaneousTestsContract.connect(owner).deploy()
|
|
14
|
+
await extendedMiscellaneousTests.waitForDeployment()
|
|
15
|
+
|
|
16
|
+
const extendedArithmeticTestsContract = await hre.ethers.getContractFactory("Arithmetic256BitTestsContract")
|
|
17
|
+
const extendedArithmeticTests = await extendedArithmeticTestsContract.connect(owner).deploy()
|
|
18
|
+
await extendedArithmeticTests.waitForDeployment()
|
|
19
|
+
|
|
20
|
+
const extendedBitwiseTestsContract = await hre.ethers.getContractFactory("Bitwise256BitTestsContract")
|
|
21
|
+
const extendedBitwiseTests = await extendedBitwiseTestsContract.connect(owner).deploy()
|
|
22
|
+
await extendedBitwiseTests.waitForDeployment()
|
|
23
|
+
|
|
24
|
+
const extendedComparisonTestsContract = await hre.ethers.getContractFactory("Comparison256BitTestsContract")
|
|
25
|
+
const extendedComparisonTests = await extendedComparisonTestsContract.connect(owner).deploy()
|
|
26
|
+
await extendedComparisonTests.waitForDeployment()
|
|
27
|
+
|
|
28
|
+
return { extendedMiscellaneousTests, extendedArithmeticTests, extendedBitwiseTests, extendedComparisonTests, owner }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
describe("MPC Core", function () {
|
|
32
|
+
let deployment: Awaited<ReturnType<typeof deploy>>
|
|
33
|
+
|
|
34
|
+
before(async function () {
|
|
35
|
+
deployment = await deploy()
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
describe("256-bit unsigned integers", function () {
|
|
39
|
+
it("validateCiphertext", async function () {
|
|
40
|
+
const { extendedMiscellaneousTests, owner } = deployment
|
|
41
|
+
|
|
42
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
43
|
+
const numbers: bigint[] = []
|
|
44
|
+
const encryptedNumbers: ItUint256Struct[] = []
|
|
45
|
+
|
|
46
|
+
for (let i = 0; i < 1; i++) {
|
|
47
|
+
// Generate random 256-bit integers
|
|
48
|
+
const number = generateRandomNumber(32)
|
|
49
|
+
|
|
50
|
+
numbers.push(number)
|
|
51
|
+
encryptedNumbers.push(
|
|
52
|
+
await encryptUint256(
|
|
53
|
+
number,
|
|
54
|
+
owner,
|
|
55
|
+
await extendedMiscellaneousTests.getAddress(),
|
|
56
|
+
extendedMiscellaneousTests.validateCiphertextTest.fragment.selector
|
|
57
|
+
) as ItUint256Struct
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Call validateCiphertextTest with the array
|
|
62
|
+
await (await extendedMiscellaneousTests.validateCiphertextTest(encryptedNumbers)).wait()
|
|
63
|
+
|
|
64
|
+
// Verify results
|
|
65
|
+
for (let i = 0; i < 1; i++) {
|
|
66
|
+
const result = await extendedMiscellaneousTests.numbers2(i)
|
|
67
|
+
expect(result).to.equal(numbers[i])
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it("offBoardToUser", async function () {
|
|
72
|
+
const { extendedMiscellaneousTests, owner } = deployment
|
|
73
|
+
|
|
74
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
75
|
+
const numbers: bigint[] = []
|
|
76
|
+
|
|
77
|
+
for (let i = 0; i < 1; i++) {
|
|
78
|
+
// Generate random 256-bit integers
|
|
79
|
+
numbers.push(generateRandomNumber(32))
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Call validateCiphertextTest with the array
|
|
83
|
+
await (await extendedMiscellaneousTests.offBoardToUserTest(numbers)).wait()
|
|
84
|
+
|
|
85
|
+
// Verify results
|
|
86
|
+
for (let i = 0; i < 1; i++) {
|
|
87
|
+
const ctNumber = await extendedMiscellaneousTests.ctNumbers2(i)
|
|
88
|
+
|
|
89
|
+
const result = await decryptUint256(ctNumber, owner)
|
|
90
|
+
|
|
91
|
+
expect(result).to.equal(numbers[i])
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
it("setPublic", async function () {
|
|
96
|
+
const { extendedMiscellaneousTests } = deployment
|
|
97
|
+
|
|
98
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
99
|
+
const numbers: bigint[] = []
|
|
100
|
+
|
|
101
|
+
for (let i = 0; i < 1; i++) {
|
|
102
|
+
// Generate random 256-bit integers
|
|
103
|
+
numbers.push(generateRandomNumber(32))
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Call setPublicTest with the arrays
|
|
107
|
+
await (await extendedMiscellaneousTests.setPublicTest(numbers)).wait()
|
|
108
|
+
|
|
109
|
+
// Verify results
|
|
110
|
+
for (let i = 0; i < 1; i++) {
|
|
111
|
+
const result = await extendedMiscellaneousTests.numbers2(i)
|
|
112
|
+
expect(result).to.equal(numbers[i])
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
it("rand", async function () {
|
|
117
|
+
const { extendedMiscellaneousTests } = deployment
|
|
118
|
+
|
|
119
|
+
const length: bigint = generateRandomNumber(1)
|
|
120
|
+
|
|
121
|
+
// Call setPublicTest with the arrays
|
|
122
|
+
await (await extendedMiscellaneousTests.randTest2(length)).wait()
|
|
123
|
+
|
|
124
|
+
// Verify results
|
|
125
|
+
for (let i = 0; i < length; i++) {
|
|
126
|
+
const result = await extendedMiscellaneousTests.numbers2(i)
|
|
127
|
+
expect(result).to.not.equal(0n)
|
|
128
|
+
}
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
it("randBoundedBits", async function () {
|
|
132
|
+
const { extendedMiscellaneousTests } = deployment
|
|
133
|
+
|
|
134
|
+
// Generate an array of 10 random 8-bit integers
|
|
135
|
+
const numbers: bigint[] = []
|
|
136
|
+
|
|
137
|
+
while (numbers.length < 1) {
|
|
138
|
+
// Generate random 8-bit integers
|
|
139
|
+
numbers.push(generateRandomNumber(1))
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Call setPublicTest with the arrays
|
|
143
|
+
await (await extendedMiscellaneousTests.randBoundedBitsTest2(numbers)).wait()
|
|
144
|
+
|
|
145
|
+
// Verify results
|
|
146
|
+
for (let i = 0; i < 1; i++) {
|
|
147
|
+
const result = await extendedMiscellaneousTests.numbers2(i)
|
|
148
|
+
expect(result).to.not.equal(0n)
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
it("transfer", async function () {
|
|
153
|
+
const { extendedMiscellaneousTests } = deployment
|
|
154
|
+
|
|
155
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
156
|
+
const aArr: bigint[] = []
|
|
157
|
+
const bArr: bigint[] = []
|
|
158
|
+
const amountArr: bigint[] = []
|
|
159
|
+
const newA: bigint[] = []
|
|
160
|
+
const newB: bigint[] = []
|
|
161
|
+
const successArr: boolean[] = []
|
|
162
|
+
|
|
163
|
+
while (aArr.length < 1) {
|
|
164
|
+
// Generate random 256-bit integers
|
|
165
|
+
|
|
166
|
+
const a = generateRandomNumber(30)
|
|
167
|
+
const b = generateRandomNumber(30)
|
|
168
|
+
const amount = generateRandomNumber(30)
|
|
169
|
+
|
|
170
|
+
if (b + amount > MAX_UINT256) continue
|
|
171
|
+
|
|
172
|
+
aArr.push(a)
|
|
173
|
+
bArr.push(b)
|
|
174
|
+
amountArr.push(amount)
|
|
175
|
+
|
|
176
|
+
const success = a >= amount
|
|
177
|
+
|
|
178
|
+
newA.push(success ? a - amount : a)
|
|
179
|
+
newB.push(success ? b + amount : b)
|
|
180
|
+
successArr.push(success)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Call transferTest with the arrays
|
|
184
|
+
await (await extendedMiscellaneousTests.transferTest(aArr, bArr, amountArr)).wait()
|
|
185
|
+
|
|
186
|
+
// Verify results
|
|
187
|
+
for (let i = 0; i < 1; i++) {
|
|
188
|
+
const a = await extendedMiscellaneousTests.a2(i)
|
|
189
|
+
const b = await extendedMiscellaneousTests.b2(i)
|
|
190
|
+
const success = await extendedMiscellaneousTests.success(i)
|
|
191
|
+
|
|
192
|
+
expect(a).to.equal(newA[i])
|
|
193
|
+
expect(b).to.equal(newB[i])
|
|
194
|
+
expect(success).to.equal(successArr[i])
|
|
195
|
+
}
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
it("transferWithAllowance", async function () {
|
|
199
|
+
const { extendedMiscellaneousTests } = deployment
|
|
200
|
+
|
|
201
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
202
|
+
const aArr: bigint[] = []
|
|
203
|
+
const bArr: bigint[] = []
|
|
204
|
+
const amountArr: bigint[] = []
|
|
205
|
+
const allowanceArr: bigint[] = []
|
|
206
|
+
const newA: bigint[] = []
|
|
207
|
+
const newB: bigint[] = []
|
|
208
|
+
const successArr: boolean[] = []
|
|
209
|
+
const newAllowanceArr: bigint[] = []
|
|
210
|
+
|
|
211
|
+
while (aArr.length < 1) {
|
|
212
|
+
// Generate random 256-bit integers
|
|
213
|
+
|
|
214
|
+
const a = generateRandomNumber(30)
|
|
215
|
+
const b = generateRandomNumber(30)
|
|
216
|
+
const amount = generateRandomNumber(30)
|
|
217
|
+
const allowance = generateRandomNumber(30)
|
|
218
|
+
|
|
219
|
+
if (b + amount > MAX_UINT256) continue
|
|
220
|
+
|
|
221
|
+
aArr.push(a)
|
|
222
|
+
bArr.push(b)
|
|
223
|
+
amountArr.push(amount)
|
|
224
|
+
allowanceArr.push(allowance)
|
|
225
|
+
|
|
226
|
+
const success = a >= amount && amount <= allowance
|
|
227
|
+
|
|
228
|
+
newA.push(success ? a - amount : a)
|
|
229
|
+
newB.push(success ? b + amount : b)
|
|
230
|
+
successArr.push(success)
|
|
231
|
+
newAllowanceArr.push(success ? allowance - amount : allowance)
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Call transferWithAllowanceTest with the arrays
|
|
235
|
+
await (await extendedMiscellaneousTests.transferWithAllowanceTest(aArr, bArr, amountArr, allowanceArr)).wait()
|
|
236
|
+
|
|
237
|
+
// Verify results
|
|
238
|
+
for (let i = 0; i < 1; i++) {
|
|
239
|
+
const a = await extendedMiscellaneousTests.a2(i)
|
|
240
|
+
const b = await extendedMiscellaneousTests.b2(i)
|
|
241
|
+
const success = await extendedMiscellaneousTests.success(i)
|
|
242
|
+
const allowance = await extendedMiscellaneousTests.allowance2(i)
|
|
243
|
+
|
|
244
|
+
expect(a).to.equal(newA[i])
|
|
245
|
+
expect(b).to.equal(newB[i])
|
|
246
|
+
expect(success).to.equal(successArr[i])
|
|
247
|
+
expect(allowance).to.equal(newAllowanceArr[i])
|
|
248
|
+
}
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
it("add", async function () {
|
|
252
|
+
const { extendedArithmeticTests } = deployment
|
|
253
|
+
|
|
254
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
255
|
+
const numbers1: bigint[] = []
|
|
256
|
+
const numbers2: bigint[] = []
|
|
257
|
+
const expectedResults: bigint[] = []
|
|
258
|
+
|
|
259
|
+
for (let i = 0; i < 1; i++) {
|
|
260
|
+
// Generate random 256-bit integers
|
|
261
|
+
const num1 = generateRandomNumber(30)
|
|
262
|
+
const num2 = generateRandomNumber(30)
|
|
263
|
+
|
|
264
|
+
numbers1.push(num1)
|
|
265
|
+
numbers2.push(num2)
|
|
266
|
+
expectedResults.push(num1 + num2)
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Call addTest with the arrays
|
|
270
|
+
await (await extendedArithmeticTests.addTest(numbers1, numbers2)).wait()
|
|
271
|
+
|
|
272
|
+
// Verify results
|
|
273
|
+
for (let i = 0; i < 1; i++) {
|
|
274
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
275
|
+
expect(result).to.equal(expectedResults[i])
|
|
276
|
+
}
|
|
277
|
+
})
|
|
278
|
+
|
|
279
|
+
it("checkedAdd", async function () {
|
|
280
|
+
const { extendedArithmeticTests, owner } = deployment
|
|
281
|
+
|
|
282
|
+
for (let i = 0; i < 1; i++) {
|
|
283
|
+
// Generate random 256-bit integers
|
|
284
|
+
const num1 = generateRandomNumber(32)
|
|
285
|
+
const num2 = generateRandomNumber(32)
|
|
286
|
+
|
|
287
|
+
if (num1 + num2 <= MAX_UINT256) { // max uint256
|
|
288
|
+
// Call checkedAddTest
|
|
289
|
+
await (await extendedArithmeticTests.checkedAddTest(num1, num2)).wait()
|
|
290
|
+
|
|
291
|
+
const result = await extendedArithmeticTests.numbers2(0)
|
|
292
|
+
expect(result).to.equal(num1 + num2)
|
|
293
|
+
} else {
|
|
294
|
+
// Expect revert
|
|
295
|
+
const tx = await extendedArithmeticTests.checkedAddTest(num1, num2)
|
|
296
|
+
|
|
297
|
+
try {
|
|
298
|
+
await tx.wait()
|
|
299
|
+
} catch (e) {
|
|
300
|
+
const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
|
|
301
|
+
expect(receipt?.status).to.be.equal(0)
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
it("checkedAddWithOverflowBit", async function () {
|
|
308
|
+
const { extendedArithmeticTests } = deployment
|
|
309
|
+
|
|
310
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
311
|
+
const numbers1: bigint[] = []
|
|
312
|
+
const numbers2: bigint[] = []
|
|
313
|
+
const expectedOverflows: boolean[] = []
|
|
314
|
+
const expectedResults: bigint[] = []
|
|
315
|
+
|
|
316
|
+
for (let i = 0; i < 1; i++) {
|
|
317
|
+
// Generate random 256-bit integers
|
|
318
|
+
const num1 = generateRandomNumber(32)
|
|
319
|
+
const num2 = generateRandomNumber(32)
|
|
320
|
+
|
|
321
|
+
numbers1.push(num1)
|
|
322
|
+
numbers2.push(num2)
|
|
323
|
+
expectedOverflows.push(num1 + num2 > MAX_UINT256)
|
|
324
|
+
expectedResults.push(num1 + num2)
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Call checkedAddWithOverflowBitTest with the arrays
|
|
328
|
+
await (await extendedArithmeticTests.checkedAddWithOverflowBitTest(numbers1, numbers2)).wait()
|
|
329
|
+
|
|
330
|
+
// Verify results
|
|
331
|
+
for (let i = 0; i < 1; i++) {
|
|
332
|
+
const bit = await extendedArithmeticTests.overflows(i)
|
|
333
|
+
const bitLHS = await extendedArithmeticTests.overflowsLHS(i)
|
|
334
|
+
const bitRHS = await extendedArithmeticTests.overflowsRHS(i)
|
|
335
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
336
|
+
const resultLHS = await extendedArithmeticTests.numbersLHS2(i)
|
|
337
|
+
const resultRHS = await extendedArithmeticTests.numbersRHS2(i)
|
|
338
|
+
|
|
339
|
+
expect(bit).to.equal(expectedOverflows[i])
|
|
340
|
+
expect(bitLHS).to.equal(expectedOverflows[i])
|
|
341
|
+
expect(bitRHS).to.equal(expectedOverflows[i])
|
|
342
|
+
|
|
343
|
+
if (bit) {
|
|
344
|
+
expect(result).to.not.equal(expectedResults[i])
|
|
345
|
+
expect(resultLHS).to.not.equal(expectedResults[i])
|
|
346
|
+
expect(resultRHS).to.not.equal(expectedResults[i])
|
|
347
|
+
} else {
|
|
348
|
+
expect(result).to.equal(expectedResults[i])
|
|
349
|
+
expect(resultLHS).to.equal(expectedResults[i])
|
|
350
|
+
expect(resultRHS).to.equal(expectedResults[i])
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
})
|
|
354
|
+
|
|
355
|
+
it("sub", async function () {
|
|
356
|
+
const { extendedArithmeticTests } = deployment
|
|
357
|
+
|
|
358
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
359
|
+
const numbers1: bigint[] = []
|
|
360
|
+
const numbers2: bigint[] = []
|
|
361
|
+
const expectedResults: bigint[] = []
|
|
362
|
+
|
|
363
|
+
for (let i = 0; i < 1; i++) {
|
|
364
|
+
// Generate random 256-bit integers
|
|
365
|
+
const num1 = generateRandomNumber(32)
|
|
366
|
+
const num2 = generateRandomNumber(32)
|
|
367
|
+
|
|
368
|
+
if (num1 >= num2) {
|
|
369
|
+
numbers1.push(num1)
|
|
370
|
+
numbers2.push(num2)
|
|
371
|
+
expectedResults.push(num1 - num2)
|
|
372
|
+
} else {
|
|
373
|
+
numbers1.push(num2)
|
|
374
|
+
numbers2.push(num1)
|
|
375
|
+
expectedResults.push(num2 - num1)
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Call subTest with the arrays
|
|
380
|
+
await (await extendedArithmeticTests.subTest(numbers1, numbers2)).wait()
|
|
381
|
+
|
|
382
|
+
// Verify results
|
|
383
|
+
for (let i = 0; i < 1; i++) {
|
|
384
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
385
|
+
expect(result).to.equal(expectedResults[i])
|
|
386
|
+
}
|
|
387
|
+
})
|
|
388
|
+
|
|
389
|
+
it("checkedSub", async function () {
|
|
390
|
+
const { extendedArithmeticTests, owner } = deployment
|
|
391
|
+
|
|
392
|
+
for (let i = 0; i < 1; i++) {
|
|
393
|
+
// Generate random 256-bit integers
|
|
394
|
+
const num1 = generateRandomNumber(32)
|
|
395
|
+
const num2 = generateRandomNumber(32)
|
|
396
|
+
|
|
397
|
+
if (num1 - num2 >= 0n) {
|
|
398
|
+
// Call checkedSubTest
|
|
399
|
+
await (await extendedArithmeticTests.checkedSubTest(num1, num2)).wait()
|
|
400
|
+
|
|
401
|
+
const result = await extendedArithmeticTests.numbers2(0)
|
|
402
|
+
expect(result).to.equal(num1 - num2)
|
|
403
|
+
} else {
|
|
404
|
+
// Expect revert
|
|
405
|
+
const tx = await extendedArithmeticTests.checkedSubTest(num1, num2)
|
|
406
|
+
|
|
407
|
+
try {
|
|
408
|
+
await tx.wait()
|
|
409
|
+
} catch (e) {
|
|
410
|
+
const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
|
|
411
|
+
expect(receipt?.status).to.be.equal(0)
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
})
|
|
416
|
+
|
|
417
|
+
it("checkedSubWithOverflowBit", async function () {
|
|
418
|
+
const { extendedArithmeticTests } = deployment
|
|
419
|
+
|
|
420
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
421
|
+
const numbers1: bigint[] = []
|
|
422
|
+
const numbers2: bigint[] = []
|
|
423
|
+
const expectedOverflows: boolean[] = []
|
|
424
|
+
const expectedResults: bigint[] = []
|
|
425
|
+
|
|
426
|
+
for (let i = 0; i < 1; i++) {
|
|
427
|
+
// Generate random 256-bit integers
|
|
428
|
+
const num1 = generateRandomNumber(32)
|
|
429
|
+
const num2 = generateRandomNumber(32)
|
|
430
|
+
|
|
431
|
+
numbers1.push(num1)
|
|
432
|
+
numbers2.push(num2)
|
|
433
|
+
expectedOverflows.push(num1 - num2 < 0n)
|
|
434
|
+
expectedResults.push(num1 - num2)
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// Call checkedSubWithOverflowBitTest with the arrays
|
|
438
|
+
await (await extendedArithmeticTests.checkedSubWithOverflowBitTest(numbers1, numbers2)).wait()
|
|
439
|
+
|
|
440
|
+
// Verify results
|
|
441
|
+
for (let i = 0; i < 1; i++) {
|
|
442
|
+
const bit = await extendedArithmeticTests.overflows(i)
|
|
443
|
+
const bitLHS = await extendedArithmeticTests.overflowsLHS(i)
|
|
444
|
+
const bitRHS = await extendedArithmeticTests.overflowsRHS(i)
|
|
445
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
446
|
+
const resultLHS = await extendedArithmeticTests.numbersLHS2(i)
|
|
447
|
+
const resultRHS = await extendedArithmeticTests.numbersRHS2(i)
|
|
448
|
+
|
|
449
|
+
expect(bit).to.equal(expectedOverflows[i])
|
|
450
|
+
expect(bitLHS).to.equal(expectedOverflows[i])
|
|
451
|
+
expect(bitRHS).to.equal(expectedOverflows[i])
|
|
452
|
+
|
|
453
|
+
if (bit) {
|
|
454
|
+
expect(result).to.not.equal(expectedResults[i])
|
|
455
|
+
expect(resultLHS).to.not.equal(expectedResults[i])
|
|
456
|
+
expect(resultRHS).to.not.equal(expectedResults[i])
|
|
457
|
+
} else {
|
|
458
|
+
expect(result).to.equal(expectedResults[i])
|
|
459
|
+
expect(resultLHS).to.equal(expectedResults[i])
|
|
460
|
+
expect(resultRHS).to.equal(expectedResults[i])
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
})
|
|
464
|
+
|
|
465
|
+
it("mul", async function () {
|
|
466
|
+
const { extendedArithmeticTests } = deployment
|
|
467
|
+
|
|
468
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
469
|
+
const numbers1: bigint[] = []
|
|
470
|
+
const numbers2: bigint[] = []
|
|
471
|
+
const expectedResults: bigint[] = []
|
|
472
|
+
|
|
473
|
+
while (numbers1.length < 1) {
|
|
474
|
+
// Generate random 256-bit integers
|
|
475
|
+
const num1 = generateRandomNumber(17)
|
|
476
|
+
const num2 = generateRandomNumber(17)
|
|
477
|
+
|
|
478
|
+
if (num1 * num2 > MAX_UINT256) continue
|
|
479
|
+
|
|
480
|
+
numbers1.push(num1)
|
|
481
|
+
numbers2.push(num2)
|
|
482
|
+
expectedResults.push(num1 * num2)
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
// Call addTest with the arrays
|
|
486
|
+
await (await extendedArithmeticTests.mulTest(numbers1, numbers2, 0n, { gasLimit: 80000000 })).wait()
|
|
487
|
+
|
|
488
|
+
// Verify results
|
|
489
|
+
for (let i = 0; i < 1; i++) {
|
|
490
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
491
|
+
|
|
492
|
+
expect(result).to.equal(expectedResults[i])
|
|
493
|
+
}
|
|
494
|
+
})
|
|
495
|
+
|
|
496
|
+
it("mulLHS", async function () {
|
|
497
|
+
const { extendedArithmeticTests } = deployment
|
|
498
|
+
|
|
499
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
500
|
+
const numbers1: bigint[] = []
|
|
501
|
+
const numbers2: bigint[] = []
|
|
502
|
+
const expectedResults: bigint[] = []
|
|
503
|
+
|
|
504
|
+
while (numbers1.length < 1) {
|
|
505
|
+
// Generate random 256-bit integers
|
|
506
|
+
const num1 = generateRandomNumber(17)
|
|
507
|
+
const num2 = generateRandomNumber(17)
|
|
508
|
+
|
|
509
|
+
if (num1 * num2 > MAX_UINT256) continue
|
|
510
|
+
|
|
511
|
+
numbers1.push(num1)
|
|
512
|
+
numbers2.push(num2)
|
|
513
|
+
expectedResults.push(num1 * num2)
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// Call addTest with the arrays
|
|
517
|
+
await (await extendedArithmeticTests.mulTest(numbers1, numbers2, 1n, { gasLimit: 80000000 })).wait()
|
|
518
|
+
|
|
519
|
+
// Verify results
|
|
520
|
+
for (let i = 0; i < 1; i++) {
|
|
521
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
522
|
+
|
|
523
|
+
expect(result).to.equal(expectedResults[i])
|
|
524
|
+
}
|
|
525
|
+
})
|
|
526
|
+
|
|
527
|
+
it("mulRHS", async function () {
|
|
528
|
+
const { extendedArithmeticTests } = deployment
|
|
529
|
+
|
|
530
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
531
|
+
const numbers1: bigint[] = []
|
|
532
|
+
const numbers2: bigint[] = []
|
|
533
|
+
const expectedResults: bigint[] = []
|
|
534
|
+
|
|
535
|
+
while (numbers1.length < 1) {
|
|
536
|
+
// Generate random 256-bit integers
|
|
537
|
+
const num1 = generateRandomNumber(17)
|
|
538
|
+
const num2 = generateRandomNumber(17)
|
|
539
|
+
|
|
540
|
+
if (num1 * num2 > MAX_UINT256) continue
|
|
541
|
+
|
|
542
|
+
numbers1.push(num1)
|
|
543
|
+
numbers2.push(num2)
|
|
544
|
+
expectedResults.push(num1 * num2)
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
// Call addTest with the arrays
|
|
548
|
+
await (await extendedArithmeticTests.mulTest(numbers1, numbers2, 2n, { gasLimit: 80000000 })).wait()
|
|
549
|
+
|
|
550
|
+
// Verify results
|
|
551
|
+
for (let i = 0; i < 1; i++) {
|
|
552
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
553
|
+
|
|
554
|
+
expect(result).to.equal(expectedResults[i])
|
|
555
|
+
}
|
|
556
|
+
})
|
|
557
|
+
|
|
558
|
+
it("checkedMul", async function () {
|
|
559
|
+
const { extendedArithmeticTests, owner } = deployment
|
|
560
|
+
|
|
561
|
+
for (let i = 0; i < 10; i++) {
|
|
562
|
+
// Generate random 256-bit integers
|
|
563
|
+
const num1 = generateRandomNumber(17)
|
|
564
|
+
const num2 = generateRandomNumber(17)
|
|
565
|
+
|
|
566
|
+
if (num1 * num2 <= MAX_UINT256) {
|
|
567
|
+
// Call checkedSubTest
|
|
568
|
+
await (await extendedArithmeticTests.checkedMulTest(num1, num2, 0n, { gasLimit: 80000000 })).wait()
|
|
569
|
+
|
|
570
|
+
const result = await extendedArithmeticTests.numbers2(0)
|
|
571
|
+
expect(result).to.equal(num1 * num2)
|
|
572
|
+
} else {
|
|
573
|
+
// Expect revert
|
|
574
|
+
const tx = await extendedArithmeticTests.checkedMulTest(num1, num2, 0n, { gasLimit: 80000000 })
|
|
575
|
+
|
|
576
|
+
try {
|
|
577
|
+
await tx.wait()
|
|
578
|
+
} catch (e) {
|
|
579
|
+
const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
|
|
580
|
+
expect(receipt?.status).to.be.equal(0)
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
})
|
|
585
|
+
|
|
586
|
+
it("checkedMulLHS", async function () {
|
|
587
|
+
const { extendedArithmeticTests, owner } = deployment
|
|
588
|
+
|
|
589
|
+
for (let i = 0; i < 10; i++) {
|
|
590
|
+
// Generate random 256-bit integers
|
|
591
|
+
const num1 = generateRandomNumber(17)
|
|
592
|
+
const num2 = generateRandomNumber(17)
|
|
593
|
+
|
|
594
|
+
if (num1 * num2 <= MAX_UINT256) {
|
|
595
|
+
// Call checkedSubTest
|
|
596
|
+
await (await extendedArithmeticTests.checkedMulTest(num1, num2, 1n, { gasLimit: 80000000 })).wait()
|
|
597
|
+
|
|
598
|
+
const result = await extendedArithmeticTests.numbers2(0)
|
|
599
|
+
expect(result).to.equal(num1 * num2)
|
|
600
|
+
} else {
|
|
601
|
+
// Expect revert
|
|
602
|
+
const tx = await extendedArithmeticTests.checkedMulTest(num1, num2, 1n, { gasLimit: 80000000 })
|
|
603
|
+
|
|
604
|
+
try {
|
|
605
|
+
await tx.wait()
|
|
606
|
+
} catch (e) {
|
|
607
|
+
const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
|
|
608
|
+
expect(receipt?.status).to.be.equal(0)
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
})
|
|
613
|
+
|
|
614
|
+
it("checkedMulRHS", async function () {
|
|
615
|
+
const { extendedArithmeticTests, owner } = deployment
|
|
616
|
+
|
|
617
|
+
for (let i = 0; i < 10; i++) {
|
|
618
|
+
// Generate random 256-bit integers
|
|
619
|
+
const num1 = generateRandomNumber(17)
|
|
620
|
+
const num2 = generateRandomNumber(17)
|
|
621
|
+
|
|
622
|
+
if (num1 * num2 <= MAX_UINT256) {
|
|
623
|
+
// Call checkedSubTest
|
|
624
|
+
await (await extendedArithmeticTests.checkedMulTest(num1, num2, 2n, { gasLimit: 80000000 })).wait()
|
|
625
|
+
|
|
626
|
+
const result = await extendedArithmeticTests.numbers2(0)
|
|
627
|
+
expect(result).to.equal(num1 * num2)
|
|
628
|
+
} else {
|
|
629
|
+
// Expect revert
|
|
630
|
+
const tx = await extendedArithmeticTests.checkedMulTest(num1, num2, 2n, { gasLimit: 80000000 })
|
|
631
|
+
|
|
632
|
+
try {
|
|
633
|
+
await tx.wait()
|
|
634
|
+
} catch (e) {
|
|
635
|
+
const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
|
|
636
|
+
expect(receipt?.status).to.be.equal(0)
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
})
|
|
641
|
+
|
|
642
|
+
it("checkedMulWithOverflowBit", async function () {
|
|
643
|
+
const { extendedArithmeticTests } = deployment
|
|
644
|
+
|
|
645
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
646
|
+
const numbers1: bigint[] = []
|
|
647
|
+
const numbers2: bigint[] = []
|
|
648
|
+
const expectedOverflows: boolean[] = []
|
|
649
|
+
const expectedResults: bigint[] = []
|
|
650
|
+
|
|
651
|
+
for (let i = 0; i < 1; i++) {
|
|
652
|
+
// Generate random 256-bit integers
|
|
653
|
+
const num1 = generateRandomNumber(17)
|
|
654
|
+
const num2 = generateRandomNumber(17)
|
|
655
|
+
|
|
656
|
+
numbers1.push(num1)
|
|
657
|
+
numbers2.push(num2)
|
|
658
|
+
expectedOverflows.push(num1 * num2 > MAX_UINT256)
|
|
659
|
+
expectedResults.push(num1 * num2)
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
// Call checkedSubWithOverflowBitTest with the arrays
|
|
663
|
+
await (await extendedArithmeticTests.checkedMulWithOverflowBitTest(numbers1, numbers2, 0n, { gasLimit: 80000000 })).wait()
|
|
664
|
+
|
|
665
|
+
// Verify results
|
|
666
|
+
for (let i = 0; i < 1; i++) {
|
|
667
|
+
const bit = await extendedArithmeticTests.overflows(i)
|
|
668
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
669
|
+
|
|
670
|
+
expect(bit).to.equal(expectedOverflows[i])
|
|
671
|
+
|
|
672
|
+
if (bit) {
|
|
673
|
+
expect(result).to.not.equal(expectedResults[i])
|
|
674
|
+
} else {
|
|
675
|
+
expect(result).to.equal(expectedResults[i])
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
})
|
|
679
|
+
|
|
680
|
+
it("checkedMulWithOverflowBitLHS", async function () {
|
|
681
|
+
const { extendedArithmeticTests } = deployment
|
|
682
|
+
|
|
683
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
684
|
+
const numbers1: bigint[] = []
|
|
685
|
+
const numbers2: bigint[] = []
|
|
686
|
+
const expectedOverflows: boolean[] = []
|
|
687
|
+
const expectedResults: bigint[] = []
|
|
688
|
+
|
|
689
|
+
for (let i = 0; i < 1; i++) {
|
|
690
|
+
// Generate random 256-bit integers
|
|
691
|
+
const num1 = generateRandomNumber(17)
|
|
692
|
+
const num2 = generateRandomNumber(17)
|
|
693
|
+
|
|
694
|
+
numbers1.push(num1)
|
|
695
|
+
numbers2.push(num2)
|
|
696
|
+
expectedOverflows.push(num1 * num2 > MAX_UINT256)
|
|
697
|
+
expectedResults.push(num1 * num2)
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
// Call checkedSubWithOverflowBitTest with the arrays
|
|
701
|
+
await (await extendedArithmeticTests.checkedMulWithOverflowBitTest(numbers1, numbers2, 1n, { gasLimit: 80000000 })).wait()
|
|
702
|
+
|
|
703
|
+
// Verify results
|
|
704
|
+
for (let i = 0; i < 1; i++) {
|
|
705
|
+
const bit = await extendedArithmeticTests.overflows(i)
|
|
706
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
707
|
+
|
|
708
|
+
expect(bit).to.equal(expectedOverflows[i])
|
|
709
|
+
|
|
710
|
+
if (bit) {
|
|
711
|
+
expect(result).to.not.equal(expectedResults[i])
|
|
712
|
+
} else {
|
|
713
|
+
expect(result).to.equal(expectedResults[i])
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
})
|
|
717
|
+
|
|
718
|
+
it("checkedMulWithOverflowBitRHS", async function () {
|
|
719
|
+
const { extendedArithmeticTests } = deployment
|
|
720
|
+
|
|
721
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
722
|
+
const numbers1: bigint[] = []
|
|
723
|
+
const numbers2: bigint[] = []
|
|
724
|
+
const expectedOverflows: boolean[] = []
|
|
725
|
+
const expectedResults: bigint[] = []
|
|
726
|
+
|
|
727
|
+
for (let i = 0; i < 1; i++) {
|
|
728
|
+
// Generate random 256-bit integers
|
|
729
|
+
const num1 = generateRandomNumber(17)
|
|
730
|
+
const num2 = generateRandomNumber(17)
|
|
731
|
+
|
|
732
|
+
numbers1.push(num1)
|
|
733
|
+
numbers2.push(num2)
|
|
734
|
+
expectedOverflows.push(num1 * num2 > MAX_UINT256)
|
|
735
|
+
expectedResults.push(num1 * num2)
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
// Call checkedSubWithOverflowBitTest with the arrays
|
|
739
|
+
await (await extendedArithmeticTests.checkedMulWithOverflowBitTest(numbers1, numbers2, 2n, { gasLimit: 80000000 })).wait()
|
|
740
|
+
|
|
741
|
+
// Verify results
|
|
742
|
+
for (let i = 0; i < 1; i++) {
|
|
743
|
+
const bit = await extendedArithmeticTests.overflows(i)
|
|
744
|
+
const result = await extendedArithmeticTests.numbers2(i)
|
|
745
|
+
|
|
746
|
+
expect(bit).to.equal(expectedOverflows[i])
|
|
747
|
+
|
|
748
|
+
if (bit) {
|
|
749
|
+
expect(result).to.not.equal(expectedResults[i])
|
|
750
|
+
} else {
|
|
751
|
+
expect(result).to.equal(expectedResults[i])
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
})
|
|
755
|
+
|
|
756
|
+
it("and", async function () {
|
|
757
|
+
const { extendedBitwiseTests } = deployment
|
|
758
|
+
|
|
759
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
760
|
+
const numbers1: bigint[] = []
|
|
761
|
+
const numbers2: bigint[] = []
|
|
762
|
+
const expectedResults: bigint[] = []
|
|
763
|
+
|
|
764
|
+
for (let i = 0; i < 1; i++) {
|
|
765
|
+
// Generate random 256-bit integers
|
|
766
|
+
const num1 = generateRandomNumber(32)
|
|
767
|
+
const num2 = generateRandomNumber(32)
|
|
768
|
+
|
|
769
|
+
numbers1.push(num1)
|
|
770
|
+
numbers2.push(num2)
|
|
771
|
+
expectedResults.push(num1 & num2)
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
// Call addTest with the arrays
|
|
775
|
+
await (await extendedBitwiseTests.andTest(numbers1, numbers2)).wait()
|
|
776
|
+
|
|
777
|
+
// Verify results
|
|
778
|
+
for (let i = 0; i < 1; i++) {
|
|
779
|
+
const result = await extendedBitwiseTests.numbers2(i)
|
|
780
|
+
expect(result).to.equal(expectedResults[i])
|
|
781
|
+
}
|
|
782
|
+
})
|
|
783
|
+
|
|
784
|
+
it("or", async function () {
|
|
785
|
+
const { extendedBitwiseTests } = deployment
|
|
786
|
+
|
|
787
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
788
|
+
const numbers1: bigint[] = []
|
|
789
|
+
const numbers2: bigint[] = []
|
|
790
|
+
const expectedResults: bigint[] = []
|
|
791
|
+
|
|
792
|
+
for (let i = 0; i < 1; i++) {
|
|
793
|
+
// Generate random 256-bit integers
|
|
794
|
+
const num1 = generateRandomNumber(32)
|
|
795
|
+
const num2 = generateRandomNumber(32)
|
|
796
|
+
|
|
797
|
+
numbers1.push(num1)
|
|
798
|
+
numbers2.push(num2)
|
|
799
|
+
expectedResults.push(num1 | num2)
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
// Call orTest with the arrays
|
|
803
|
+
await (await extendedBitwiseTests.orTest(numbers1, numbers2)).wait()
|
|
804
|
+
|
|
805
|
+
// Verify results
|
|
806
|
+
for (let i = 0; i < 1; i++) {
|
|
807
|
+
const result = await extendedBitwiseTests.numbers2(i)
|
|
808
|
+
expect(result).to.equal(expectedResults[i])
|
|
809
|
+
}
|
|
810
|
+
})
|
|
811
|
+
|
|
812
|
+
it("xor", async function () {
|
|
813
|
+
const { extendedBitwiseTests } = deployment
|
|
814
|
+
|
|
815
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
816
|
+
const numbers1: bigint[] = []
|
|
817
|
+
const numbers2: bigint[] = []
|
|
818
|
+
const expectedResults: bigint[] = []
|
|
819
|
+
|
|
820
|
+
for (let i = 0; i < 1; i++) {
|
|
821
|
+
// Generate random 256-bit integers
|
|
822
|
+
const num1 = generateRandomNumber(32)
|
|
823
|
+
const num2 = generateRandomNumber(32)
|
|
824
|
+
|
|
825
|
+
numbers1.push(num1)
|
|
826
|
+
numbers2.push(num2)
|
|
827
|
+
expectedResults.push(num1 ^ num2)
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
// Call xorTest with the arrays
|
|
831
|
+
await (await extendedBitwiseTests.xorTest(numbers1, numbers2)).wait()
|
|
832
|
+
|
|
833
|
+
// Verify results
|
|
834
|
+
for (let i = 0; i < 1; i++) {
|
|
835
|
+
const result = await extendedBitwiseTests.numbers2(i)
|
|
836
|
+
expect(result).to.equal(expectedResults[i])
|
|
837
|
+
}
|
|
838
|
+
})
|
|
839
|
+
|
|
840
|
+
it("shl", async function () {
|
|
841
|
+
const { extendedBitwiseTests } = deployment
|
|
842
|
+
|
|
843
|
+
// Generate an arrays of 10 random 256-bit integers and 10 random 8-bit integers
|
|
844
|
+
const numbers1: bigint[] = []
|
|
845
|
+
const numbers2: bigint[] = []
|
|
846
|
+
const expectedResults: bigint[] = []
|
|
847
|
+
|
|
848
|
+
while (numbers2.length < 1) {
|
|
849
|
+
// Generate random 256-bit integers
|
|
850
|
+
const num1 = generateRandomNumber(16)
|
|
851
|
+
const num2 = generateRandomNumber(1)
|
|
852
|
+
|
|
853
|
+
if (num1 << num2 > MAX_UINT256) continue
|
|
854
|
+
|
|
855
|
+
numbers1.push(num1)
|
|
856
|
+
numbers2.push(num2)
|
|
857
|
+
expectedResults.push(num1 << num2)
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
// Call xorTest with the arrays
|
|
861
|
+
await (await extendedBitwiseTests.shlTest(numbers1, numbers2)).wait()
|
|
862
|
+
|
|
863
|
+
// Verify results
|
|
864
|
+
for (let i = 0; i < 1; i++) {
|
|
865
|
+
const result = await extendedBitwiseTests.numbers2(i)
|
|
866
|
+
expect(result).to.equal(expectedResults[i])
|
|
867
|
+
}
|
|
868
|
+
})
|
|
869
|
+
|
|
870
|
+
it("shr", async function () {
|
|
871
|
+
const { extendedBitwiseTests } = deployment
|
|
872
|
+
|
|
873
|
+
// Generate an arrays of 10 random 256-bit integers and 10 random 8-bit integers
|
|
874
|
+
const numbers1: bigint[] = []
|
|
875
|
+
const numbers2: bigint[] = []
|
|
876
|
+
const expectedResults: bigint[] = []
|
|
877
|
+
|
|
878
|
+
while (numbers2.length < 1) {
|
|
879
|
+
// Generate random 256-bit integers
|
|
880
|
+
const num1 = generateRandomNumber(16)
|
|
881
|
+
const num2 = generateRandomNumber(1)
|
|
882
|
+
|
|
883
|
+
if ((num1 & ((1n << num2) - 1n)) !== 0n) continue
|
|
884
|
+
|
|
885
|
+
numbers1.push(num1)
|
|
886
|
+
numbers2.push(num2)
|
|
887
|
+
expectedResults.push(num1 >> num2)
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
// Call xorTest with the arrays
|
|
891
|
+
await (await extendedBitwiseTests.shrTest(numbers1, numbers2)).wait()
|
|
892
|
+
|
|
893
|
+
// Verify results
|
|
894
|
+
for (let i = 0; i < 1; i++) {
|
|
895
|
+
const result = await extendedBitwiseTests.numbers2(i)
|
|
896
|
+
expect(result).to.equal(expectedResults[i])
|
|
897
|
+
}
|
|
898
|
+
})
|
|
899
|
+
|
|
900
|
+
it("eq", async function () {
|
|
901
|
+
const { extendedComparisonTests } = deployment
|
|
902
|
+
|
|
903
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
904
|
+
const numbers1: bigint[] = []
|
|
905
|
+
const numbers2: bigint[] = []
|
|
906
|
+
const expectedResults: boolean[] = []
|
|
907
|
+
|
|
908
|
+
for (let i = 0; i < 1; i++) {
|
|
909
|
+
// Generate random 256-bit integers
|
|
910
|
+
const num1 = generateRandomNumber(32)
|
|
911
|
+
const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
|
|
912
|
+
|
|
913
|
+
numbers1.push(num1)
|
|
914
|
+
numbers2.push(num2)
|
|
915
|
+
expectedResults.push(num1 === num2)
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
// Call eqTest with the arrays
|
|
919
|
+
await (await extendedComparisonTests.eqTest(numbers1, numbers2)).wait()
|
|
920
|
+
|
|
921
|
+
// Verify results
|
|
922
|
+
for (let i = 0; i < 1; i++) {
|
|
923
|
+
const result = await extendedComparisonTests.boolResults(i)
|
|
924
|
+
expect(result).to.equal(expectedResults[i])
|
|
925
|
+
}
|
|
926
|
+
})
|
|
927
|
+
|
|
928
|
+
it("ne", async function () {
|
|
929
|
+
const { extendedComparisonTests } = deployment
|
|
930
|
+
|
|
931
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
932
|
+
const numbers1: bigint[] = []
|
|
933
|
+
const numbers2: bigint[] = []
|
|
934
|
+
const expectedResults: boolean[] = []
|
|
935
|
+
|
|
936
|
+
for (let i = 0; i < 1; i++) {
|
|
937
|
+
// Generate random 256-bit integers
|
|
938
|
+
const num1 = generateRandomNumber(32)
|
|
939
|
+
const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
|
|
940
|
+
|
|
941
|
+
numbers1.push(num1)
|
|
942
|
+
numbers2.push(num2)
|
|
943
|
+
expectedResults.push(num1 !== num2)
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
// Call neTest with the arrays
|
|
947
|
+
await (await extendedComparisonTests.neTest(numbers1, numbers2)).wait()
|
|
948
|
+
|
|
949
|
+
// Verify results
|
|
950
|
+
for (let i = 0; i < 1; i++) {
|
|
951
|
+
const result = await extendedComparisonTests.boolResults(i)
|
|
952
|
+
expect(result).to.equal(expectedResults[i])
|
|
953
|
+
}
|
|
954
|
+
})
|
|
955
|
+
|
|
956
|
+
it("ge", async function () {
|
|
957
|
+
const { extendedComparisonTests } = deployment
|
|
958
|
+
|
|
959
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
960
|
+
const numbers1: bigint[] = []
|
|
961
|
+
const numbers2: bigint[] = []
|
|
962
|
+
const expectedResults: boolean[] = []
|
|
963
|
+
|
|
964
|
+
for (let i = 0; i < 1; i++) {
|
|
965
|
+
// Generate random 256-bit integers
|
|
966
|
+
const num1 = generateRandomNumber(32)
|
|
967
|
+
const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
|
|
968
|
+
|
|
969
|
+
numbers1.push(num1)
|
|
970
|
+
numbers2.push(num2)
|
|
971
|
+
expectedResults.push(num1 >= num2)
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
// Call geTest with the arrays
|
|
975
|
+
await (await extendedComparisonTests.geTest(numbers1, numbers2)).wait()
|
|
976
|
+
|
|
977
|
+
// Verify results
|
|
978
|
+
for (let i = 0; i < 1; i++) {
|
|
979
|
+
const result = await extendedComparisonTests.boolResults(i)
|
|
980
|
+
expect(result).to.equal(expectedResults[i])
|
|
981
|
+
}
|
|
982
|
+
})
|
|
983
|
+
|
|
984
|
+
it("gt", async function () {
|
|
985
|
+
const { extendedComparisonTests } = deployment
|
|
986
|
+
|
|
987
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
988
|
+
const numbers1: bigint[] = []
|
|
989
|
+
const numbers2: bigint[] = []
|
|
990
|
+
const expectedResults: boolean[] = []
|
|
991
|
+
|
|
992
|
+
for (let i = 0; i < 1; i++) {
|
|
993
|
+
// Generate random 256-bit integers
|
|
994
|
+
const num1 = generateRandomNumber(32)
|
|
995
|
+
const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
|
|
996
|
+
|
|
997
|
+
numbers1.push(num1)
|
|
998
|
+
numbers2.push(num2)
|
|
999
|
+
expectedResults.push(num1 > num2)
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
// Call gtTest with the arrays
|
|
1003
|
+
await (await extendedComparisonTests.gtTest(numbers1, numbers2)).wait()
|
|
1004
|
+
|
|
1005
|
+
// Verify results
|
|
1006
|
+
for (let i = 0; i < 1; i++) {
|
|
1007
|
+
const result = await extendedComparisonTests.boolResults(i)
|
|
1008
|
+
expect(result).to.equal(expectedResults[i])
|
|
1009
|
+
}
|
|
1010
|
+
})
|
|
1011
|
+
|
|
1012
|
+
it("le", async function () {
|
|
1013
|
+
const { extendedComparisonTests } = deployment
|
|
1014
|
+
|
|
1015
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
1016
|
+
const numbers1: bigint[] = []
|
|
1017
|
+
const numbers2: bigint[] = []
|
|
1018
|
+
const expectedResults: boolean[] = []
|
|
1019
|
+
|
|
1020
|
+
for (let i = 0; i < 1; i++) {
|
|
1021
|
+
// Generate random 256-bit integers
|
|
1022
|
+
const num1 = generateRandomNumber(32)
|
|
1023
|
+
const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
|
|
1024
|
+
|
|
1025
|
+
numbers1.push(num1)
|
|
1026
|
+
numbers2.push(num2)
|
|
1027
|
+
expectedResults.push(num1 <= num2)
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
// Call leTest with the arrays
|
|
1031
|
+
await (await extendedComparisonTests.leTest(numbers1, numbers2)).wait()
|
|
1032
|
+
|
|
1033
|
+
// Verify results
|
|
1034
|
+
for (let i = 0; i < 1; i++) {
|
|
1035
|
+
const result = await extendedComparisonTests.boolResults(i)
|
|
1036
|
+
expect(result).to.equal(expectedResults[i])
|
|
1037
|
+
}
|
|
1038
|
+
})
|
|
1039
|
+
|
|
1040
|
+
it("lt", async function () {
|
|
1041
|
+
const { extendedComparisonTests } = deployment
|
|
1042
|
+
|
|
1043
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
1044
|
+
const numbers1: bigint[] = []
|
|
1045
|
+
const numbers2: bigint[] = []
|
|
1046
|
+
const expectedResults: boolean[] = []
|
|
1047
|
+
|
|
1048
|
+
for (let i = 0; i < 1; i++) {
|
|
1049
|
+
// Generate random 256-bit integers
|
|
1050
|
+
const num1 = generateRandomNumber(32)
|
|
1051
|
+
const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
|
|
1052
|
+
|
|
1053
|
+
numbers1.push(num1)
|
|
1054
|
+
numbers2.push(num2)
|
|
1055
|
+
expectedResults.push(num1 < num2)
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
// Call ltTest with the arrays
|
|
1059
|
+
await (await extendedComparisonTests.ltTest(numbers1, numbers2)).wait()
|
|
1060
|
+
|
|
1061
|
+
// Verify results
|
|
1062
|
+
for (let i = 0; i < 1; i++) {
|
|
1063
|
+
const result = await extendedComparisonTests.boolResults(i)
|
|
1064
|
+
expect(result).to.equal(expectedResults[i])
|
|
1065
|
+
}
|
|
1066
|
+
})
|
|
1067
|
+
|
|
1068
|
+
it("min", async function () {
|
|
1069
|
+
const { extendedComparisonTests } = deployment
|
|
1070
|
+
|
|
1071
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
1072
|
+
const numbers1: bigint[] = []
|
|
1073
|
+
const numbers2: bigint[] = []
|
|
1074
|
+
const expectedResults: bigint[] = []
|
|
1075
|
+
|
|
1076
|
+
for (let i = 0; i < 1; i++) {
|
|
1077
|
+
// Generate random 256-bit integers
|
|
1078
|
+
const num1 = generateRandomNumber(32)
|
|
1079
|
+
const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
|
|
1080
|
+
|
|
1081
|
+
numbers1.push(num1)
|
|
1082
|
+
numbers2.push(num2)
|
|
1083
|
+
expectedResults.push(num1 <= num2 ? num1 : num2)
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
// Call minTest with the arrays
|
|
1087
|
+
await (await extendedComparisonTests.minTest(numbers1, numbers2)).wait()
|
|
1088
|
+
|
|
1089
|
+
// Verify results
|
|
1090
|
+
for (let i = 0; i < 1; i++) {
|
|
1091
|
+
const result = await extendedComparisonTests.uintResults2(i)
|
|
1092
|
+
expect(result).to.equal(expectedResults[i])
|
|
1093
|
+
}
|
|
1094
|
+
})
|
|
1095
|
+
|
|
1096
|
+
it("max", async function () {
|
|
1097
|
+
const { extendedComparisonTests } = deployment
|
|
1098
|
+
|
|
1099
|
+
// Generate two arrays of 10 random 256-bit integers
|
|
1100
|
+
const numbers1: bigint[] = []
|
|
1101
|
+
const numbers2: bigint[] = []
|
|
1102
|
+
const expectedResults: bigint[] = []
|
|
1103
|
+
|
|
1104
|
+
for (let i = 0; i < 1; i++) {
|
|
1105
|
+
// Generate random 256-bit integers
|
|
1106
|
+
const num1 = generateRandomNumber(32)
|
|
1107
|
+
const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
|
|
1108
|
+
|
|
1109
|
+
numbers1.push(num1)
|
|
1110
|
+
numbers2.push(num2)
|
|
1111
|
+
expectedResults.push(num1 >= num2 ? num1 : num2)
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
// Call maxTest with the arrays
|
|
1115
|
+
await (await extendedComparisonTests.maxTest(numbers1, numbers2)).wait()
|
|
1116
|
+
|
|
1117
|
+
// Verify results
|
|
1118
|
+
for (let i = 0; i < 1; i++) {
|
|
1119
|
+
const result = await extendedComparisonTests.uintResults2(i)
|
|
1120
|
+
expect(result).to.equal(expectedResults[i])
|
|
1121
|
+
}
|
|
1122
|
+
})
|
|
1123
|
+
})
|
|
1124
|
+
})
|