com.github.dakusui.scriptiveunit.drivers.Arith Maven / Gradle / Ivy
package com.github.dakusui.scriptiveunit.drivers;
import com.github.dakusui.scriptiveunit.annotations.Scriptable;
import com.github.dakusui.scriptiveunit.core.Utils;
import com.github.dakusui.scriptiveunit.model.Stage;
import com.github.dakusui.scriptiveunit.model.func.Func;
import java.math.BigDecimal;
import java.util.function.Function;
import static java.math.MathContext.DECIMAL128;
import static java.util.Objects.requireNonNull;
public class Arith {
@SuppressWarnings("unused")
@SafeVarargs
@Scriptable
public final Func add(Func... numbers) {
return (Stage input) -> calc(input, (BigDecimal v) -> augend -> v.add(augend, DECIMAL128), numbers);
}
@SuppressWarnings("unused")
@SafeVarargs
@Scriptable
public final Func sub(Func... numbers) {
return (Stage input) -> calc(input, (BigDecimal v) -> subtrahend -> v.subtract(subtrahend, DECIMAL128), numbers);
}
@SuppressWarnings("unused")
@SafeVarargs
@Scriptable
public final Func mul(Func... numbers) {
return (Stage input) -> calc(input, (BigDecimal v) -> multiplicand -> v.multiply(multiplicand, DECIMAL128), numbers);
}
@SuppressWarnings("unused")
@SafeVarargs
@Scriptable
public final Func div(Func... numbers) {
return (Stage input) -> calc(input, (BigDecimal v) -> divisor -> v.divide(divisor, DECIMAL128), numbers);
}
@SuppressWarnings("unused")
@SafeVarargs
private final BigDecimal calc(Stage stage, Function> op, Func... numbers) {
BigDecimal ret = null;
for (Func eachNumber : numbers) {
BigDecimal each = Utils.toBigDecimal(eachNumber.apply(stage));
if (ret == null) {
ret = requireNonNull(Utils.toBigDecimal(each));
} else {
ret = op.apply(ret).apply(Utils.toBigDecimal(each));
}
}
return ret;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy