From ffae6617dfff2ed5336494877685820355d9769b Mon Sep 17 00:00:00 2001 From: Gregor Date: Tue, 26 Mar 2024 21:22:10 +0100 Subject: [PATCH] unit tests for comparison assertions --- .../test/foreign-field-gadgets.unit-test.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/lib/provable/test/foreign-field-gadgets.unit-test.ts b/src/lib/provable/test/foreign-field-gadgets.unit-test.ts index 3f0fdaaca5..dd8fcf832c 100644 --- a/src/lib/provable/test/foreign-field-gadgets.unit-test.ts +++ b/src/lib/provable/test/foreign-field-gadgets.unit-test.ts @@ -195,6 +195,20 @@ let ffProgram = ZkProgram({ return ForeignField.div(x, y, F.modulus); }, }, + assertLessThan: { + privateInputs: [Field3.provable, Field3.provable], + async method(x, y) { + ForeignField.assertLessThan(x, y); + return x; + }, + }, + assertLessThanOrEqual: { + privateInputs: [Field3.provable, Field3.provable], + async method(x, y) { + ForeignField.assertLessThanOrEqual(x, y); + return x; + }, + }, }, }); @@ -274,6 +288,24 @@ await equivalentAsync({ from: [f, f], to: f }, { runs })( 'prove div' ); +await equivalentAsync({ from: [f, f], to: unit }, { runs })( + (x, y) => assert(x < y, 'not less than'), + async (x, y) => { + let proof = await ffProgram.assertLessThan(x, y); + assert(await ffProgram.verify(proof), 'verifies'); + }, + 'prove less than' +); + +await equivalentAsync({ from: [f, f], to: unit }, { runs })( + (x, y) => assert(x <= y, 'not less than or equal'), + async (x, y) => { + let proof = await ffProgram.assertLessThanOrEqual(x, y); + assert(await ffProgram.verify(proof), 'verifies'); + }, + 'prove less than or equal' +); + // assert mul example // (x - y) * (x + y) = x^2 - y^2