From 3314a410e06cbec7263dec94b7898feb0d642850 Mon Sep 17 00:00:00 2001 From: Brad Arant Date: Mon, 24 Nov 2025 12:15:56 -0800 Subject: [PATCH] Added MIN and MAX functions for operand. --- Operand.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++-- tests/testjet.jet | 10 ++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/Operand.cpp b/Operand.cpp index b250e23..af8bee7 100644 --- a/Operand.cpp +++ b/Operand.cpp @@ -146,9 +146,63 @@ namespace jet { } else throw coreutils::Exception("Expecting ) at end of ABS expression."); } else if(in.ifNextIgnoreCase("MAX")) { - + if(!in.ifNext("(")) + throw coreutils::Exception("Expecting ( for MAX parameters."); + Operand *parm = new Operand(in, tag); + string = parm->string; + doubleValue = parm->doubleValue; + isNumber = parm->isNumber; + delete parm; + while(in.ifNext(",")) { + parm = new Operand(in, tag); + if(isNumber != parm->isNumber) + throw coreutils::Exception("All parameters in MAX expression must be same type."); + if(isNumber) { + if(parm->doubleValue > doubleValue) { + doubleValue = parm->doubleValue; + string = parm->string; + } + } else { + if(parm->string > string) { + doubleValue = parm->doubleValue; + string = parm->string; + } + } + delete parm; + } + if(!in.ifNext(")")) { + throw coreutils::Exception("Expecting ) at end of MAX expression."); + } + string.removeTrailingZeros(); } else if(in.ifNextIgnoreCase("MIN")) { - + if(!in.ifNext("(")) + throw coreutils::Exception("Expecting ( for MIN parameters."); + Operand *parm = new Operand(in, tag); + string = parm->string; + doubleValue = parm->doubleValue; + isNumber = parm->isNumber; + delete parm; + while(in.ifNext(",")) { + parm = new Operand(in, tag); + if(isNumber != parm->isNumber) + throw coreutils::Exception("All parameters in MIN expression must be same type."); + if(isNumber) { + if(parm->doubleValue < doubleValue) { + doubleValue = parm->doubleValue; + string = parm->string; + } + } else { + if(parm->string < string) { + doubleValue = parm->doubleValue; + string = parm->string; + } + } + delete parm; + } + if(!in.ifNext(")")) { + throw coreutils::Exception("Expecting ) at end of MIN expression."); + } + string.removeTrailingZeros(); } else if(in.ifNextIgnoreCase("POW")) { if(!in.ifNext("(")) throw coreutils::Exception("Expecting ( for POW parameters."); diff --git a/tests/testjet.jet b/tests/testjet.jet index 974334c..1c4b4c8 100755 --- a/tests/testjet.jet +++ b/tests/testjet.jet @@ -64,9 +64,19 @@ $[rc] + + max=$[max] + + max=$[max] + + min=$[min] + + min=$[min] + $[ls] $[file] + $[file] $[fullpath] $[noext]