improve tests

This commit is contained in:
munna0908 2025-02-20 19:29:42 +05:30
parent 75e4146612
commit 2e08de32b5
No known key found for this signature in database
GPG Key ID: 2FFCD637E937D3E6
4 changed files with 63 additions and 18 deletions

View File

@ -25,8 +25,6 @@ type
CircomInputs* = Inputs
VerifyResult* = Atomic[bool]
export VerifyResult
proc toCircomInputs*(inputs: ProofInputs[Poseidon2Hash]): CircomInputs =
var
slotIndex = inputs.slotIndex.toF.toBytes.toArray32

View File

@ -26,29 +26,36 @@ suite "Test Circom Compat Backend - control inputs":
var
circom: CircomCompat
proofInputs: ProofInputs[Poseidon2Hash]
taskpool: Taskpool
setup:
let
inputData = readFile("tests/circuits/fixtures/input.json")
inputJson = !JsonNode.parse(inputData)
taskpool = Taskpool.new()
proofInputs = Poseidon2Hash.jsonToProofInput(inputJson)
circom = CircomCompat.init(r1cs, wasm, zkey)
circom = CircomCompat.init(r1cs, wasm, zkey, taskpool = taskpool)
teardown:
circom.release() # this comes from the rust FFI
taskpool.shutdown()
test "Should verify with correct inputs":
let proof = circom.prove(proofInputs).tryGet
let proof = (await circom.prove(proofInputs)).tryGet
check circom.verify(proof, proofInputs).tryGet
var resp = (await circom.verify(proof, proofInputs)).tryGet
check resp
test "Should not verify with incorrect inputs":
proofInputs.slotIndex = 1 # change slot index
let proof = circom.prove(proofInputs).tryGet
let proof = (await circom.prove(proofInputs)).tryGet
check circom.verify(proof, proofInputs).tryGet == false
var resp = (await circom.verify(proof, proofInputs)).tryGet
check resp == false
suite "Test Circom Compat Backend":
let
@ -77,6 +84,7 @@ suite "Test Circom Compat Backend":
challenge: array[32, byte]
builder: Poseidon2Builder
sampler: Poseidon2Sampler
taskpool: Taskpool
setup:
let
@ -91,8 +99,9 @@ suite "Test Circom Compat Backend":
builder = Poseidon2Builder.new(store, verifiable).tryGet
sampler = Poseidon2Sampler.new(slotId, store, builder).tryGet
taskpool = Taskpool.new()
circom = CircomCompat.init(r1cs, wasm, zkey)
circom = CircomCompat.init(r1cs, wasm, zkey, taskpool = taskpool)
challenge = 1234567.toF.toBytes.toArray32
proofInputs = (await sampler.getProofInput(challenge, samples)).tryGet
@ -101,15 +110,20 @@ suite "Test Circom Compat Backend":
circom.release() # this comes from the rust FFI
await repoTmp.destroyDb()
await metaTmp.destroyDb()
taskpool.shutdown()
test "Should verify with correct input":
var proof = circom.prove(proofInputs).tryGet
var proof = (await circom.prove(proofInputs)).tryGet
check circom.verify(proof, proofInputs).tryGet
var resp = (await circom.verify(proof, proofInputs)).tryGet
check resp == true
test "Should not verify with incorrect input":
proofInputs.slotIndex = 1 # change slot index
let proof = circom.prove(proofInputs).tryGet
let proof = (await circom.prove(proofInputs)).tryGet
check circom.verify(proof, proofInputs).tryGet == false
var resp = (await circom.verify(proof, proofInputs)).tryGet
check resp == false

View File

@ -52,7 +52,7 @@ suite "Test BackendFactory":
circomWasm: InputFile("tests/circuits/fixtures/proof_main.wasm"),
circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"),
)
backend = config.initializeBackend(utilsMock).tryGet
backend = config.initializeBackend(utilsMock, taskpool = nil).tryGet
check:
backend.vkp != nil
@ -73,7 +73,7 @@ suite "Test BackendFactory":
# will be picked up as local files:
circuitDir: OutDir("tests/circuits/fixtures"),
)
backend = config.initializeBackend(utilsMock).tryGet
backend = config.initializeBackend(utilsMock, taskpool = nil).tryGet
check:
backend.vkp != nil
@ -91,7 +91,7 @@ suite "Test BackendFactory":
marketplaceAddress: EthAddress.example.some,
circuitDir: OutDir(circuitDir),
)
backendResult = config.initializeBackend(utilsMock)
backendResult = config.initializeBackend(utilsMock, taskpool = nil)
check:
backendResult.isErr

View File

@ -19,7 +19,6 @@ import ./helpers
import ../helpers
suite "Test Prover":
var backend: AnyBackend
let
samples = 5
blockSize = DefaultBlockSize
@ -31,6 +30,8 @@ suite "Test Prover":
var
store: BlockStore
prover: Prover
backend: AnyBackend
taskpool: Taskpool
setup:
let
@ -46,8 +47,8 @@ suite "Test Prover":
circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"),
numProofSamples: samples,
)
backend = config.initializeBackend(taskpool = Taskpool.new()).tryGet()
taskpool = Taskpool.new()
backend = config.initializeBackend(taskpool = taskpool).tryGet()
store = RepoStore.new(repoDs, metaDs)
prover = Prover.new(store, backend, config.numProofSamples)
@ -55,6 +56,7 @@ suite "Test Prover":
teardown:
await repoTmp.destroyDb()
await metaTmp.destroyDb()
taskpool.shutdown()
test "Should sample and prove a slot":
let (_, _, verifiable) = await createVerifiableManifest(
@ -90,6 +92,37 @@ suite "Test Prover":
check:
(await prover.verify(proof, inputs)).tryGet == true
test "Should concurrently prove/verify":
const iterations = 5
var proveTasks = newSeq[Future[?!(AnyProofInputs, AnyProof)]]()
var verifyTasks = newSeq[Future[?!bool]]()
for i in 0 ..< iterations:
# create multiple prove tasks
let (_, _, verifiable) = await createVerifiableManifest(
store,
8, # number of blocks in the original dataset (before EC)
5, # ecK
3, # ecM
blockSize,
cellSize,
)
proveTasks.add(prover.prove(1, verifiable, challenge))
let proveResults = await allFinished(proveTasks)
#
for i in 0 ..< proveResults.len:
var (inputs, proofs) = proveTasks[i].read().tryGet()
verifyTasks.add(prover.verify(proofs, inputs))
let verifyResults = await allFinished(verifyTasks)
for i in 0 ..< verifyResults.len:
check:
verifyResults[i].read().isErr == false
test "Should complete prove/verify task when cancelled":
let (_, _, verifiable) = await createVerifiableManifest(
store,