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: 
      // -a * -b = a * b
      exp = new Times(new UnaryMinus('a'), new UnaryMinus('b'));
      expect(exp.simplify(), new isInstanceOf<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() as Number).value == 0, isTrue);
  
      // 0 * a = 0
      exp = new Times(0, new Variable('a'));
      expect(exp.simplify(), new isInstanceOf<Number>());
      expect((exp.simplify() as Number).value == 0, isTrue);
  
      // a * 1 = a
  
negative.code: 
      // 0 - a = - a
      exp = new Minus(0, 'a');
      expect(exp.simplify(), new TypeMatcher<UnaryMinus>());
      expect((exp.simplify() as UnaryMinus).exp, new TypeMatcher<Variable>());
  
      // a - -(b) = a + b
      exp = new Minus('a', new UnaryMinus('b'));
      expect(exp.simplify(), new TypeMatcher<Plus>());
      expect((exp.simplify() as Plus).first, new TypeMatcher<Variable>());
      expect((exp.simplify() as Plus).second, new TypeMatcher<Variable>());
  
      /*
       *  Times
       */
      // -a * b = - (a * b)
      exp = new Times(new UnaryMinus('a'), 'b');
      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);
  