mirror of
https://github.com/logos-storage/nim-groth16.git
synced 2026-05-18 16:49:30 +00:00
88 lines
2.6 KiB
Nim
88 lines
2.6 KiB
Nim
|
|
import std/unittest
|
|
import std/sequtils
|
|
|
|
import constantine/named/properties_fields
|
|
|
|
import groth16/bn128
|
|
import groth16/bn128/fields
|
|
import groth16/files/witness
|
|
|
|
suite "witness operations":
|
|
|
|
test "witness creation":
|
|
let values = @[oneFr, intToFr(2), intToFr(3), intToFr(4)]
|
|
let witness = makeWitnessBN254(values)
|
|
|
|
check witness.curve == "bn128"
|
|
check witness.nvars == 4
|
|
check witness.values.len == 4
|
|
check isEqualFr(witness.values[0], oneFr)
|
|
check isEqualFr(witness.values[1], intToFr(2))
|
|
|
|
test "witness structure":
|
|
let values = map(toSeq(1..10), intToFr)
|
|
let witness = makeWitnessBN254(values)
|
|
|
|
check witness.nvars == 10
|
|
check witness.values.len == 10
|
|
check true
|
|
|
|
test "witness with zero values":
|
|
let values = @[zeroFr, zeroFr, zeroFr]
|
|
let witness = makeWitnessBN254(values)
|
|
|
|
check witness.nvars == 3
|
|
check witness.values.len == 3
|
|
check isZeroFr(witness.values[0])
|
|
check isZeroFr(witness.values[1])
|
|
check isZeroFr(witness.values[2])
|
|
|
|
test "witness with large values":
|
|
let values = @[intToFr(1000000), intToFr(999999), intToFr(123456)]
|
|
let witness = makeWitnessBN254(values)
|
|
|
|
check witness.nvars == 3
|
|
check isEqualFr(witness.values[0], intToFr(1000000))
|
|
|
|
test "witness single value":
|
|
let values = @[oneFr]
|
|
let witness = makeWitnessBN254(values)
|
|
|
|
check witness.nvars == 1
|
|
check witness.values.len == 1
|
|
check isEqualFr(witness.values[0], oneFr)
|
|
|
|
test "witness empty (should fail or handle gracefully)":
|
|
let values: seq[Fr[BN254_Snarks]] = @[]
|
|
let witness = makeWitnessBN254(values)
|
|
|
|
check witness.nvars == 0
|
|
check witness.values.len == 0
|
|
|
|
test "witness field consistency":
|
|
let values = @[oneFr, intToFr(5), intToFr(10)]
|
|
let witness = makeWitnessBN254(values)
|
|
|
|
# All values should be valid field elements
|
|
check witness.values.len == 3
|
|
check isEqualFr(witness.values[0], oneFr)
|
|
check isEqualFr(witness.values[1], intToFr(5))
|
|
check isEqualFr(witness.values[2], intToFr(10))
|
|
|
|
test "witness ordering":
|
|
let publicOut = intToFr(100)
|
|
let publicIn = intToFr(200)
|
|
let privateIn = intToFr(300)
|
|
let secret = intToFr(400)
|
|
|
|
let values = @[oneFr, publicOut, publicIn, privateIn, secret]
|
|
let witness = makeWitnessBN254(values)
|
|
|
|
check witness.nvars == 5
|
|
check isEqualFr(witness.values[0], oneFr)
|
|
check isEqualFr(witness.values[1], publicOut)
|
|
check isEqualFr(witness.values[2], publicIn)
|
|
check isEqualFr(witness.values[3], privateIn)
|
|
check isEqualFr(witness.values[4], secret)
|