From 9e18d34936adbb8848e9c2c46097617705be3449 Mon Sep 17 00:00:00 2001 From: The-Lum <86879521+The-Lum@users.noreply.github.com> Date: Thu, 1 Feb 2024 23:10:43 +0100 Subject: [PATCH] Update and rename Random.java to RandomFunction.java Feat: improve to accept 0, 1, 2 args --- .../{Random.java => RandomFunction.java} | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) rename src/net/sourceforge/plantuml/tim/stdlib/{Random.java => RandomFunction.java} (75%) diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Random.java b/src/net/sourceforge/plantuml/tim/stdlib/RandomFunction.java similarity index 75% rename from src/net/sourceforge/plantuml/tim/stdlib/Random.java rename to src/net/sourceforge/plantuml/tim/stdlib/RandomFunction.java index 51e0accdf..915779c9c 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Random.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/RandomFunction.java @@ -36,6 +36,7 @@ package net.sourceforge.plantuml.tim.stdlib; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; import net.sourceforge.plantuml.tim.EaterException; @@ -46,22 +47,35 @@ import net.sourceforge.plantuml.tim.TMemory; import net.sourceforge.plantuml.tim.expression.TValue; import net.sourceforge.plantuml.utils.LineLocation; -public class Random extends SimpleReturnFunction { +public class RandomFunction extends SimpleReturnFunction { public TFunctionSignature getSignature() { - return new TFunctionSignature("%random", 1); + return new TFunctionSignature("%random", 2); } public boolean canCover(int nbArg, Set namedArgument) { - return nbArg == 1; + return nbArg == 0 || nbArg == 1 || nbArg == 2; } + final Random random = new Random(); + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List values, Map named) throws EaterException, EaterExceptionLocated { - if (values.get(0).isNumber()) { - final int limit = values.get(0).toInt(); - return TValue.fromInt((int) (Math.random() * limit)); + switch (values.size()) { + case 0: + return TValue.fromInt(random.nextInt(2)); + + case 1: + final Integer mx = values.get(0).toInt(); + return TValue.fromInt(random.nextInt(mx)); + + case 2: + final Integer min = values.get(0).toInt(); + final Integer max = values.get(1).toInt(); + return TValue.fromInt(random.nextInt(max - min) + min); + + default: + throw EaterException.located("Error on Random: Too many argument"); } - return TValue.fromInt(0); } }