Skip to content

Commit 9058ca1

Browse files
committed
wip
1 parent a84db16 commit 9058ca1

File tree

1 file changed

+60
-4
lines changed
  • plonky2x/core/src/frontend/ops

1 file changed

+60
-4
lines changed

plonky2x/core/src/frontend/ops/math.rs

+60-4
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,9 @@ impl<L: PlonkParameters<D>, const D: usize> CircuitBuilder<L, D> {
172172
pub fn lt<Lhs, Rhs>(&mut self, lhs: Lhs, rhs: Rhs) -> BoolVariable
173173
where
174174
Lhs: LessThanOrEqual<L, D, Lhs>,
175-
Rhs: Sub<L, D, Rhs, Output = Lhs> + One<L, D>,
176175
{
177-
let one = self.one::<Rhs>();
178-
let upper_bound = rhs.sub(one, self);
179-
self.lte(lhs, upper_bound)
176+
let lte = rhs.lte(lhs, self);
177+
self.not(lte)
180178
}
181179

182180
/// The greater than operation (>).
@@ -226,6 +224,64 @@ mod tests {
226224
#[allow(unused_imports)]
227225
use crate::prelude::{BoolVariable, DefaultBuilder, U32Variable};
228226

227+
#[test]
228+
fn test_math_lt() {
229+
let mut builder = DefaultBuilder::new();
230+
231+
let v0 = builder.read::<U32Variable>();
232+
let v1 = builder.read::<U32Variable>();
233+
let result = builder.read::<BoolVariable>();
234+
let computed_result = builder.lt(v0, v1);
235+
builder.assert_is_equal(result, computed_result);
236+
237+
let circuit = builder.build();
238+
239+
let test_cases = [
240+
(5u32, 0u32, false),
241+
(0u32, 10u32, true),
242+
(10u32, 5u32, false),
243+
];
244+
245+
for test_case in test_cases.iter() {
246+
let mut input = circuit.input();
247+
input.write::<U32Variable>(test_case.0);
248+
input.write::<U32Variable>(test_case.1);
249+
input.write::<BoolVariable>(test_case.2);
250+
251+
let (proof, output) = circuit.prove(&input);
252+
circuit.verify(&proof, &input, &output);
253+
}
254+
}
255+
256+
#[test]
257+
fn test_math_lte() {
258+
let mut builder = DefaultBuilder::new();
259+
260+
let v0 = builder.read::<U32Variable>();
261+
let v1 = builder.read::<U32Variable>();
262+
let result = builder.read::<BoolVariable>();
263+
let computed_result = builder.lte(v0, v1);
264+
builder.assert_is_equal(result, computed_result);
265+
266+
let circuit = builder.build();
267+
268+
let test_cases = [
269+
(0u32, 0u32, true),
270+
(0u32, 100u32, true),
271+
(10u32, 0u32, false),
272+
];
273+
274+
for test_case in test_cases.iter() {
275+
let mut input = circuit.input();
276+
input.write::<U32Variable>(test_case.0);
277+
input.write::<U32Variable>(test_case.1);
278+
input.write::<BoolVariable>(test_case.2);
279+
280+
let (proof, output) = circuit.prove(&input);
281+
circuit.verify(&proof, &input, &output);
282+
}
283+
}
284+
229285
#[test]
230286
fn test_math_gt() {
231287
let mut builder = DefaultBuilder::new();

0 commit comments

Comments
 (0)