anchor.diff:  
       // a * -b = - (a * b)
       exp = new Times('a', new UnaryMinus('b'));
  -    expect(exp.simplify(), new isInstanceOf<UnaryMinus>());
  -    expect((exp.simplify() as UnaryMinus).exp, new isInstanceOf<Times>());
  +    expect(exp.simplify(), new TypeMatcher<UnaryMinus>());
  +    expect((exp.simplify() as UnaryMinus).exp, new TypeMatcher<Times>());
       expect(
           _isVariable(((exp.simplify() as UnaryMinus).exp as Times).first, 'a'),
           isTrue);
  
positive.code:      */
      // 0^x = 0
      exp = new Power(0, 'x');
      expect(exp.simplify(), new isInstanceOf<Number>());
      expect((exp.simplify() as Number).value == 0, isTrue);
  
      // 1^x = 1
      exp = new Power(1, 'x');
      expect(exp.simplify(), new isInstanceOf<Number>());
      expect((exp.simplify() as Number).value == 1, isTrue);
  
      // x^0 = 1
      exp = new Power('x', 0);
      expect(exp.simplify(), new isInstanceOf<Number>());
      expect((exp.simplify() as Number).value == 1, isTrue);
  
      // x^1 = x
  
negative.code:      */
      // tan(0) = 0
      exp = new Tan(new Number(0));
      expect(exp.simplify(), new TypeMatcher<Number>());
      expect((exp.simplify() as Number).value == 0, isTrue);
  
      /*
       * Abs
       */
      exp = new Abs(new Number(0));
      expect(exp.simplify(), new TypeMatcher<Abs>());
      expect((exp.simplify() as Abs).arg, new TypeMatcher<BoundVariable>());
  
      /*
       * Ceil
       */
      exp = new Ceil(new Floor(new Variable('x')));
      expect((exp.simplify() as Floor).arg, new TypeMatcher<Variable>());
  
      /*
       * Floor
       */
      exp = new Floor(new Ceil(new Variable('x')));
      expect((exp.simplify() as Ceil).arg, new TypeMatcher<Variable>());
  
      /*
       * Sgn
       */
      exp = new Sgn(new Number(0));
      expect(exp.simplify(), new TypeMatcher<Sgn>());
      expect((exp.simplify() as Sgn).arg, new TypeMatcher<BoundVariable>());
    }
  
    /// Tests differentiation of default functions.
  