anchor.diff:  
       // -a * -b = a * b
       exp = new Times(new UnaryMinus('a'), new UnaryMinus('b'));
  -    expect(exp.simplify(), new isInstanceOf<Times>());
  +    expect(exp.simplify(), new TypeMatcher<Times>());
       expect(_isVariable((exp.simplify() as Times).first, 'a'), isTrue);
       expect(_isVariable((exp.simplify() as Times).second, 'b'), isTrue);
   
       // a * 0 = 0
       exp = new Times(new UnaryMinus('a'), 0);
  -    expect(exp.simplify(), new isInstanceOf<Number>());
  +    expect(exp.simplify(), new TypeMatcher<Number>());
       expect((exp.simplify() as Number).value == 0, isTrue);
   
       // 0 * a = 0
       exp = new Times(0, new Variable('a'));
  -    expect(exp.simplify(), new isInstanceOf<Number>());
  +    expect(exp.simplify(), new TypeMatcher<Number>());
       expect((exp.simplify() as Number).value == 0, isTrue);
   
       // a * 1 = a
  
positive.code:     ];
  
      for (BinaryOperator binOp in binOps) {
        expect(binOp.first, new isInstanceOf<Variable>());
        expect(binOp.second, new isInstanceOf<Number>());
      }
    }
  
  
negative.code:     CustomFunction cf = new CustomFunction('sqrt', vars, new Sqrt(x));
  
      expect(cf.domainDimension, equals(vars.length));
      expect(cf.expression, new TypeMatcher<Sqrt>());
  
      //TODO more tests.
    }
  