Skip to content

Commit 04a34b7

Browse files
committed
improve tests
1 parent 312e01f commit 04a34b7

File tree

4 files changed

+63
-18
lines changed

4 files changed

+63
-18
lines changed

Diff for: codex/slots/proofs/backends/converters.nim

-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ type
2525
CircomInputs* = Inputs
2626
VerifyResult* = Atomic[bool]
2727

28-
export VerifyResult
29-
3028
proc toCircomInputs*(inputs: ProofInputs[Poseidon2Hash]): CircomInputs =
3129
var
3230
slotIndex = inputs.slotIndex.toF.toBytes.toArray32

Diff for: tests/codex/slots/backends/testcircomcompat.nim

+24-10
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,36 @@ suite "Test Circom Compat Backend - control inputs":
2626
var
2727
circom: CircomCompat
2828
proofInputs: ProofInputs[Poseidon2Hash]
29+
taskpool: Taskpool
2930

3031
setup:
3132
let
3233
inputData = readFile("tests/circuits/fixtures/input.json")
3334
inputJson = !JsonNode.parse(inputData)
3435

36+
taskpool = Taskpool.new()
3537
proofInputs = Poseidon2Hash.jsonToProofInput(inputJson)
36-
circom = CircomCompat.init(r1cs, wasm, zkey)
38+
circom = CircomCompat.init(r1cs, wasm, zkey, taskpool = taskpool)
3739

3840
teardown:
3941
circom.release() # this comes from the rust FFI
42+
taskpool.shutdown()
4043

4144
test "Should verify with correct inputs":
42-
let proof = circom.prove(proofInputs).tryGet
45+
let proof = (await circom.prove(proofInputs)).tryGet
4346

44-
check circom.verify(proof, proofInputs).tryGet
47+
var resp = (await circom.verify(proof, proofInputs)).tryGet
48+
49+
check resp
4550

4651
test "Should not verify with incorrect inputs":
4752
proofInputs.slotIndex = 1 # change slot index
4853

49-
let proof = circom.prove(proofInputs).tryGet
54+
let proof = (await circom.prove(proofInputs)).tryGet
55+
56+
var resp = (await circom.verify(proof, proofInputs)).tryGet
5057

51-
check circom.verify(proof, proofInputs).tryGet == false
58+
check resp == false
5259

5360
suite "Test Circom Compat Backend":
5461
let
@@ -77,6 +84,7 @@ suite "Test Circom Compat Backend":
7784
challenge: array[32, byte]
7885
builder: Poseidon2Builder
7986
sampler: Poseidon2Sampler
87+
taskpool: Taskpool
8088

8189
setup:
8290
let
@@ -91,8 +99,9 @@ suite "Test Circom Compat Backend":
9199

92100
builder = Poseidon2Builder.new(store, verifiable).tryGet
93101
sampler = Poseidon2Sampler.new(slotId, store, builder).tryGet
102+
taskpool = Taskpool.new()
94103

95-
circom = CircomCompat.init(r1cs, wasm, zkey)
104+
circom = CircomCompat.init(r1cs, wasm, zkey, taskpool = taskpool)
96105
challenge = 1234567.toF.toBytes.toArray32
97106

98107
proofInputs = (await sampler.getProofInput(challenge, samples)).tryGet
@@ -101,15 +110,20 @@ suite "Test Circom Compat Backend":
101110
circom.release() # this comes from the rust FFI
102111
await repoTmp.destroyDb()
103112
await metaTmp.destroyDb()
113+
taskpool.shutdown()
104114

105115
test "Should verify with correct input":
106-
var proof = circom.prove(proofInputs).tryGet
116+
var proof = (await circom.prove(proofInputs)).tryGet
107117

108-
check circom.verify(proof, proofInputs).tryGet
118+
var resp = (await circom.verify(proof, proofInputs)).tryGet
119+
120+
check resp == true
109121

110122
test "Should not verify with incorrect input":
111123
proofInputs.slotIndex = 1 # change slot index
112124

113-
let proof = circom.prove(proofInputs).tryGet
125+
let proof = (await circom.prove(proofInputs)).tryGet
126+
127+
var resp = (await circom.verify(proof, proofInputs)).tryGet
114128

115-
check circom.verify(proof, proofInputs).tryGet == false
129+
check resp == false

Diff for: tests/codex/slots/testbackendfactory.nim

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ suite "Test BackendFactory":
5252
circomWasm: InputFile("tests/circuits/fixtures/proof_main.wasm"),
5353
circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"),
5454
)
55-
backend = config.initializeBackend(utilsMock).tryGet
55+
backend = config.initializeBackend(utilsMock, taskpool = nil).tryGet
5656

5757
check:
5858
backend.vkp != nil
@@ -73,7 +73,7 @@ suite "Test BackendFactory":
7373
# will be picked up as local files:
7474
circuitDir: OutDir("tests/circuits/fixtures"),
7575
)
76-
backend = config.initializeBackend(utilsMock).tryGet
76+
backend = config.initializeBackend(utilsMock, taskpool = nil).tryGet
7777

7878
check:
7979
backend.vkp != nil
@@ -91,7 +91,7 @@ suite "Test BackendFactory":
9191
marketplaceAddress: EthAddress.example.some,
9292
circuitDir: OutDir(circuitDir),
9393
)
94-
backendResult = config.initializeBackend(utilsMock)
94+
backendResult = config.initializeBackend(utilsMock, taskpool = nil)
9595

9696
check:
9797
backendResult.isErr

Diff for: tests/codex/slots/testprover.nim

+36-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import ./helpers
1919
import ../helpers
2020

2121
suite "Test Prover":
22-
var backend: AnyBackend
2322
let
2423
samples = 5
2524
blockSize = DefaultBlockSize
@@ -31,6 +30,8 @@ suite "Test Prover":
3130
var
3231
store: BlockStore
3332
prover: Prover
33+
backend: AnyBackend
34+
taskpool: Taskpool
3435

3536
setup:
3637
let
@@ -46,15 +47,16 @@ suite "Test Prover":
4647
circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"),
4748
numProofSamples: samples,
4849
)
49-
50-
backend = config.initializeBackend(taskpool = Taskpool.new()).tryGet()
50+
taskpool = Taskpool.new()
51+
backend = config.initializeBackend(taskpool = taskpool).tryGet()
5152

5253
store = RepoStore.new(repoDs, metaDs)
5354
prover = Prover.new(store, backend, config.numProofSamples)
5455

5556
teardown:
5657
await repoTmp.destroyDb()
5758
await metaTmp.destroyDb()
59+
taskpool.shutdown()
5860

5961
test "Should sample and prove a slot":
6062
let (_, _, verifiable) = await createVerifiableManifest(
@@ -90,6 +92,37 @@ suite "Test Prover":
9092
check:
9193
(await prover.verify(proof, inputs)).tryGet == true
9294

95+
test "Should concurrently prove/verify":
96+
const iterations = 5
97+
98+
var proveTasks = newSeq[Future[?!(AnyProofInputs, AnyProof)]]()
99+
var verifyTasks = newSeq[Future[?!bool]]()
100+
101+
for i in 0 ..< iterations:
102+
# create multiple prove tasks
103+
let (_, _, verifiable) = await createVerifiableManifest(
104+
store,
105+
8, # number of blocks in the original dataset (before EC)
106+
5, # ecK
107+
3, # ecM
108+
blockSize,
109+
cellSize,
110+
)
111+
112+
proveTasks.add(prover.prove(1, verifiable, challenge))
113+
114+
let proveResults = await allFinished(proveTasks)
115+
#
116+
for i in 0 ..< proveResults.len:
117+
var (inputs, proofs) = proveTasks[i].read().tryGet()
118+
verifyTasks.add(prover.verify(proofs, inputs))
119+
120+
let verifyResults = await allFinished(verifyTasks)
121+
122+
for i in 0 ..< verifyResults.len:
123+
check:
124+
verifyResults[i].read().isErr == false
125+
93126
test "Should complete prove/verify task when cancelled":
94127
let (_, _, verifiable) = await createVerifiableManifest(
95128
store,

0 commit comments

Comments
 (0)