@Override public Document increment(CharSequence name, Value increment) { if (!increment.isNumber()) throw new IllegalArgumentException("The increment must be a number but is " + increment); if (fields.containsKey(name)) { Number current = getNumber(name); if (current != null) { Value updated = Value.create(MathOps.add(current, increment.asNumber())); setValue(name, Value.create(updated)); } } else { setValue(name, increment); } return this; }
// ===================================================================== // Check the function. Used in 'checkunits'. // ===================================================================== void check() { if (Env.verbose == 2) Env.out.println("doing function " + name); Value v; if (forward.dimen != null) { try { v = Value.parse(forward.dimen); v.completereduce(); } catch (EvalError e) { Env.out.println("Function '" + name + "' has invalid type '" + forward.dimen + "'"); return; } } else v = new Value(); v.factor *= 7; // Arbitrary choice where we evaluate inverse Value saved = new Value(v); try { applyTo(v); } catch (EvalError e) { Env.out.println("Error in definition " + name + "(" + forward.param + ") as " + forward.def); return; } if (inverse.def == null) { Env.out.println("Warning: no inverse for function '" + name + "'"); return; } try { applyInverseTo(v); v.div(saved); v.completereduce(); double delta = v.factor - 1; if (!v.isNumber() || delta < -1e-12 || delta > 1e-12) Env.out.println("Inverse is not the inverse for function '" + name + "'"); } catch (EvalError e) { Env.out.println("Error in inverse ~" + name + "(" + inverse.param + ") as " + inverse.def); } }