diff --git a/arithmetization/src/test/java/net/consensys/linea/zktracer/precompiles/ModexpTestForSequencer.java b/arithmetization/src/test/java/net/consensys/linea/zktracer/precompiles/ModexpTestForSequencer.java index 80a5793077..836d5d51fb 100644 --- a/arithmetization/src/test/java/net/consensys/linea/zktracer/precompiles/ModexpTestForSequencer.java +++ b/arithmetization/src/test/java/net/consensys/linea/zktracer/precompiles/ModexpTestForSequencer.java @@ -15,6 +15,8 @@ package net.consensys.linea.zktracer.precompiles; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.WORD_SIZE; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; @@ -101,26 +103,38 @@ void modexpTestForSequencer(Bytes input, boolean willFailDueToConstraints) { } catch (IllegalArgumentException e) { // This is expected when the input is invalid assertTrue(willFailDueToConstraints); + return; } + assertFalse(willFailDueToConstraints); } private Stream modexpTestForSequencerSource() { List arguments = new ArrayList<>(); + // Note that a short byte size WORD can be places only at the end of the input + // Including it may mess with the willFailDueToConstraints flag for (ModexpCallDataWordVariants w1 : ModexpCallDataWordVariants.values()) { arguments.add(Arguments.of(w1.getW(), w1.isInvalid())); + if (w1.isShort()) { + continue; + } for (ModexpCallDataWordVariants w2 : ModexpCallDataWordVariants.values()) { arguments.add( Arguments.of( Bytes.concatenate(w1.getW(), w2.getW()), w1.isInvalid() || w2.isInvalid())); + if (w2.isShort()) { + continue; + } for (ModexpCallDataWordVariants w3 : ModexpCallDataWordVariants.values()) { arguments.add( Arguments.of( Bytes.concatenate(w1.getW(), w2.getW(), w3.getW()), w1.isInvalid() || w2.isInvalid() || w3.isInvalid())); - arguments.add( - Arguments.of( - Bytes.concatenate(w1.getW(), w2.getW(), w3.getW(), Bytes.random(1536, RANDOM)), - w1.isInvalid() || w2.isInvalid() || w3.isInvalid())); + if (!w3.isShort()) { + arguments.add( + Arguments.of( + Bytes.concatenate(w1.getW(), w2.getW(), w3.getW(), Bytes.random(1536, RANDOM)), + w1.isInvalid() || w2.isInvalid() || w3.isInvalid())); + } } } } @@ -159,5 +173,9 @@ public boolean isInvalid() { || this.getW() == ILLEGAL_SHORTEST.getW() || this.getW() == MAX_WORD.getW(); } + + public boolean isShort() { + return this.getW().size() < WORD_SIZE; + } } }