diff --git a/analysis_options.yaml b/analysis_options.yaml
index 6ddb107..628d93e 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -4,7 +4,6 @@
     implicit-casts: false
 linter:
   rules:
-    #- annotate_overrides
     - avoid_function_literals_in_foreach_calls
     - avoid_init_to_null
     - avoid_null_checks_in_equality_operators
@@ -30,7 +29,6 @@
     - list_remove_unrelated_type
     - no_adjacent_strings_in_list
     - non_constant_identifier_names
-    #- omit_local_variable_types
     - only_throw_errors
     - overridden_fields
     - package_api_docs
@@ -44,7 +42,6 @@
     - prefer_generic_function_type_aliases
     - prefer_initializing_formals
     - prefer_interpolation_to_compose_strings
-    #- prefer_single_quotes
     - prefer_typing_uninitialized_variables
     - slash_for_doc_comments
     - test_types_in_equals
@@ -57,4 +54,3 @@
     - unnecessary_new
     - unnecessary_null_aware_assignments
     - unnecessary_statements
-    #- unnecessary_this
diff --git a/lib/src/int32.dart b/lib/src/int32.dart
index 3a9d017..ec31d9d 100644
--- a/lib/src/int32.dart
+++ b/lib/src/int32.dart
@@ -54,12 +54,12 @@
   // TODO(rice) - Make this faster by converting several digits at once.
   static Int32 parseRadix(String s, int radix) {
     _validateRadix(radix);
-    Int32 x = ZERO;
-    for (int i = 0; i < s.length; i++) {
-      int c = s.codeUnitAt(i);
-      int digit = _decodeDigit(c);
+    var x = ZERO;
+    for (var i = 0; i < s.length; i++) {
+      var c = s.codeUnitAt(i);
+      var digit = _decodeDigit(c);
       if (digit < 0 || digit >= radix) {
-        throw FormatException("Non-radix code unit: $c");
+        throw FormatException('Non-radix code unit: $c');
       }
       x = ((x * radix) + digit) as Int32;
     }
@@ -145,76 +145,88 @@
   // Int32 % Int32 => Int32
   // Int32 % Int64 => Int32
 
+  @override
   IntX operator +(other) {
     if (other is Int64) {
-      return this.toInt64() + other;
+      return toInt64() + other;
     }
     return Int32(_i + _toInt(other));
   }
 
+  @override
   IntX operator -(other) {
     if (other is Int64) {
-      return this.toInt64() - other;
+      return toInt64() - other;
     }
     return Int32(_i - _toInt(other));
   }
 
+  @override
   Int32 operator -() => Int32(-_i);
 
+  @override
   IntX operator *(other) {
     if (other is Int64) {
-      return this.toInt64() * other;
+      return toInt64() * other;
     }
     // TODO(rice) - optimize
-    return (this.toInt64() * other).toInt32();
+    return (toInt64() * other).toInt32();
   }
 
+  @override
   Int32 operator %(other) {
     if (other is Int64) {
       // Result will be Int32
-      return (this.toInt64() % other).toInt32();
+      return (toInt64() % other).toInt32();
     }
     return Int32(_i % _toInt(other));
   }
 
+  @override
   Int32 operator ~/(other) {
     if (other is Int64) {
-      return (this.toInt64() ~/ other).toInt32();
+      return (toInt64() ~/ other).toInt32();
     }
     return Int32(_i ~/ _toInt(other));
   }
 
+  @override
   Int32 remainder(other) {
     if (other is Int64) {
-      Int64 t = this.toInt64();
+      var t = toInt64();
       return (t - (t ~/ other) * other).toInt32();
     }
     return (this - (this ~/ other) * other) as Int32;
   }
 
+  @override
   Int32 operator &(other) {
     if (other is Int64) {
-      return (this.toInt64() & other).toInt32();
+      return (toInt64() & other).toInt32();
     }
     return Int32(_i & _toInt(other));
   }
 
+  @override
   Int32 operator |(other) {
     if (other is Int64) {
-      return (this.toInt64() | other).toInt32();
+      return (toInt64() | other).toInt32();
     }
     return Int32(_i | _toInt(other));
   }
 
+  @override
   Int32 operator ^(other) {
     if (other is Int64) {
-      return (this.toInt64() ^ other).toInt32();
+      return (toInt64() ^ other).toInt32();
     }
     return Int32(_i ^ _toInt(other));
   }
 
+  @override
   Int32 operator ~() => Int32(~_i);
 
+  @override
   Int32 operator <<(int n) {
     if (n < 0) {
       throw ArgumentError(n);
@@ -225,6 +237,7 @@
     return Int32(_i << n);
   }
 
+  @override
   Int32 operator >>(int n) {
     if (n < 0) {
       throw ArgumentError(n);
@@ -241,6 +254,7 @@
     return Int32(value);
   }
 
+  @override
   Int32 shiftRightUnsigned(int n) {
     if (n < 0) {
       throw ArgumentError(n);
@@ -259,64 +273,86 @@
 
   /// Returns [:true:] if this [Int32] has the same numeric value as the
   /// given object.  The argument may be an [int] or an [IntX].
+  @override
   bool operator ==(other) {
     if (other is Int32) {
       return _i == other._i;
     } else if (other is Int64) {
-      return this.toInt64() == other;
+      return toInt64() == other;
     } else if (other is int) {
       return _i == other;
     }
     return false;
   }
 
+  @override
   int compareTo(other) {
     if (other is Int64) {
-      return this.toInt64().compareTo(other);
+      return toInt64().compareTo(other);
     }
     return _i.compareTo(_toInt(other));
   }
 
+  @override
   bool operator <(other) {
     if (other is Int64) {
-      return this.toInt64() < other;
+      return toInt64() < other;
     }
     return _i < _toInt(other);
   }
 
+  @override
   bool operator <=(other) {
     if (other is Int64) {
-      return this.toInt64() <= other;
+      return toInt64() <= other;
     }
     return _i <= _toInt(other);
   }
 
+  @override
   bool operator >(other) {
     if (other is Int64) {
-      return this.toInt64() > other;
+      return toInt64() > other;
     }
     return _i > _toInt(other);
   }
 
+  @override
   bool operator >=(other) {
     if (other is Int64) {
-      return this.toInt64() >= other;
+      return toInt64() >= other;
     }
     return _i >= _toInt(other);
   }
 
+  @override
   bool get isEven => (_i & 0x1) == 0;
+
+  @override
   bool get isMaxValue => _i == 2147483647;
+
+  @override
   bool get isMinValue => _i == -2147483648;
+
+  @override
   bool get isNegative => _i < 0;
+
+  @override
   bool get isOdd => (_i & 0x1) == 1;
+
+  @override
   bool get isZero => _i == 0;
+
+  @override
   int get bitLength => _i.bitLength;
 
+  @override
   int get hashCode => _i;
 
+  @override
   Int32 abs() => _i < 0 ? Int32(-_i) : this;
 
+  @override
   Int32 clamp(lowerLimit, upperLimit) {
     if (this < lowerLimit) {
       if (lowerLimit is IntX) return lowerLimit.toInt32();
@@ -330,21 +366,27 @@
     return this;
   }
 
+  @override
   int numberOfLeadingZeros() => _numberOfLeadingZeros(_i);
+
+  @override
   int numberOfTrailingZeros() => _numberOfTrailingZeros(_i);
 
+  @override
   Int32 toSigned(int width) {
     if (width < 1 || width > 32) throw RangeError.range(width, 1, 32);
     return Int32(_i.toSigned(width));
   }
 
+  @override
   Int32 toUnsigned(int width) {
     if (width < 0 || width > 32) throw RangeError.range(width, 0, 32);
     return Int32(_i.toUnsigned(width));
   }
 
+  @override
   List<int> toBytes() {
-    List<int> result = List<int>(4);
+    var result = List<int>(4);
     result[0] = _i & 0xff;
     result[1] = (_i >> 8) & 0xff;
     result[2] = (_i >> 16) & 0xff;
@@ -352,12 +394,24 @@
     return result;
   }
 
+  @override
   double toDouble() => _i.toDouble();
+
+  @override
   int toInt() => _i;
+
+  @override
   Int32 toInt32() => this;
+
+  @override
   Int64 toInt64() => Int64(_i);
 
+  @override
   String toString() => _i.toString();
+
+  @override
   String toHexString() => _i.toRadixString(16);
+
+  @override
   String toRadixString(int radix) => _i.toRadixString(radix);
 }
diff --git a/lib/src/int64.dart b/lib/src/int64.dart
index 3453a09..d624073 100644
--- a/lib/src/int64.dart
+++ b/lib/src/int64.dart
@@ -2,6 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// Many locals are declared as `int` or `double`. We keep local variable types
+// because the types are critical to the efficiency of many operations.
+//
+// ignore_for_file: omit_local_variable_types
+
 part of fixnum;
 
 /// An immutable 64-bit signed integer, in the range [-2^63, 2^63 - 1].
@@ -75,7 +80,7 @@
       int c = s.codeUnitAt(i);
       int digit = Int32._decodeDigit(c);
       if (digit < 0 || digit >= radix) {
-        throw FormatException("Non-radix char code: $c");
+        throw FormatException('Non-radix char code: $c');
       }
 
       // [radix] and [digit] are at most 6 bits, component is 22, so we can
@@ -192,6 +197,7 @@
     throw ArgumentError.value(value);
   }
 
+  @override
   Int64 operator +(other) {
     Int64 o = _promote(other);
     int sum0 = _l + o._l;
@@ -200,13 +206,16 @@
     return Int64._masked(sum0, sum1, sum2);
   }
 
+  @override
   Int64 operator -(other) {
     Int64 o = _promote(other);
     return _sub(_l, _m, _h, o._l, o._m, o._h);
   }
 
+  @override
   Int64 operator -() => _negate(_l, _m, _h);
 
+  @override
   Int64 operator *(other) {
     Int64 o = _promote(other);
 
@@ -288,12 +297,16 @@
     return Int64._masked(c0, c1, c2);
   }
 
+  @override
   Int64 operator %(other) => _divide(this, other, _RETURN_MOD);
 
+  @override
   Int64 operator ~/(other) => _divide(this, other, _RETURN_DIV);
 
+  @override
   Int64 remainder(other) => _divide(this, other, _RETURN_REM);
 
+  @override
   Int64 operator &(other) {
     Int64 o = _promote(other);
     int a0 = _l & o._l;
@@ -302,6 +315,7 @@
     return Int64._masked(a0, a1, a2);
   }
 
+  @override
   Int64 operator |(other) {
     Int64 o = _promote(other);
     int a0 = _l | o._l;
@@ -310,6 +324,7 @@
     return Int64._masked(a0, a1, a2);
   }
 
+  @override
   Int64 operator ^(other) {
     Int64 o = _promote(other);
     int a0 = _l ^ o._l;
@@ -318,10 +333,12 @@
     return Int64._masked(a0, a1, a2);
   }
 
+  @override
   Int64 operator ~() {
     return Int64._masked(~_l, ~_m, ~_h);
   }
 
+  @override
   Int64 operator <<(int n) {
     if (n < 0) {
       throw ArgumentError.value(n);
@@ -348,6 +365,7 @@
     return Int64._masked(res0, res1, res2);
   }
 
+  @override
   Int64 operator >>(int n) {
     if (n < 0) {
       throw ArgumentError.value(n);
@@ -393,6 +411,7 @@
     return Int64._masked(res0, res1, res2);
   }
 
+  @override
   Int64 shiftRightUnsigned(int n) {
     if (n < 0) {
       throw ArgumentError.value(n);
@@ -422,6 +441,7 @@
 
   /// Returns [:true:] if this [Int64] has the same numeric value as the
   /// given object.  The argument may be an [int] or an [IntX].
+  @override
   bool operator ==(other) {
     Int64 o;
     if (other is Int64) {
@@ -441,6 +461,7 @@
     return false;
   }
 
+  @override
   int compareTo(other) => _compareTo(other);
 
   int _compareTo(other) {
@@ -468,18 +489,37 @@
     return 0;
   }
 
+  @override
   bool operator <(other) => _compareTo(other) < 0;
+
+  @override
   bool operator <=(other) => _compareTo(other) <= 0;
-  bool operator >(other) => this._compareTo(other) > 0;
+
+  @override
+  bool operator >(other) => _compareTo(other) > 0;
+
+  @override
   bool operator >=(other) => _compareTo(other) >= 0;
 
+  @override
   bool get isEven => (_l & 0x1) == 0;
+
+  @override
   bool get isMaxValue => (_h == _MASK2 >> 1) && _m == _MASK && _l == _MASK;
+
+  @override
   bool get isMinValue => _h == _SIGN_BIT_MASK && _m == 0 && _l == 0;
+
+  @override
   bool get isNegative => (_h & _SIGN_BIT_MASK) != 0;
+
+  @override
   bool get isOdd => (_l & 0x1) == 1;
+
+  @override
   bool get isZero => _h == 0 && _m == 0 && _l == 0;
 
+  @override
   int get bitLength {
     if (isZero) return 0;
     int a0 = _l, a1 = _m, a2 = _h;
@@ -494,6 +534,7 @@
   }
 
   /// Returns a hash code based on all the bits of this [Int64].
+  @override
   int get hashCode {
     // TODO(sra): Should we ensure that hashCode values match corresponding int?
     // i.e. should `new Int64(x).hashCode == x.hashCode`?
@@ -502,10 +543,12 @@
     return bottom ^ top;
   }
 
+  @override
   Int64 abs() {
-    return this.isNegative ? -this : this;
+    return isNegative ? -this : this;
   }
 
+  @override
   Int64 clamp(lowerLimit, upperLimit) {
     Int64 lower = _promote(lowerLimit);
     Int64 upper = _promote(upperLimit);
@@ -516,6 +559,7 @@
 
   /// Returns the number of leading zeros in this [Int64] as an [int]
   /// between 0 and 64.
+  @override
   int numberOfLeadingZeros() {
     int b2 = Int32._numberOfLeadingZeros(_h);
     if (b2 == 32) {
@@ -532,6 +576,7 @@
 
   /// Returns the number of trailing zeros in this [Int64] as an [int]
   /// between 0 and 64.
+  @override
   int numberOfTrailingZeros() {
     int zeros = Int32._numberOfTrailingZeros(_l);
     if (zeros < 32) {
@@ -551,6 +596,7 @@
     return 64;
   }
 
+  @override
   Int64 toSigned(int width) {
     if (width < 1 || width > 64) throw RangeError.range(width, 1, 64);
     if (width > _BITS01) {
@@ -568,6 +614,7 @@
     }
   }
 
+  @override
   Int64 toUnsigned(int width) {
     if (width < 0 || width > 64) throw RangeError.range(width, 0, 64);
     if (width > _BITS01) {
@@ -582,6 +629,7 @@
     }
   }
 
+  @override
   List<int> toBytes() {
     List<int> result = List<int>(8);
     result[0] = _l & 0xff;
@@ -595,8 +643,10 @@
     return result;
   }
 
+  @override
   double toDouble() => toInt().toDouble();
 
+  @override
   int toInt() {
     int l = _l;
     int m = _m;
@@ -614,24 +664,28 @@
   }
 
   /// Returns an [Int32] containing the low 32 bits of this [Int64].
+  @override
   Int32 toInt32() {
     return Int32(((_m & 0x3ff) << _BITS) | _l);
   }
 
   /// Returns `this`.
+  @override
   Int64 toInt64() => this;
 
   /// Returns the value of this [Int64] as a decimal [String].
+  @override
   String toString() => _toRadixString(10);
 
   // TODO(rice) - Make this faster by avoiding arithmetic.
+  @override
   String toHexString() {
-    if (isZero) return "0";
+    if (isZero) return '0';
     Int64 x = this;
-    String hexStr = "";
+    String hexStr = '';
     while (!x.isZero) {
       int digit = x._l & 0xf;
-      hexStr = "${_hexDigit(digit)}$hexStr";
+      hexStr = '${_hexDigit(digit)}$hexStr';
       x = x.shiftRightUnsigned(4);
     }
     return hexStr;
@@ -648,6 +702,7 @@
     return _toRadixStringUnsigned(Int32._validateRadix(radix), _l, _m, _h, '');
   }
 
+  @override
   String toRadixString(int radix) {
     return _toRadixString(Int32._validateRadix(radix));
   }
@@ -712,7 +767,7 @@
     // need only two chunks, but radix values 17-19 and 33-36 generate only 15
     // or 16 bits per iteration, so sometimes the third chunk is needed.
 
-    String chunk1 = "", chunk2 = "", chunk3 = "";
+    String chunk1 = '', chunk2 = '', chunk3 = '';
 
     while (!(d4 == 0 && d3 == 0)) {
       int q = d4 ~/ fatRadix;
@@ -739,7 +794,7 @@
       r = d0 - q * fatRadix;
       d0 = q;
 
-      assert(chunk3 == "");
+      assert(chunk3 == '');
       chunk3 = chunk2;
       chunk2 = chunk1;
       // Adding [fatRadix] Forces an extra digit which we discard to get a fixed
@@ -814,7 +869,7 @@
   ];
 
   String toDebugString() {
-    return "Int64[_l=$_l, _m=$_m, _h=$_h]";
+    return 'Int64[_l=$_l, _m=$_m, _h=$_h]';
   }
 
   static Int64 _masked(int a0, int a1, int a2) =>
@@ -831,7 +886,7 @@
     return _sub(0, 0, 0, b0, b1, b2);
   }
 
-  String _hexDigit(int digit) => "0123456789ABCDEF"[digit];
+  String _hexDigit(int digit) => '0123456789ABCDEF'[digit];
 
   // Work around dart2js bugs with negative arguments to '>>' operator.
   static int _shiftRight(int x, int n) {
diff --git a/lib/src/intx.dart b/lib/src/intx.dart
index cdc4b05..e1c1342 100644
--- a/lib/src/intx.dart
+++ b/lib/src/intx.dart
@@ -65,10 +65,12 @@
   /// bits to the right. High-order bits are filled with zeros.
   IntX shiftRightUnsigned(int shiftAmount);
 
+  @override
   int compareTo(other);
 
   /// Returns `true` if and only if [other] is an int or IntX equal in
   /// value to this integer.
+  @override
   bool operator ==(other);
 
   /// Relational less than operator.
@@ -103,6 +105,7 @@
   /// Returns `true` if and only if this integer is zero.
   bool get isZero;
 
+  @override
   int get hashCode;
 
   /// Returns the absolute value of this integer.
@@ -179,6 +182,7 @@
 
   /// Returns a string representing the value of this integer in decimal
   /// notation; example: `'13'`.
+  @override
   String toString();
 
   /// Returns a string representing the value of this integer in hexadecimal
diff --git a/pubspec.yaml b/pubspec.yaml
index a08ee33..51c8708 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: fixnum
-version: 0.10.11
+version: 0.10.12-dev
 
 description: Library for 32- and 64-bit signed fixed-width integers.
 author: Dart Team <misc@dartlang.org>
diff --git a/test/all_tests.dart b/test/all_tests.dart
index a93d00b..eb530b7 100644
--- a/test/all_tests.dart
+++ b/test/all_tests.dart
@@ -1,7 +1,7 @@
 import 'int32_test.dart' as int32_test;
 import 'int64_test.dart' as int64_test;
 
-main() {
+void main() {
   int32_test.main();
   int64_test.main();
 }
diff --git a/test/int32_test.dart b/test/int32_test.dart
index b9ba31a..db96123 100644
--- a/test/int32_test.dart
+++ b/test/int32_test.dart
@@ -6,40 +6,40 @@
 import 'package:test/test.dart';
 
 void main() {
-  group("isX tests", () {
-    test("isEven", () {
+  group('isX tests', () {
+    test('isEven', () {
       expect((-Int32.ONE).isEven, false);
       expect(Int32.ZERO.isEven, true);
       expect(Int32.ONE.isEven, false);
       expect(Int32.TWO.isEven, true);
     });
-    test("isMaxValue", () {
+    test('isMaxValue', () {
       expect(Int32.MIN_VALUE.isMaxValue, false);
       expect(Int32.ZERO.isMaxValue, false);
       expect(Int32.MAX_VALUE.isMaxValue, true);
     });
-    test("isMinValue", () {
+    test('isMinValue', () {
       expect(Int32.MIN_VALUE.isMinValue, true);
       expect(Int32.ZERO.isMinValue, false);
       expect(Int32.MAX_VALUE.isMinValue, false);
     });
-    test("isNegative", () {
+    test('isNegative', () {
       expect(Int32.MIN_VALUE.isNegative, true);
       expect(Int32.ZERO.isNegative, false);
       expect(Int32.ONE.isNegative, false);
     });
-    test("isOdd", () {
+    test('isOdd', () {
       expect((-Int32.ONE).isOdd, true);
       expect(Int32.ZERO.isOdd, false);
       expect(Int32.ONE.isOdd, true);
       expect(Int32.TWO.isOdd, false);
     });
-    test("isZero", () {
+    test('isZero', () {
       expect(Int32.MIN_VALUE.isZero, false);
       expect(Int32.ZERO.isZero, true);
       expect(Int32.MAX_VALUE.isZero, false);
     });
-    test("bitLength", () {
+    test('bitLength', () {
       expect(Int32(-2).bitLength, 1);
       expect((-Int32.ONE).bitLength, 0);
       expect(Int32.ZERO.bitLength, 0);
@@ -50,13 +50,13 @@
     });
   });
 
-  group("arithmetic operators", () {
-    Int32 n1 = Int32(1234);
-    Int32 n2 = Int32(9876);
-    Int32 n3 = Int32(-1234);
-    Int32 n4 = Int32(-9876);
+  group('arithmetic operators', () {
+    var n1 = Int32(1234);
+    var n2 = Int32(9876);
+    var n3 = Int32(-1234);
+    var n4 = Int32(-9876);
 
-    test("+", () {
+    test('+', () {
       expect(n1 + n2, Int32(11110));
       expect(n3 + n2, Int32(8642));
       expect(n3 + n4, Int32(-11110));
@@ -65,7 +65,7 @@
       expect(() => Int32(17) + null, throwsArgumentError);
     });
 
-    test("-", () {
+    test('-', () {
       expect(n1 - n2, Int32(-8642));
       expect(n3 - n2, Int32(-11110));
       expect(n3 - n4, Int32(8642));
@@ -74,12 +74,12 @@
       expect(() => Int32(17) - null, throwsArgumentError);
     });
 
-    test("unary -", () {
+    test('unary -', () {
       expect(-n1, Int32(-1234));
       expect(-Int32.ZERO, Int32.ZERO);
     });
 
-    test("*", () {
+    test('*', () {
       expect(n1 * n2, Int32(12186984));
       expect(n2 * n3, Int32(-12186984));
       expect(n3 * n3, Int32(1522756));
@@ -92,7 +92,7 @@
       expect(() => Int32(17) * null, throwsArgumentError);
     });
 
-    test("~/", () {
+    test('~/', () {
       expect(Int32(829893893) ~/ Int32(1919), Int32(432461));
       expect(Int32(0x12345678) ~/ Int32(0x22), Int32(0x12345678 ~/ 0x22));
       expect(Int32(829893893) ~/ Int64(1919), Int32(432461));
@@ -107,13 +107,13 @@
       expect(() => Int32(17) ~/ null, throwsArgumentError);
     });
 
-    test("%", () {
+    test('%', () {
       expect(Int32(0x12345678) % Int32(0x22), Int32(0x12345678 % 0x22));
       expect(Int32(0x12345678) % Int64(0x22), Int32(0x12345678 % 0x22));
       expect(() => Int32(17) % null, throwsArgumentError);
     });
 
-    test("remainder", () {
+    test('remainder', () {
       expect(Int32(0x12345678).remainder(Int32(0x22)),
           Int32(0x12345678.remainder(0x22) as int));
       expect(Int32(0x12345678).remainder(Int32(-0x22)),
@@ -127,7 +127,7 @@
       expect(() => Int32(17).remainder(null), throwsArgumentError);
     });
 
-    test("abs", () {
+    test('abs', () {
       // NOTE: Int32.MIN_VALUE.abs() is undefined
       expect((Int32.MIN_VALUE + 1).abs(), Int32.MAX_VALUE);
       expect(Int32(-1).abs(), Int32(1));
@@ -136,8 +136,8 @@
       expect(Int32.MAX_VALUE.abs(), Int32.MAX_VALUE);
     });
 
-    test("clamp", () {
-      Int32 val = Int32(17);
+    test('clamp', () {
+      var val = Int32(17);
       expect(val.clamp(20, 30), Int32(20));
       expect(val.clamp(10, 20), Int32(17));
       expect(val.clamp(10, 15), Int32(15));
@@ -160,14 +160,14 @@
     });
   });
 
-  group("leading/trailing zeros", () {
-    test("numberOfLeadingZeros", () {
+  group('leading/trailing zeros', () {
+    test('numberOfLeadingZeros', () {
       expect(Int32(0).numberOfLeadingZeros(), 32);
       expect(Int32(1).numberOfLeadingZeros(), 31);
       expect(Int32(0xffff).numberOfLeadingZeros(), 16);
       expect(Int32(-1).numberOfLeadingZeros(), 0);
     });
-    test("numberOfTrailingZeros", () {
+    test('numberOfTrailingZeros', () {
       expect(Int32(0).numberOfTrailingZeros(), 32);
       expect(Int32(0x80000000).numberOfTrailingZeros(), 31);
       expect(Int32(1).numberOfTrailingZeros(), 0);
@@ -175,8 +175,8 @@
     });
   });
 
-  group("comparison operators", () {
-    test("compareTo", () {
+  group('comparison operators', () {
+    test('compareTo', () {
       expect(Int32(0).compareTo(-1), 1);
       expect(Int32(0).compareTo(0), 0);
       expect(Int32(0).compareTo(1), -1);
@@ -188,7 +188,7 @@
       expect(Int32(0).compareTo(Int64(1)), -1);
     });
 
-    test("<", () {
+    test('<', () {
       expect(Int32(17) < Int32(18), true);
       expect(Int32(17) < Int32(17), false);
       expect(Int32(17) < Int32(16), false);
@@ -200,7 +200,7 @@
       expect(() => Int32(17) < null, throwsArgumentError);
     });
 
-    test("<=", () {
+    test('<=', () {
       expect(Int32(17) <= Int32(18), true);
       expect(Int32(17) <= Int32(17), true);
       expect(Int32(17) <= Int32(16), false);
@@ -212,7 +212,7 @@
       expect(() => Int32(17) <= null, throwsArgumentError);
     });
 
-    test("==", () {
+    test('==', () {
       expect(Int32(17), isNot(equals(Int32(18))));
       expect(Int32(17), equals(Int32(17)));
       expect(Int32(17), isNot(equals(Int32(16))));
@@ -227,7 +227,7 @@
       expect(Int32(17), isNot(equals(null)));
     });
 
-    test(">=", () {
+    test('>=', () {
       expect(Int32(17) >= Int32(18), false);
       expect(Int32(17) >= Int32(17), true);
       expect(Int32(17) >= Int32(16), true);
@@ -239,7 +239,7 @@
       expect(() => Int32(17) >= null, throwsArgumentError);
     });
 
-    test(">", () {
+    test('>', () {
       expect(Int32(17) > Int32(18), false);
       expect(Int32(17) > Int32(17), false);
       expect(Int32(17) > Int32(16), true);
@@ -252,8 +252,8 @@
     });
   });
 
-  group("bitwise operators", () {
-    test("&", () {
+  group('bitwise operators', () {
+    test('&', () {
       expect(Int32(0x12345678) & Int32(0x22222222),
           Int32(0x12345678 & 0x22222222));
       expect(Int32(0x12345678) & Int64(0x22222222),
@@ -261,7 +261,7 @@
       expect(() => Int32(17) & null, throwsArgumentError);
     });
 
-    test("|", () {
+    test('|', () {
       expect(Int32(0x12345678) | Int32(0x22222222),
           Int32(0x12345678 | 0x22222222));
       expect(Int32(0x12345678) | Int64(0x22222222),
@@ -269,7 +269,7 @@
       expect(() => Int32(17) | null, throwsArgumentError);
     });
 
-    test("^", () {
+    test('^', () {
       expect(Int32(0x12345678) ^ Int32(0x22222222),
           Int32(0x12345678 ^ 0x22222222));
       expect(Int32(0x12345678) ^ Int64(0x22222222),
@@ -277,14 +277,14 @@
       expect(() => Int32(17) ^ null, throwsArgumentError);
     });
 
-    test("~", () {
+    test('~', () {
       expect(~(Int32(0x12345678)), Int32(~0x12345678));
       expect(-(Int32(0x12345678)), Int64(-0x12345678));
     });
   });
 
-  group("bitshift operators", () {
-    test("<<", () {
+  group('bitshift operators', () {
+    test('<<', () {
       expect(Int32(0x12345678) << 7, Int32(0x12345678 << 7));
       expect(Int32(0x12345678) << 32, Int32.ZERO);
       expect(Int32(0x12345678) << 33, Int32.ZERO);
@@ -292,7 +292,7 @@
       expect(() => Int32(17) << null, throwsNoSuchMethodError);
     });
 
-    test(">>", () {
+    test('>>', () {
       expect(Int32(0x12345678) >> 7, Int32(0x12345678 >> 7));
       expect(Int32(0x12345678) >> 32, Int32.ZERO);
       expect(Int32(0x12345678) >> 33, Int32.ZERO);
@@ -302,7 +302,7 @@
       expect(() => Int32(17) >> null, throwsNoSuchMethodError);
     });
 
-    test("shiftRightUnsigned", () {
+    test('shiftRightUnsigned', () {
       expect(Int32(0x12345678).shiftRightUnsigned(7), Int32(0x12345678 >> 7));
       expect(Int32(0x12345678).shiftRightUnsigned(32), Int32.ZERO);
       expect(Int32(0x12345678).shiftRightUnsigned(33), Int32.ZERO);
@@ -314,8 +314,8 @@
     });
   });
 
-  group("conversions", () {
-    test("toSigned", () {
+  group('conversions', () {
+    test('toSigned', () {
       expect(Int32.ONE.toSigned(2), Int32.ONE);
       expect(Int32.ONE.toSigned(1), -Int32.ONE);
       expect(Int32.MAX_VALUE.toSigned(32), Int32.MAX_VALUE);
@@ -325,7 +325,7 @@
       expect(() => Int32.ONE.toSigned(0), throwsRangeError);
       expect(() => Int32.ONE.toSigned(33), throwsRangeError);
     });
-    test("toUnsigned", () {
+    test('toUnsigned', () {
       expect(Int32.ONE.toUnsigned(1), Int32.ONE);
       expect(Int32.ONE.toUnsigned(0), Int32.ZERO);
       expect(Int32.MAX_VALUE.toUnsigned(32), Int32.MAX_VALUE);
@@ -335,23 +335,23 @@
       expect(() => Int32.ONE.toUnsigned(-1), throwsRangeError);
       expect(() => Int32.ONE.toUnsigned(33), throwsRangeError);
     });
-    test("toDouble", () {
+    test('toDouble', () {
       expect(Int32(17).toDouble(), same(17.0));
       expect(Int32(-17).toDouble(), same(-17.0));
     });
-    test("toInt", () {
+    test('toInt', () {
       expect(Int32(17).toInt(), 17);
       expect(Int32(-17).toInt(), -17);
     });
-    test("toInt32", () {
+    test('toInt32', () {
       expect(Int32(17).toInt32(), Int32(17));
       expect(Int32(-17).toInt32(), Int32(-17));
     });
-    test("toInt64", () {
+    test('toInt64', () {
       expect(Int32(17).toInt64(), Int64(17));
       expect(Int32(-17).toInt64(), Int64(-17));
     });
-    test("toBytes", () {
+    test('toBytes', () {
       expect(Int32(0).toBytes(), [0, 0, 0, 0]);
       expect(Int32(0x01020304).toBytes(), [4, 3, 2, 1]);
       expect(Int32(0x04030201).toBytes(), [1, 2, 3, 4]);
@@ -359,9 +359,9 @@
     });
   });
 
-  group("parse", () {
-    test("base 10", () {
-      checkInt(int x) {
+  group('parse', () {
+    test('base 10', () {
+      void checkInt(int x) {
         expect(Int32.parseRadix('$x', 10), Int32(x));
       }
 
@@ -377,8 +377,8 @@
       expect(() => Int32.parseRadix('plugh', 10), throwsFormatException);
     });
 
-    test("parseRadix", () {
-      check(String s, int r, String x) {
+    test('parseRadix', () {
+      void check(String s, int r, String x) {
         expect(Int32.parseRadix(s, r).toString(), x);
       }
 
@@ -386,50 +386,50 @@
       check('95', 12, '113');
     });
 
-    test("parseInt", () {
+    test('parseInt', () {
       expect(Int32.parseInt('0'), Int32(0));
       expect(Int32.parseInt('1000'), Int32(1000));
       expect(Int32.parseInt('4294967296'), Int32(4294967296));
     });
 
-    test("parseHex", () {
+    test('parseHex', () {
       expect(Int32.parseHex('deadbeef'), Int32(0xdeadbeef));
       expect(Int32.parseHex('cafebabe'), Int32(0xcafebabe));
       expect(Int32.parseHex('8badf00d'), Int32(0x8badf00d));
     });
   });
 
-  group("string representation", () {
-    test("toString", () {
-      expect(Int32(0).toString(), "0");
-      expect(Int32(1).toString(), "1");
-      expect(Int32(-1).toString(), "-1");
-      expect(Int32(1000).toString(), "1000");
-      expect(Int32(-1000).toString(), "-1000");
-      expect(Int32(123456789).toString(), "123456789");
-      expect(Int32(2147483647).toString(), "2147483647");
-      expect(Int32(2147483648).toString(), "-2147483648");
-      expect(Int32(2147483649).toString(), "-2147483647");
-      expect(Int32(2147483650).toString(), "-2147483646");
-      expect(Int32(-2147483648).toString(), "-2147483648");
-      expect(Int32(-2147483649).toString(), "2147483647");
-      expect(Int32(-2147483650).toString(), "2147483646");
+  group('string representation', () {
+    test('toString', () {
+      expect(Int32(0).toString(), '0');
+      expect(Int32(1).toString(), '1');
+      expect(Int32(-1).toString(), '-1');
+      expect(Int32(1000).toString(), '1000');
+      expect(Int32(-1000).toString(), '-1000');
+      expect(Int32(123456789).toString(), '123456789');
+      expect(Int32(2147483647).toString(), '2147483647');
+      expect(Int32(2147483648).toString(), '-2147483648');
+      expect(Int32(2147483649).toString(), '-2147483647');
+      expect(Int32(2147483650).toString(), '-2147483646');
+      expect(Int32(-2147483648).toString(), '-2147483648');
+      expect(Int32(-2147483649).toString(), '2147483647');
+      expect(Int32(-2147483650).toString(), '2147483646');
     });
   });
 
-  group("toHexString", () {
-    test("returns hexadecimal string representation", () {
-      expect(Int32(-1).toHexString(), "-1");
-      expect((Int32(-1) >> 8).toHexString(), "-1");
-      expect((Int32(-1) << 8).toHexString(), "-100");
-      expect(Int32(123456789).toHexString(), "75bcd15");
-      expect(Int32(-1).shiftRightUnsigned(8).toHexString(), "ffffff");
+  group('toHexString', () {
+    test('returns hexadecimal string representation', () {
+      expect(Int32(-1).toHexString(), '-1');
+      expect((Int32(-1) >> 8).toHexString(), '-1');
+      expect((Int32(-1) << 8).toHexString(), '-100');
+      expect(Int32(123456789).toHexString(), '75bcd15');
+      expect(Int32(-1).shiftRightUnsigned(8).toHexString(), 'ffffff');
     });
   });
 
-  group("toRadixString", () {
-    test("returns base n string representation", () {
-      expect(Int32(123456789).toRadixString(5), "223101104124");
+  group('toRadixString', () {
+    test('returns base n string representation', () {
+      expect(Int32(123456789).toRadixString(5), '223101104124');
     });
   });
 }
diff --git a/test/int64_test.dart b/test/int64_test.dart
index 1acc3a4..7994a8d 100644
--- a/test/int64_test.dart
+++ b/test/int64_test.dart
@@ -2,15 +2,20 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// We permit local variable types in this test because they statically 'assert'
+// that the operations have an expected type.
+//
+// ignore_for_file: omit_local_variable_types
+
 library int64test;
 
 import 'package:fixnum/fixnum.dart';
 import 'package:test/test.dart';
 
 void main() {
-  group("fromBytes", () {
-    test("fromBytes", () {
-      checkBytes(List<int> bytes, int h, int l) {
+  group('fromBytes', () {
+    test('fromBytes', () {
+      void checkBytes(List<int> bytes, int h, int l) {
         expect(Int64.fromBytes(bytes), Int64.fromInts(h, l));
       }
 
@@ -22,8 +27,8 @@
       checkBytes([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], 0xffffffff,
           0xffffffff);
     });
-    test("fromBytesBigEndian", () {
-      checkBytes(List<int> bytes, int h, int l) {
+    test('fromBytesBigEndian', () {
+      void checkBytes(List<int> bytes, int h, int l) {
         expect(Int64.fromBytesBigEndian(bytes), Int64.fromInts(h, l));
       }
 
@@ -37,48 +42,48 @@
     });
   });
 
-  argumentErrorTest(name, op, [receiver = Int64.ONE]) {
-    throwsArgumentErrorMentioning(String substring) =>
+  void argumentErrorTest(name, op, [receiver = Int64.ONE]) {
+    Matcher throwsArgumentErrorMentioning(String substring) =>
         throwsA((e) => e is ArgumentError && '$e'.contains(substring));
 
     expect(() => op(receiver, null), throwsArgumentErrorMentioning('null'));
     expect(() => op(receiver, 'foo'), throwsArgumentErrorMentioning(r'"foo"'));
   }
 
-  group("is-tests", () {
-    test("isEven", () {
+  group('is-tests', () {
+    test('isEven', () {
       expect((-Int64.ONE).isEven, false);
       expect(Int64.ZERO.isEven, true);
       expect(Int64.ONE.isEven, false);
       expect(Int64.TWO.isEven, true);
     });
-    test("isMaxValue", () {
+    test('isMaxValue', () {
       expect(Int64.MIN_VALUE.isMaxValue, false);
       expect(Int64.ZERO.isMaxValue, false);
       expect(Int64.MAX_VALUE.isMaxValue, true);
     });
-    test("isMinValue", () {
+    test('isMinValue', () {
       expect(Int64.MIN_VALUE.isMinValue, true);
       expect(Int64.ZERO.isMinValue, false);
       expect(Int64.MAX_VALUE.isMinValue, false);
     });
-    test("isNegative", () {
+    test('isNegative', () {
       expect(Int64.MIN_VALUE.isNegative, true);
       expect(Int64.ZERO.isNegative, false);
       expect(Int64.ONE.isNegative, false);
     });
-    test("isOdd", () {
+    test('isOdd', () {
       expect((-Int64.ONE).isOdd, true);
       expect(Int64.ZERO.isOdd, false);
       expect(Int64.ONE.isOdd, true);
       expect(Int64.TWO.isOdd, false);
     });
-    test("isZero", () {
+    test('isZero', () {
       expect(Int64.MIN_VALUE.isZero, false);
       expect(Int64.ZERO.isZero, true);
       expect(Int64.MAX_VALUE.isZero, false);
     });
-    test("bitLength", () {
+    test('bitLength', () {
       expect(Int64(-2).bitLength, 1);
       expect((-Int64.ONE).bitLength, 0);
       expect(Int64.ZERO.bitLength, 0);
@@ -92,7 +97,7 @@
     });
   });
 
-  group("arithmetic operators", () {
+  group('arithmetic operators', () {
     Int64 n1 = Int64(1234);
     Int64 n2 = Int64(9876);
     Int64 n3 = Int64(-1234);
@@ -100,30 +105,30 @@
     Int64 n5 = Int64.fromInts(0x12345678, 0xabcdabcd);
     Int64 n6 = Int64.fromInts(0x77773333, 0x22224444);
 
-    test("+", () {
+    test('+', () {
       expect(n1 + n2, Int64(11110));
       expect(n3 + n2, Int64(8642));
       expect(n3 + n4, Int64(-11110));
       expect(n5 + n6, Int64.fromInts(0x89ab89ab, 0xcdeff011));
       expect(Int64.MAX_VALUE + 1, Int64.MIN_VALUE);
-      argumentErrorTest("+", (a, b) => a + b);
+      argumentErrorTest('+', (a, b) => a + b);
     });
 
-    test("-", () {
+    test('-', () {
       expect(n1 - n2, Int64(-8642));
       expect(n3 - n2, Int64(-11110));
       expect(n3 - n4, Int64(8642));
       expect(n5 - n6, Int64.fromInts(0x9abd2345, 0x89ab6789));
       expect(Int64.MIN_VALUE - 1, Int64.MAX_VALUE);
-      argumentErrorTest("-", (a, b) => a - b);
+      argumentErrorTest('-', (a, b) => a - b);
     });
 
-    test("unary -", () {
+    test('unary -', () {
       expect(-n1, Int64(-1234));
       expect(-Int64.ZERO, Int64.ZERO);
     });
 
-    test("*", () {
+    test('*', () {
       expect(Int64(1111) * Int64(3), Int64(3333));
       expect(Int64(1111) * Int64(-3), Int64(-3333));
       expect(Int64(-1111) * Int64(3), Int64(-3333));
@@ -156,10 +161,10 @@
       expect(Int64.MIN_VALUE * Int64(2), Int64.ZERO);
       expect(Int64.MIN_VALUE * Int64(1), Int64.MIN_VALUE);
       expect(Int64.MIN_VALUE * Int64(-1), Int64.MIN_VALUE);
-      argumentErrorTest("*", (a, b) => a * b);
+      argumentErrorTest('*', (a, b) => a * b);
     });
 
-    test("~/", () {
+    test('~/', () {
       Int64 deadBeef = Int64.fromInts(0xDEADBEEF, 0xDEADBEEF);
       Int64 ten = Int64(10);
 
@@ -233,10 +238,10 @@
       expect(Int64.MIN_VALUE ~/ Int64(-1), Int64.MIN_VALUE);
       expect(() => Int64(17) ~/ Int64.ZERO,
           throwsA(const TypeMatcher<IntegerDivisionByZeroException>()));
-      argumentErrorTest("~/", (a, b) => a ~/ b);
+      argumentErrorTest('~/', (a, b) => a ~/ b);
     });
 
-    test("%", () {
+    test('%', () {
       // Define % as Euclidean mod, with positive result for all arguments
       expect(Int64.ZERO % Int64(1000), Int64.ZERO);
       expect(Int64.MIN_VALUE % Int64.MIN_VALUE, Int64.ZERO);
@@ -273,10 +278,10 @@
           Int64(-0x12345678.remainder(0x22) as int));
       expect(Int32(0x12345678).remainder(Int64(0x22)),
           Int64(0x12345678.remainder(0x22) as int));
-      argumentErrorTest("%", (a, b) => a % b);
+      argumentErrorTest('%', (a, b) => a % b);
     });
 
-    test("clamp", () {
+    test('clamp', () {
       Int64 val = Int64(17);
       expect(val.clamp(20, 30), Int64(20));
       expect(val.clamp(10, 20), Int64(17));
@@ -297,9 +302,9 @@
     });
   });
 
-  group("leading/trailing zeros", () {
-    test("numberOfLeadingZeros", () {
-      checkZeros(Int64 value, int zeros) {
+  group('leading/trailing zeros', () {
+    test('numberOfLeadingZeros', () {
+      void checkZeros(Int64 value, int zeros) {
         expect(value.numberOfLeadingZeros(), zeros);
       }
 
@@ -313,8 +318,8 @@
       checkZeros(Int64(-1), 0);
     });
 
-    test("numberOfTrailingZeros", () {
-      checkZeros(Int64 value, int zeros) {
+    test('numberOfTrailingZeros', () {
+      void checkZeros(Int64 value, int zeros) {
         expect(value.numberOfTrailingZeros(), zeros);
       }
 
@@ -330,12 +335,12 @@
     });
   });
 
-  group("comparison operators", () {
+  group('comparison operators', () {
     Int64 largeNeg = Int64.fromInts(0x82341234, 0x0);
     Int64 largePos = Int64.fromInts(0x12341234, 0x0);
     Int64 largePosPlusOne = largePos + Int64(1);
 
-    test("<", () {
+    test('<', () {
       expect(Int64(10) < Int64(11), true);
       expect(Int64(10) < Int64(10), false);
       expect(Int64(10) < Int64(9), false);
@@ -350,10 +355,10 @@
       expect(largePosPlusOne < largePos, false);
       expect(Int64.MIN_VALUE < Int64.MAX_VALUE, true);
       expect(Int64.MAX_VALUE < Int64.MIN_VALUE, false);
-      argumentErrorTest("<", (a, b) => a < b);
+      argumentErrorTest('<', (a, b) => a < b);
     });
 
-    test("<=", () {
+    test('<=', () {
       expect(Int64(10) <= Int64(11), true);
       expect(Int64(10) <= Int64(10), true);
       expect(Int64(10) <= Int64(9), false);
@@ -369,10 +374,10 @@
       expect(largePosPlusOne <= largePos, false);
       expect(Int64.MIN_VALUE <= Int64.MAX_VALUE, true);
       expect(Int64.MAX_VALUE <= Int64.MIN_VALUE, false);
-      argumentErrorTest("<=", (a, b) => a <= b);
+      argumentErrorTest('<=', (a, b) => a <= b);
     });
 
-    test("==", () {
+    test('==', () {
       expect(Int64(0), equals(Int64(0)));
       expect(Int64(0), isNot(equals(Int64(1))));
       expect(Int64(0), equals(Int32(0)));
@@ -400,7 +405,7 @@
       expect(Int64(17), isNot(equals(null)));
     });
 
-    test(">=", () {
+    test('>=', () {
       expect(Int64(10) >= Int64(11), false);
       expect(Int64(10) >= Int64(10), true);
       expect(Int64(10) >= Int64(9), true);
@@ -416,10 +421,10 @@
       expect(largePosPlusOne >= largePos, true);
       expect(Int64.MIN_VALUE >= Int64.MAX_VALUE, false);
       expect(Int64.MAX_VALUE >= Int64.MIN_VALUE, true);
-      argumentErrorTest(">=", (a, b) => a >= b);
+      argumentErrorTest('>=', (a, b) => a >= b);
     });
 
-    test(">", () {
+    test('>', () {
       expect(Int64(10) > Int64(11), false);
       expect(Int64(10) > Int64(10), false);
       expect(Int64(10) > Int64(9), true);
@@ -437,42 +442,42 @@
       expect(Int64.ZERO > Int64.MIN_VALUE, true);
       expect(Int64.MIN_VALUE > Int64.MAX_VALUE, false);
       expect(Int64.MAX_VALUE > Int64.MIN_VALUE, true);
-      argumentErrorTest(">", (a, b) => a > b);
+      argumentErrorTest('>', (a, b) => a > b);
     });
   });
 
-  group("bitwise operators", () {
+  group('bitwise operators', () {
     Int64 n1 = Int64(1234);
     Int64 n2 = Int64(9876);
     Int64 n3 = Int64(-1234);
     Int64 n4 = Int64(0x1234) << 32;
     Int64 n5 = Int64(0x9876) << 32;
 
-    test("&", () {
+    test('&', () {
       expect(n1 & n2, Int64(1168));
       expect(n3 & n2, Int64(8708));
       expect(n4 & n5, Int64(0x1034) << 32);
       expect(() => n1 & null, throwsArgumentError);
-      argumentErrorTest("&", (a, b) => a & b);
+      argumentErrorTest('&', (a, b) => a & b);
     });
 
-    test("|", () {
+    test('|', () {
       expect(n1 | n2, Int64(9942));
       expect(n3 | n2, Int64(-66));
       expect(n4 | n5, Int64(0x9a76) << 32);
       expect(() => n1 | null, throwsArgumentError);
-      argumentErrorTest("|", (a, b) => a | b);
+      argumentErrorTest('|', (a, b) => a | b);
     });
 
-    test("^", () {
+    test('^', () {
       expect(n1 ^ n2, Int64(8774));
       expect(n3 ^ n2, Int64(-8774));
       expect(n4 ^ n5, Int64(0x8a42) << 32);
       expect(() => n1 ^ null, throwsArgumentError);
-      argumentErrorTest("^", (a, b) => a ^ b);
+      argumentErrorTest('^', (a, b) => a ^ b);
     });
 
-    test("~", () {
+    test('~', () {
       expect(-Int64(1), Int64(-1));
       expect(-Int64(-1), Int64(1));
       expect(-Int64.MIN_VALUE, Int64.MIN_VALUE);
@@ -485,8 +490,8 @@
     });
   });
 
-  group("bitshift operators", () {
-    test("<<", () {
+  group('bitshift operators', () {
+    test('<<', () {
       expect(Int64.fromInts(0x12341234, 0x45674567) << 10,
           Int64.fromInts(0xd048d115, 0x9d159c00));
       expect(Int64.fromInts(0x92341234, 0x45674567) << 10,
@@ -499,8 +504,8 @@
       expect(() => Int64(17) << null, throwsNoSuchMethodError);
     });
 
-    test(">>", () {
-      expect((Int64.MIN_VALUE >> 13).toString(), "-1125899906842624");
+    test('>>', () {
+      expect((Int64.MIN_VALUE >> 13).toString(), '-1125899906842624');
       expect(Int64.fromInts(0x12341234, 0x45674567) >> 10,
           Int64.fromInts(0x48d04, 0x8d1159d1));
       expect(Int64.fromInts(0x92341234, 0x45674567) >> 10,
@@ -551,7 +556,7 @@
       expect(() => Int64(17) >> null, throwsNoSuchMethodError);
     });
 
-    test("shiftRightUnsigned", () {
+    test('shiftRightUnsigned', () {
       expect(Int64.fromInts(0x12341234, 0x45674567).shiftRightUnsigned(10),
           Int64.fromInts(0x48d04, 0x8d1159d1));
       expect(Int64.fromInts(0x92341234, 0x45674567).shiftRightUnsigned(10),
@@ -598,7 +603,7 @@
       expect(() => Int64(17).shiftRightUnsigned(null), throwsNoSuchMethodError);
     });
 
-    test("overflow", () {
+    test('overflow', () {
       expect((Int64(1) << 63) >> 1, -Int64.fromInts(0x40000000, 0x00000000));
       expect((Int64(-1) << 32) << 32, Int64(0));
       expect(Int64.MIN_VALUE << 0, Int64.MIN_VALUE);
@@ -610,8 +615,8 @@
     });
   });
 
-  group("conversions", () {
-    test("toSigned", () {
+  group('conversions', () {
+    test('toSigned', () {
       expect((Int64.ONE << 44).toSigned(46), Int64.ONE << 44);
       expect((Int64.ONE << 44).toSigned(45), -(Int64.ONE << 44));
       expect((Int64.ONE << 22).toSigned(24), Int64.ONE << 22);
@@ -625,7 +630,7 @@
       expect(() => Int64.ONE.toSigned(0), throwsRangeError);
       expect(() => Int64.ONE.toSigned(65), throwsRangeError);
     });
-    test("toUnsigned", () {
+    test('toUnsigned', () {
       expect((Int64.ONE << 44).toUnsigned(45), Int64.ONE << 44);
       expect((Int64.ONE << 44).toUnsigned(44), Int64.ZERO);
       expect((Int64.ONE << 22).toUnsigned(23), Int64.ONE << 22);
@@ -639,7 +644,7 @@
       expect(() => Int64.ONE.toUnsigned(-1), throwsRangeError);
       expect(() => Int64.ONE.toUnsigned(65), throwsRangeError);
     });
-    test("toDouble", () {
+    test('toDouble', () {
       expect(Int64(0).toDouble(), same(0.0));
       expect(Int64(100).toDouble(), same(100.0));
       expect(Int64(-100).toDouble(), same(-100.0));
@@ -651,27 +656,27 @@
       expect(Int64(4503599627370496).toDouble(), same(4503599627370496.0));
       expect(Int64(-4503599627370495).toDouble(), same(-4503599627370495.0));
       expect(Int64(-4503599627370496).toDouble(), same(-4503599627370496.0));
-      expect(Int64.parseInt("-10000000000000000").toDouble().toStringAsFixed(1),
-          "-10000000000000000.0");
-      expect(Int64.parseInt("-10000000000000001").toDouble().toStringAsFixed(1),
-          "-10000000000000000.0");
-      expect(Int64.parseInt("-10000000000000002").toDouble().toStringAsFixed(1),
-          "-10000000000000002.0");
-      expect(Int64.parseInt("-10000000000000003").toDouble().toStringAsFixed(1),
-          "-10000000000000004.0");
-      expect(Int64.parseInt("-10000000000000004").toDouble().toStringAsFixed(1),
-          "-10000000000000004.0");
-      expect(Int64.parseInt("-10000000000000005").toDouble().toStringAsFixed(1),
-          "-10000000000000004.0");
-      expect(Int64.parseInt("-10000000000000006").toDouble().toStringAsFixed(1),
-          "-10000000000000006.0");
-      expect(Int64.parseInt("-10000000000000007").toDouble().toStringAsFixed(1),
-          "-10000000000000008.0");
-      expect(Int64.parseInt("-10000000000000008").toDouble().toStringAsFixed(1),
-          "-10000000000000008.0");
+      expect(Int64.parseInt('-10000000000000000').toDouble().toStringAsFixed(1),
+          '-10000000000000000.0');
+      expect(Int64.parseInt('-10000000000000001').toDouble().toStringAsFixed(1),
+          '-10000000000000000.0');
+      expect(Int64.parseInt('-10000000000000002').toDouble().toStringAsFixed(1),
+          '-10000000000000002.0');
+      expect(Int64.parseInt('-10000000000000003').toDouble().toStringAsFixed(1),
+          '-10000000000000004.0');
+      expect(Int64.parseInt('-10000000000000004').toDouble().toStringAsFixed(1),
+          '-10000000000000004.0');
+      expect(Int64.parseInt('-10000000000000005').toDouble().toStringAsFixed(1),
+          '-10000000000000004.0');
+      expect(Int64.parseInt('-10000000000000006').toDouble().toStringAsFixed(1),
+          '-10000000000000006.0');
+      expect(Int64.parseInt('-10000000000000007').toDouble().toStringAsFixed(1),
+          '-10000000000000008.0');
+      expect(Int64.parseInt('-10000000000000008').toDouble().toStringAsFixed(1),
+          '-10000000000000008.0');
     });
 
-    test("toInt", () {
+    test('toInt', () {
       expect(Int64(0).toInt(), 0);
       expect(Int64(100).toInt(), 100);
       expect(Int64(-100).toInt(), -100);
@@ -685,7 +690,7 @@
       expect(Int64(-4503599627370496).toInt(), -4503599627370496);
     });
 
-    test("toInt32", () {
+    test('toInt32', () {
       expect(Int64(0).toInt32(), Int32(0));
       expect(Int64(1).toInt32(), Int32(1));
       expect(Int64(-1).toInt32(), Int32(-1));
@@ -699,7 +704,7 @@
       expect(Int64(-2147483651).toInt32(), Int32(2147483645));
     });
 
-    test("toBytes", () {
+    test('toBytes', () {
       expect(Int64(0).toBytes(), [0, 0, 0, 0, 0, 0, 0, 0]);
       expect(Int64.fromInts(0x08070605, 0x04030201).toBytes(),
           [1, 2, 3, 4, 5, 6, 7, 8]);
@@ -710,7 +715,7 @@
     });
   });
 
-  test("JavaScript 53-bit integer boundary", () {
+  test('JavaScript 53-bit integer boundary', () {
     Int64 _factorial(Int64 n) {
       if (n.isZero) {
         return Int64(1);
@@ -724,13 +729,13 @@
     expect(fact18 ~/ fact17, Int64(18));
   });
 
-  test("min, max values", () {
+  test('min, max values', () {
     expect(Int64(1) << 63, Int64.MIN_VALUE);
     expect(-(Int64.MIN_VALUE + Int64(1)), Int64.MAX_VALUE);
   });
 
-  test("negation", () {
-    check(int n) {
+  test('negation', () {
+    void check(int n) {
       // Sign change should commute with conversion.
       expect(-Int64(-n), Int64(n));
       expect(Int64(-n), -Int64(n));
@@ -741,9 +746,9 @@
     check(9223372000000000000); // near Int64.MAX_VALUE, has exact double value
   });
 
-  group("parse", () {
-    test("parseRadix10", () {
-      checkInt(int x) {
+  group('parse', () {
+    test('parseRadix10', () {
+      void checkInt(int x) {
         expect(Int64.parseRadix('$x', 10), Int64(x));
       }
 
@@ -767,8 +772,8 @@
       expect(() => Int64.parseRadix('-', 10), throwsFormatException);
     });
 
-    test("parseHex", () {
-      checkHex(String hexStr, int h, int l) {
+    test('parseHex', () {
+      void checkHex(String hexStr, int h, int l) {
         expect(Int64.parseHex(hexStr), Int64.fromInts(h, l));
       }
 
@@ -789,18 +794,18 @@
       expect(() => Int64.parseHex('-'), throwsFormatException);
     });
 
-    test("parseRadix", () {
-      check(String s, int r, String x) {
+    test('parseRadix', () {
+      void check(String s, int r, String x) {
         expect(Int64.parseRadix(s, r).toString(), x);
       }
 
       check('ghoul', 36, '27699213');
       check('ghoul', 35, '24769346');
       // Min and max value.
-      check("-9223372036854775808", 10, "-9223372036854775808");
-      check("9223372036854775807", 10, "9223372036854775807");
+      check('-9223372036854775808', 10, '-9223372036854775808');
+      check('9223372036854775807', 10, '9223372036854775807');
       // Overflow during parsing.
-      check("9223372036854775808", 10, "-9223372036854775808");
+      check('9223372036854775808', 10, '-9223372036854775808');
 
       expect(() => Int64.parseRadix('0', 1), throwsRangeError);
       expect(() => Int64.parseRadix('0', 37), throwsRangeError);
@@ -808,85 +813,85 @@
       expect(() => Int64.parseRadix('xyzzy', 10), throwsFormatException);
     });
 
-    test("parseRadixN", () {
-      check(String s, int r) {
+    test('parseRadixN', () {
+      void check(String s, int r) {
         expect(Int64.parseRadix(s, r).toRadixString(r), s);
       }
 
-      check("2ppp111222333", 33); // This value & radix requires three chunks.
+      check('2ppp111222333', 33); // This value & radix requires three chunks.
     });
   });
 
-  group("string representation", () {
-    test("toString", () {
-      expect(Int64(0).toString(), "0");
-      expect(Int64(1).toString(), "1");
-      expect(Int64(-1).toString(), "-1");
-      expect(Int64(-10).toString(), "-10");
-      expect(Int64.MIN_VALUE.toString(), "-9223372036854775808");
-      expect(Int64.MAX_VALUE.toString(), "9223372036854775807");
+  group('string representation', () {
+    test('toString', () {
+      expect(Int64(0).toString(), '0');
+      expect(Int64(1).toString(), '1');
+      expect(Int64(-1).toString(), '-1');
+      expect(Int64(-10).toString(), '-10');
+      expect(Int64.MIN_VALUE.toString(), '-9223372036854775808');
+      expect(Int64.MAX_VALUE.toString(), '9223372036854775807');
 
       int top = 922337201;
       int bottom = 967490662;
       Int64 fullnum = (Int64(1000000000) * Int64(top)) + Int64(bottom);
-      expect(fullnum.toString(), "922337201967490662");
-      expect((-fullnum).toString(), "-922337201967490662");
-      expect(Int64(123456789).toString(), "123456789");
+      expect(fullnum.toString(), '922337201967490662');
+      expect((-fullnum).toString(), '-922337201967490662');
+      expect(Int64(123456789).toString(), '123456789');
     });
 
-    test("toHexString", () {
+    test('toHexString', () {
       Int64 deadbeef12341234 = Int64.fromInts(0xDEADBEEF, 0x12341234);
-      expect(Int64.ZERO.toHexString(), "0");
-      expect(deadbeef12341234.toHexString(), "DEADBEEF12341234");
+      expect(Int64.ZERO.toHexString(), '0');
+      expect(deadbeef12341234.toHexString(), 'DEADBEEF12341234');
       expect(Int64.fromInts(0x17678A7, 0xDEF01234).toHexString(),
-          "17678A7DEF01234");
-      expect(Int64(123456789).toHexString(), "75BCD15");
+          '17678A7DEF01234');
+      expect(Int64(123456789).toHexString(), '75BCD15');
     });
 
-    test("toRadixString", () {
-      expect(Int64(123456789).toRadixString(5), "223101104124");
+    test('toRadixString', () {
+      expect(Int64(123456789).toRadixString(5), '223101104124');
       expect(Int64.MIN_VALUE.toRadixString(2),
-          "-1000000000000000000000000000000000000000000000000000000000000000");
+          '-1000000000000000000000000000000000000000000000000000000000000000');
       expect(Int64.MIN_VALUE.toRadixString(3),
-          "-2021110011022210012102010021220101220222");
+          '-2021110011022210012102010021220101220222');
       expect(Int64.MIN_VALUE.toRadixString(4),
-          "-20000000000000000000000000000000");
-      expect(Int64.MIN_VALUE.toRadixString(5), "-1104332401304422434310311213");
-      expect(Int64.MIN_VALUE.toRadixString(6), "-1540241003031030222122212");
-      expect(Int64.MIN_VALUE.toRadixString(7), "-22341010611245052052301");
-      expect(Int64.MIN_VALUE.toRadixString(8), "-1000000000000000000000");
-      expect(Int64.MIN_VALUE.toRadixString(9), "-67404283172107811828");
-      expect(Int64.MIN_VALUE.toRadixString(10), "-9223372036854775808");
-      expect(Int64.MIN_VALUE.toRadixString(11), "-1728002635214590698");
-      expect(Int64.MIN_VALUE.toRadixString(12), "-41a792678515120368");
-      expect(Int64.MIN_VALUE.toRadixString(13), "-10b269549075433c38");
-      expect(Int64.MIN_VALUE.toRadixString(14), "-4340724c6c71dc7a8");
-      expect(Int64.MIN_VALUE.toRadixString(15), "-160e2ad3246366808");
-      expect(Int64.MIN_VALUE.toRadixString(16), "-8000000000000000");
+          '-20000000000000000000000000000000');
+      expect(Int64.MIN_VALUE.toRadixString(5), '-1104332401304422434310311213');
+      expect(Int64.MIN_VALUE.toRadixString(6), '-1540241003031030222122212');
+      expect(Int64.MIN_VALUE.toRadixString(7), '-22341010611245052052301');
+      expect(Int64.MIN_VALUE.toRadixString(8), '-1000000000000000000000');
+      expect(Int64.MIN_VALUE.toRadixString(9), '-67404283172107811828');
+      expect(Int64.MIN_VALUE.toRadixString(10), '-9223372036854775808');
+      expect(Int64.MIN_VALUE.toRadixString(11), '-1728002635214590698');
+      expect(Int64.MIN_VALUE.toRadixString(12), '-41a792678515120368');
+      expect(Int64.MIN_VALUE.toRadixString(13), '-10b269549075433c38');
+      expect(Int64.MIN_VALUE.toRadixString(14), '-4340724c6c71dc7a8');
+      expect(Int64.MIN_VALUE.toRadixString(15), '-160e2ad3246366808');
+      expect(Int64.MIN_VALUE.toRadixString(16), '-8000000000000000');
       expect(Int64.MAX_VALUE.toRadixString(2),
-          "111111111111111111111111111111111111111111111111111111111111111");
+          '111111111111111111111111111111111111111111111111111111111111111');
       expect(Int64.MAX_VALUE.toRadixString(3),
-          "2021110011022210012102010021220101220221");
+          '2021110011022210012102010021220101220221');
       expect(
-          Int64.MAX_VALUE.toRadixString(4), "13333333333333333333333333333333");
-      expect(Int64.MAX_VALUE.toRadixString(5), "1104332401304422434310311212");
-      expect(Int64.MAX_VALUE.toRadixString(6), "1540241003031030222122211");
-      expect(Int64.MAX_VALUE.toRadixString(7), "22341010611245052052300");
-      expect(Int64.MAX_VALUE.toRadixString(8), "777777777777777777777");
-      expect(Int64.MAX_VALUE.toRadixString(9), "67404283172107811827");
-      expect(Int64.MAX_VALUE.toRadixString(10), "9223372036854775807");
-      expect(Int64.MAX_VALUE.toRadixString(11), "1728002635214590697");
-      expect(Int64.MAX_VALUE.toRadixString(12), "41a792678515120367");
-      expect(Int64.MAX_VALUE.toRadixString(13), "10b269549075433c37");
-      expect(Int64.MAX_VALUE.toRadixString(14), "4340724c6c71dc7a7");
-      expect(Int64.MAX_VALUE.toRadixString(15), "160e2ad3246366807");
-      expect(Int64.MAX_VALUE.toRadixString(16), "7fffffffffffffff");
+          Int64.MAX_VALUE.toRadixString(4), '13333333333333333333333333333333');
+      expect(Int64.MAX_VALUE.toRadixString(5), '1104332401304422434310311212');
+      expect(Int64.MAX_VALUE.toRadixString(6), '1540241003031030222122211');
+      expect(Int64.MAX_VALUE.toRadixString(7), '22341010611245052052300');
+      expect(Int64.MAX_VALUE.toRadixString(8), '777777777777777777777');
+      expect(Int64.MAX_VALUE.toRadixString(9), '67404283172107811827');
+      expect(Int64.MAX_VALUE.toRadixString(10), '9223372036854775807');
+      expect(Int64.MAX_VALUE.toRadixString(11), '1728002635214590697');
+      expect(Int64.MAX_VALUE.toRadixString(12), '41a792678515120367');
+      expect(Int64.MAX_VALUE.toRadixString(13), '10b269549075433c37');
+      expect(Int64.MAX_VALUE.toRadixString(14), '4340724c6c71dc7a7');
+      expect(Int64.MAX_VALUE.toRadixString(15), '160e2ad3246366807');
+      expect(Int64.MAX_VALUE.toRadixString(16), '7fffffffffffffff');
       expect(() => Int64(42).toRadixString(-1), throwsArgumentError);
       expect(() => Int64(42).toRadixString(0), throwsArgumentError);
       expect(() => Int64(42).toRadixString(37), throwsArgumentError);
     });
 
-    test("toStringUnsigned", () {
+    test('toStringUnsigned', () {
       List<Int64> values = [];
       for (int high = 0; high < 16; high++) {
         for (int low = -2; low <= 2; low++) {
diff --git a/test/int_64_vm_test.dart b/test/int_64_vm_test.dart
index e5e1303..2ab161e 100644
--- a/test/int_64_vm_test.dart
+++ b/test/int_64_vm_test.dart
@@ -8,31 +8,31 @@
 import 'package:test/test.dart';
 
 void main() {
-  group("conversions", () {
-    test("toInt", () {
-      expect(Int64.parseInt("-10000000000000000").toInt(),
+  group('conversions', () {
+    test('toInt', () {
+      expect(Int64.parseInt('-10000000000000000').toInt(),
           same(-10000000000000000));
-      expect(Int64.parseInt("-10000000000000001").toInt(),
+      expect(Int64.parseInt('-10000000000000001').toInt(),
           same(-10000000000000001));
-      expect(Int64.parseInt("-10000000000000002").toInt(),
+      expect(Int64.parseInt('-10000000000000002').toInt(),
           same(-10000000000000002));
-      expect(Int64.parseInt("-10000000000000003").toInt(),
+      expect(Int64.parseInt('-10000000000000003').toInt(),
           same(-10000000000000003));
-      expect(Int64.parseInt("-10000000000000004").toInt(),
+      expect(Int64.parseInt('-10000000000000004').toInt(),
           same(-10000000000000004));
-      expect(Int64.parseInt("-10000000000000005").toInt(),
+      expect(Int64.parseInt('-10000000000000005').toInt(),
           same(-10000000000000005));
-      expect(Int64.parseInt("-10000000000000006").toInt(),
+      expect(Int64.parseInt('-10000000000000006').toInt(),
           same(-10000000000000006));
-      expect(Int64.parseInt("-10000000000000007").toInt(),
+      expect(Int64.parseInt('-10000000000000007').toInt(),
           same(-10000000000000007));
-      expect(Int64.parseInt("-10000000000000008").toInt(),
+      expect(Int64.parseInt('-10000000000000008').toInt(),
           same(-10000000000000008));
     });
   });
 
-  test("", () {
-    check(int n) {
+  test('', () {
+    void check(int n) {
       // Sign change should commute with conversion.
       expect(-Int64(-n), Int64(n));
       expect(Int64(-n), -Int64(n));
