anchor.diff:    var str1 = 'a';
     var str2 = 'b';
     var str3 = 'c';
  -  check(str1, str2);
  -  check(str1, str3);
  -  check(str2, str3);
  +  check(str1, str2, identityHashCode: false);
  +  check(str1, str3, identityHashCode: false);
  +  check(str2, str3, identityHashCode: false);
   
     Expect.equals(str1.hashCode, hash(str1));
     Expect.equals(str2.hashCode, hash(str2));
  
positive.code: // local x.hashCode calls might be optimized.
  var hash = new Hasher().hash;
  
  check(value1, value2) {
    var h1 = hash(value1);
    var h2 = hash(value2);
  
    Expect.isTrue(h1 is int);
    Expect.isTrue(h2 is int);
    Expect.isFalse(h1 == h2);
  
    // We expect that the hash function is reasonable quality - there are some
    // difference in the low bits.
    Expect.isFalse((h1 & 0xf) == (h2 & 0xf));
  
    // Quality check - the values should be SMIs for efficient arithmetic.
    Expect.equals((h1 & 0x3fffffff), h1);
    Expect.equals((h2 & 0x3fffffff), h2);
  }
  
  bools() {
    check(true, false);
  
    Expect.equals(true.hashCode, hash(true));   // First can be optimized.
    Expect.equals(false.hashCode, hash(false));
  
negative.code: ints() {
    var i1 = 100;
    var i2 = 101;
    check(i1, i2, identityHashCode: false);
    Expect.equals(i1.hashCode, hash(i1));
    Expect.equals(i2.hashCode, hash(i2));
  }
  