anchor.diff:          expect(complex.arg(), 3 * math.pi / 4);
         });
         test('tryParse', () {
  -        expect(Complex.tryParse('1+2i'), Complex(1, 2));
  -        expect(Complex.tryParse('1-2i'), Complex(1, -2));
  -        expect(Complex.tryParse('-1+2i'), Complex(-1, 2));
  -        expect(Complex.tryParse('-1-2i'), Complex(-1, -2));
  +        expect(Complex.tryParse('1+2i'), const Complex(1, 2));
  +        expect(Complex.tryParse('1-2i'), const Complex(1, -2));
  +        expect(Complex.tryParse('-1+2i'), const Complex(-1, 2));
  +        expect(Complex.tryParse('-1-2i'), const Complex(-1, -2));
         });
         test('tryParse (whitespace)', () {
  -        expect(Complex.tryParse('1 + 2i'), Complex(1, 2));
  -        expect(Complex.tryParse('1 - 2i'), Complex(1, -2));
  -        expect(Complex.tryParse(' - 1 + 2 i '), Complex(-1, 2));
  -        expect(Complex.tryParse(' - 1 - 2 i '), Complex(-1, -2));
  +        expect(Complex.tryParse('1 + 2i'), const Complex(1, 2));
  +        expect(Complex.tryParse('1 - 2i'), const Complex(1, -2));
  +        expect(Complex.tryParse(' - 1 + 2 i '), const Complex(-1, 2));
  +        expect(Complex.tryParse(' - 1 - 2 i '), const Complex(-1, -2));
         });
         test('tryParse (permutation)', () {
  -        expect(Complex.tryParse('2i+1'), Complex(1, 2));
  +        expect(Complex.tryParse('2i+1'), const Complex(1, 2));
         });
         test('tryParse (real)', () {
  -        expect(Complex.tryParse('1'), Complex(1));
  -        expect(Complex.tryParse('1.2'), Complex(1.2));
  -        expect(Complex.tryParse('-1.2'), Complex(-1.2));
  -        expect(Complex.tryParse('1.2e2'), Complex(120));
  -        expect(Complex.tryParse('1.2e-2'), Complex(0.012));
  +        expect(Complex.tryParse('1'), const Complex(1));
  +        expect(Complex.tryParse('1.2'), const Complex(1.2));
  +        expect(Complex.tryParse('-1.2'), const Complex(-1.2));
  +        expect(Complex.tryParse('1.2e2'), const Complex(120));
  +        expect(Complex.tryParse('1.2e-2'), const Complex(0.012));
         });
         test('tryParse (imaginary)', () {
  -        expect(Complex.tryParse('i'), Complex(0, 1));
  -        expect(Complex.tryParse('1I'), Complex(0, 1));
  -        expect(Complex.tryParse('1.2i'), Complex(0, 1.2));
  -        expect(Complex.tryParse('-1.2I'), Complex(0, -1.2));
  -        expect(Complex.tryParse('1.2e2i'), Complex(0, 120));
  -        expect(Complex.tryParse('1.2e-2I'), Complex(0, 0.012));
  -        expect(Complex.tryParse('1*i'), Complex(0, 1));
  -        expect(Complex.tryParse('1.2*I'), Complex(0, 1.2));
  -        expect(Complex.tryParse('1.2e2*i'), Complex(0, 120));
  -        expect(Complex.tryParse('1.2e-2*I'), Complex(0, 0.012));
  +        expect(Complex.tryParse('i'), const Complex(0, 1));
  +        expect(Complex.tryParse('1I'), const Complex(0, 1));
  +        expect(Complex.tryParse('1.2i'), const Complex(0, 1.2));
  +        expect(Complex.tryParse('-1.2I'), const Complex(0, -1.2));
  +        expect(Complex.tryParse('1.2e2i'), const Complex(0, 120));
  +        expect(Complex.tryParse('1.2e-2I'), const Complex(0, 0.012));
  +        expect(Complex.tryParse('1*i'), const Complex(0, 1));
  +        expect(Complex.tryParse('1.2*I'), const Complex(0, 1.2));
  +        expect(Complex.tryParse('1.2e2*i'), const Complex(0, 120));
  +        expect(Complex.tryParse('1.2e-2*I'), const Complex(0, 0.012));
         });
         test('tryParse (error)', () {
           expect(Complex.tryParse(''), isNull);
  
positive.code:         expect(quaternion.abs(), closeTo(1.0, epsilon));
        });
        test('tryParse', () {
          expect(Quaternion.tryParse('1+2i+3j+4k'), Quaternion(1, 2, 3, 4));
          expect(Quaternion.tryParse('1-2i+3j-4k'), Quaternion(1, -2, 3, -4));
          expect(Quaternion.tryParse('-1+2i-3j+4k'), Quaternion(-1, 2, -3, 4));
          expect(Quaternion.tryParse('-1-2i-3j-4k'), Quaternion(-1, -2, -3, -4));
        });
        test('tryParse (permutation)', () {
          expect(Quaternion.tryParse('1+2i+3j+4k'), Quaternion(1, 2, 3, 4));
          expect(Quaternion.tryParse('2i+1+3j+4k'), Quaternion(1, 2, 3, 4));
          expect(Quaternion.tryParse('4k+2i+3j+1'), Quaternion(1, 2, 3, 4));
          expect(Quaternion.tryParse('3j+4k+2i+1'), Quaternion(1, 2, 3, 4));
        });
        test('tryParse (whitespace)', () {
          expect(Quaternion.tryParse('1 + 2i + 3j + 4k'), Quaternion(1, 2, 3, 4));
          expect(Quaternion.tryParse(' 1 - 2i + 3j - 4k '),
              Quaternion(1, -2, 3, -4));
        });
        test('tryParse (real)', () {
          expect(Quaternion.tryParse('1'), Quaternion(1));
          expect(Quaternion.tryParse('1.2'), Quaternion(1.2));
          expect(Quaternion.tryParse('-1.2'), Quaternion(-1.2));
          expect(Quaternion.tryParse('1.2e2'), Quaternion(120));
          expect(Quaternion.tryParse('1.2e-2'), Quaternion(0.012));
        });
        test('tryParse (vector)', () {
          expect(Quaternion.tryParse('i'), Quaternion(0, 1));
          expect(Quaternion.tryParse('j'), Quaternion(0, 0, 1));
          expect(Quaternion.tryParse('k'), Quaternion(0, 0, 0, 1));
          expect(Quaternion.tryParse('1.2I'), Quaternion(0, 1.2));
          expect(Quaternion.tryParse('1.2J'), Quaternion(0, 0, 1.2));
          expect(Quaternion.tryParse('1.2K'), Quaternion(0, 0, 0, 1.2));
          expect(Quaternion.tryParse('1.2e2i'), Quaternion(0, 120));
          expect(Quaternion.tryParse('1.2e2j'), Quaternion(0, 0, 120));
          expect(Quaternion.tryParse('1.2e2k'), Quaternion(0, 0, 0, 120));
          expect(Quaternion.tryParse('-1.2e-2i'), Quaternion(0, -0.012));
          expect(Quaternion.tryParse('-1.2e-2j'), Quaternion(0, 0, -0.012));
          expect(Quaternion.tryParse('-1.2e-2k'), Quaternion(0, 0, 0, -0.012));
        });
        test('tryParse (error)', () {
          expect(Quaternion.tryParse(''), isNull);
  
negative.code:         expect(Quaternion.i.toString(), 'Quaternion(0, 1, 0, 0)');
          expect(Quaternion.j.toString(), 'Quaternion(0, 0, 1, 0)');
          expect(Quaternion.k.toString(), 'Quaternion(0, 0, 0, 1)');
          expect(
              const Quaternion(0, 2, 4, 6).toString(), 'Quaternion(0, 2, 4, 6)');
          expect(const Quaternion(1, -1, 2, -3).toString(),
              'Quaternion(1, -1, 2, -3)');
        });
      });
      group('comparing', () {
        test('equal', () {
          expect(const Quaternion(2, 3, 4, 5) == const Quaternion(2, 3, 4, 5),
              isTrue);
          expect(const Quaternion(2, 3, 4, 5) == const Quaternion(1, 3, 4, 5),
              isFalse);
          expect(const Quaternion(2, 3, 4, 5) == const Quaternion(2, 4, 4, 5),
              isFalse);
          expect(const Quaternion(2, 3, 4, 5) == const Quaternion(2, 3, 3, 5),
              isFalse);
          expect(const Quaternion(2, 3, 4, 5) == const Quaternion(2, 3, 4, 6),
              isFalse);
        });
        test('hash', () {
          expect(const Quaternion(2, 3, 4, 5).hashCode,
              const Quaternion(2, 3, 4, 5).hashCode);
          expect(const Quaternion(2, 3, 4, 5).hashCode,
              isNot(const Quaternion(3, 2, 4, 5).hashCode));
          expect(const Quaternion(2, 3, 4, 5).hashCode,
              isNot(const Quaternion(2, 4, 3, 5).hashCode));
          expect(const Quaternion(2, 3, 4, 5).hashCode,
              isNot(const Quaternion(2, 3, 5, 4).hashCode));
        });
      });
    });
  