예제 #1
0
 @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;
 }
예제 #2
0
  // =====================================================================
  //  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);
    }
  }