| Index: test/codegen/expect/corelib/hash_set_test_01_multi.js | 
| diff --git a/test/codegen/expect/corelib/hash_set_test_01_multi.js b/test/codegen/expect/corelib/hash_set_test_01_multi.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..82cd938e62e69e5851fd297361d1a680a1a50f1e | 
| --- /dev/null | 
| +++ b/test/codegen/expect/corelib/hash_set_test_01_multi.js | 
| @@ -0,0 +1,347 @@ | 
| +dart_library.library('corelib/hash_set_test_01_multi', null, /* Imports */[ | 
| +  'dart_sdk', | 
| +  'expect' | 
| +], function load__hash_set_test_01_multi(exports, dart_sdk, expect) { | 
| +  'use strict'; | 
| +  const core = dart_sdk.core; | 
| +  const _interceptors = dart_sdk._interceptors; | 
| +  const math = dart_sdk.math; | 
| +  const collection = dart_sdk.collection; | 
| +  const dart = dart_sdk.dart; | 
| +  const dartx = dart_sdk.dartx; | 
| +  const expect$ = expect.expect; | 
| +  const hash_set_test_01_multi = Object.create(null); | 
| +  let JSArrayOfint = () => (JSArrayOfint = dart.constFn(_interceptors.JSArray$(core.int)))(); | 
| +  let VoidToSet = () => (VoidToSet = dart.constFn(dart.functionType(core.Set, [])))(); | 
| +  let IterableToSet = () => (IterableToSet = dart.constFn(dart.functionType(core.Set, [core.Iterable])))(); | 
| +  let JSArrayOfObject = () => (JSArrayOfObject = dart.constFn(_interceptors.JSArray$(core.Object)))(); | 
| +  let JSArrayOfMutable = () => (JSArrayOfMutable = dart.constFn(_interceptors.JSArray$(hash_set_test_01_multi.Mutable)))(); | 
| +  let intToint = () => (intToint = dart.constFn(dart.definiteFunctionType(core.int, [core.int])))(); | 
| +  let intAndintToSet = () => (intAndintToSet = dart.constFn(dart.definiteFunctionType(core.Set, [core.int, core.int])))(); | 
| +  let intTobool = () => (intTobool = dart.constFn(dart.definiteFunctionType(core.bool, [core.int])))(); | 
| +  let dynamicTobool = () => (dynamicTobool = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic])))(); | 
| +  let FnAndFnTodynamic = () => (FnAndFnTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [VoidToSet(), IterableToSet()])))(); | 
| +  let FnTovoid = () => (FnTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [VoidToSet()])))(); | 
| +  let VoidToSet$ = () => (VoidToSet$ = dart.constFn(dart.definiteFunctionType(core.Set, [])))(); | 
| +  let IterableToSet$ = () => (IterableToSet$ = dart.constFn(dart.definiteFunctionType(core.Set, [core.Iterable])))(); | 
| +  let VoidToHashSet = () => (VoidToHashSet = dart.constFn(dart.definiteFunctionType(collection.HashSet, [])))(); | 
| +  let IterableToHashSet = () => (IterableToHashSet = dart.constFn(dart.definiteFunctionType(collection.HashSet, [core.Iterable])))(); | 
| +  let VoidToLinkedHashSet = () => (VoidToLinkedHashSet = dart.constFn(dart.definiteFunctionType(collection.LinkedHashSet, [])))(); | 
| +  let IterableToLinkedHashSet = () => (IterableToLinkedHashSet = dart.constFn(dart.definiteFunctionType(collection.LinkedHashSet, [core.Iterable])))(); | 
| +  let dynamicAnddynamicTobool = () => (dynamicAnddynamicTobool = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic, dart.dynamic])))(); | 
| +  let dynamicToint = () => (dynamicToint = dart.constFn(dart.definiteFunctionType(core.int, [dart.dynamic])))(); | 
| +  let VoidTovoid = () => (VoidTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [])))(); | 
| +  hash_set_test_01_multi.testSet = function(newSet, newSetFrom) { | 
| +    function gen(from, to) { | 
| +      return core.Set.from(core.Iterable.generate(dart.notNull(to) - dart.notNull(from), dart.fn(n => dart.notNull(n) + dart.notNull(from), intToint()))); | 
| +    } | 
| +    dart.fn(gen, intAndintToSet()); | 
| +    function odd(n) { | 
| +      return (dart.notNull(n) & 1) == 1; | 
| +    } | 
| +    dart.fn(odd, intTobool()); | 
| +    function even(n) { | 
| +      return (dart.notNull(n) & 1) == 0; | 
| +    } | 
| +    dart.fn(even, intTobool()); | 
| +    { | 
| +      let set = newSet(); | 
| +      for (let i = 0; i < 256; i++) { | 
| +        set.add(i); | 
| +      } | 
| +      set.addAll(gen(256, 512)); | 
| +      set.addAll(newSetFrom(gen(512, 1000))); | 
| +      expect$.Expect.equals(1000, set.length); | 
| +      for (let i = 0; i < 1000; i = i + 2) | 
| +        set.remove(i); | 
| +      expect$.Expect.equals(500, set.length); | 
| +      expect$.Expect.isFalse(set.any(even)); | 
| +      expect$.Expect.isTrue(set.every(odd)); | 
| +      set.addAll(gen(0, 1000)); | 
| +      expect$.Expect.equals(1000, set.length); | 
| +    } | 
| +    { | 
| +      let set = newSet(); | 
| +      set.add(0); | 
| +      for (let i = 0; i < 1000; i++) { | 
| +        set.add(i + 1); | 
| +        set.remove(i); | 
| +        expect$.Expect.equals(1, set.length); | 
| +      } | 
| +    } | 
| +    { | 
| +      let set = newSet(); | 
| +      for (let i = 0; i < 1000; i++) { | 
| +        set.add(new hash_set_test_01_multi.BadHashCode()); | 
| +      } | 
| +      expect$.Expect.equals(1000, set.length); | 
| +    } | 
| +    { | 
| +      let set = newSet(); | 
| +      set.add(0); | 
| +      set.add(1); | 
| +      { | 
| +        let iter = set.iterator; | 
| +        iter.moveNext(); | 
| +        set.add(1); | 
| +        iter.moveNext(); | 
| +        set.add(2); | 
| +        expect$.Expect.throws(dart.bind(iter, 'moveNext'), dart.fn(e => core.Error.is(e), dynamicTobool())); | 
| +      } | 
| +      { | 
| +        let iter = set.iterator; | 
| +        expect$.Expect.equals(3, set.length); | 
| +        iter.moveNext(); | 
| +        iter.moveNext(); | 
| +        iter.moveNext(); | 
| +        set.add(3); | 
| +        expect$.Expect.throws(dart.bind(iter, 'moveNext'), dart.fn(e => core.Error.is(e), dynamicTobool())); | 
| +      } | 
| +      { | 
| +        let iter = set.iterator; | 
| +        iter.moveNext(); | 
| +        set.remove(1000); | 
| +        iter.moveNext(); | 
| +        let n = core.int._check(iter.current); | 
| +        set.remove(n); | 
| +        expect$.Expect.equals(n, iter.current); | 
| +        expect$.Expect.throws(dart.bind(iter, 'moveNext'), dart.fn(e => core.Error.is(e), dynamicTobool())); | 
| +      } | 
| +      { | 
| +        let iter = set.iterator; | 
| +        expect$.Expect.equals(3, set.length); | 
| +        iter.moveNext(); | 
| +        iter.moveNext(); | 
| +        iter.moveNext(); | 
| +        let n = core.int._check(iter.current); | 
| +        set.remove(n); | 
| +        expect$.Expect.equals(n, iter.current); | 
| +        expect$.Expect.throws(dart.bind(iter, 'moveNext'), dart.fn(e => core.Error.is(e), dynamicTobool())); | 
| +      } | 
| +      { | 
| +        let iter = set.iterator; | 
| +        expect$.Expect.equals(2, set.length); | 
| +        iter.moveNext(); | 
| +        let n = core.int._check(iter.current); | 
| +        set.add(n); | 
| +        iter.moveNext(); | 
| +        expect$.Expect.isTrue(set.contains(iter.current)); | 
| +      } | 
| +      { | 
| +        let set2 = newSet(); | 
| +        for (let value of set) { | 
| +          set2.add(value); | 
| +        } | 
| +        let iter = set.iterator; | 
| +        set.addAll(set2); | 
| +        iter.moveNext(); | 
| +      } | 
| +    } | 
| +    { | 
| +      for (let i = 1; i < 128; i++) { | 
| +        let set = newSetFrom(gen(0, i)); | 
| +        let iter = set.iterator; | 
| +        for (let j = 0; j < i; j++) { | 
| +          set.add(j); | 
| +        } | 
| +        iter.moveNext(); | 
| +        for (let j = 1; j < i; j++) { | 
| +          set.remove(j); | 
| +        } | 
| +        iter = set.iterator; | 
| +        set.add(0); | 
| +        iter.moveNext(); | 
| +      } | 
| +    } | 
| +    { | 
| +      let set = newSet(); | 
| +      set.add(null); | 
| +      expect$.Expect.equals(1, set.length); | 
| +      expect$.Expect.isTrue(set.contains(null)); | 
| +      expect$.Expect.isNull(set.first); | 
| +      expect$.Expect.isNull(set.last); | 
| +      set.add(null); | 
| +      expect$.Expect.equals(1, set.length); | 
| +      expect$.Expect.isTrue(set.contains(null)); | 
| +      set.remove(null); | 
| +      expect$.Expect.isTrue(set.isEmpty); | 
| +      expect$.Expect.isFalse(set.contains(null)); | 
| +      set = newSetFrom([null]); | 
| +      expect$.Expect.equals(1, set.length); | 
| +      expect$.Expect.isTrue(set.contains(null)); | 
| +      expect$.Expect.isNull(set.first); | 
| +      expect$.Expect.isNull(set.last); | 
| +      set.add(null); | 
| +      expect$.Expect.equals(1, set.length); | 
| +      expect$.Expect.isTrue(set.contains(null)); | 
| +      set.remove(null); | 
| +      expect$.Expect.isTrue(set.isEmpty); | 
| +      expect$.Expect.isFalse(set.contains(null)); | 
| +      set = newSetFrom(JSArrayOfint().of([1, 2, 3, null, 4, 5, 6])); | 
| +      expect$.Expect.equals(7, set.length); | 
| +      for (let i = 7; i < 128; i++) { | 
| +        set.add(i); | 
| +      } | 
| +      expect$.Expect.equals(128, set.length); | 
| +      expect$.Expect.isTrue(set.contains(null)); | 
| +      set.add(null); | 
| +      expect$.Expect.equals(128, set.length); | 
| +      expect$.Expect.isTrue(set.contains(null)); | 
| +      set.remove(null); | 
| +      expect$.Expect.equals(127, set.length); | 
| +      expect$.Expect.isFalse(set.contains(null)); | 
| +    } | 
| +    { | 
| +      let set = newSet(); | 
| +      set.addAll([]); | 
| +      expect$.Expect.isTrue(set.isEmpty); | 
| +      set.addAll(JSArrayOfint().of([1, 3, 2])); | 
| +      expect$.Expect.equals(3, set.length); | 
| +      expect$.Expect.isTrue(set.contains(1)); | 
| +      expect$.Expect.isTrue(set.contains(3)); | 
| +      expect$.Expect.isTrue(set.contains(2)); | 
| +      expect$.Expect.isFalse(set.contains(4)); | 
| +      set.clear(); | 
| +      expect$.Expect.isTrue(set.isEmpty); | 
| +    } | 
| +    { | 
| +      let set = newSetFrom(JSArrayOfint().of([1, 2, 3])); | 
| +      set.removeWhere(dart.fn(each => dart.equals(each, 2), dynamicTobool())); | 
| +      expect$.Expect.equals(2, set.length); | 
| +      expect$.Expect.isTrue(set.contains(1)); | 
| +      expect$.Expect.isFalse(set.contains(2)); | 
| +      expect$.Expect.isTrue(set.contains(3)); | 
| +      set.retainWhere(dart.fn(each => dart.equals(each, 3), dynamicTobool())); | 
| +      expect$.Expect.equals(1, set.length); | 
| +      expect$.Expect.isFalse(set.contains(1)); | 
| +      expect$.Expect.isFalse(set.contains(2)); | 
| +      expect$.Expect.isTrue(set.contains(3)); | 
| +    } | 
| +    { | 
| +      let set = newSet(); | 
| +      let m1a = new hash_set_test_01_multi.Mutable(1); | 
| +      let m1b = new hash_set_test_01_multi.Mutable(1); | 
| +      let m2a = new hash_set_test_01_multi.Mutable(2); | 
| +      let m2b = new hash_set_test_01_multi.Mutable(2); | 
| +      expect$.Expect.isNull(set.lookup(m1a)); | 
| +      expect$.Expect.isNull(set.lookup(m1b)); | 
| +      set.add(m1a); | 
| +      expect$.Expect.identical(m1a, set.lookup(m1a)); | 
| +      expect$.Expect.identical(m1a, set.lookup(m1b)); | 
| +      expect$.Expect.isNull(set.lookup(m2a)); | 
| +      expect$.Expect.isNull(set.lookup(m2b)); | 
| +      set.add(m2a); | 
| +      expect$.Expect.identical(m2a, set.lookup(m2a)); | 
| +      expect$.Expect.identical(m2a, set.lookup(m2b)); | 
| +      set.add(m2b); | 
| +      expect$.Expect.identical(m2a, set.lookup(m2a)); | 
| +      expect$.Expect.identical(m2a, set.lookup(m2b)); | 
| +      set.remove(m1a); | 
| +      set.add(m1b); | 
| +      expect$.Expect.identical(m1b, set.lookup(m1a)); | 
| +      expect$.Expect.identical(m1b, set.lookup(m1b)); | 
| +      set.add(1); | 
| +      expect$.Expect.identical(1, set.lookup(1.0)); | 
| +      set.add(-0.0); | 
| +      expect$.Expect.identical(-0.0, set.lookup(0.0)); | 
| +    } | 
| +    { | 
| +      let set = newSet(); | 
| +      let keys = []; | 
| +      for (let i = 65; i >= 2; --i) { | 
| +        keys[dartx.add](new hash_set_test_01_multi.Mutable(dart.asInt(math.pow(2, i)))); | 
| +      } | 
| +      for (let key of keys) { | 
| +        expect$.Expect.isTrue(set.add(key)); | 
| +      } | 
| +      for (let key of keys) { | 
| +        expect$.Expect.isTrue(set.contains(key)); | 
| +      } | 
| +    } | 
| +  }; | 
| +  dart.fn(hash_set_test_01_multi.testSet, FnAndFnTodynamic()); | 
| +  let const$; | 
| +  hash_set_test_01_multi.testIdentitySet = function(create) { | 
| +    let set = create(); | 
| +    set.add(1); | 
| +    set.add(2); | 
| +    set.add(1); | 
| +    expect$.Expect.equals(2, set.length); | 
| +    let complex = 4; | 
| +    complex = set.length == 2 ? (complex / 4)[dartx.truncate]() : 87; | 
| +    expect$.Expect.isTrue(set.contains(complex)); | 
| +    set.clear(); | 
| +    let constants = JSArrayOfObject().of([core.double.INFINITY, core.double.NAN, -0.0, 0.0, 42, "", null, false, true, const$ || (const$ = dart.const(core.Symbol.new('bif'))), hash_set_test_01_multi.testIdentitySet]); | 
| +    set.addAll(constants); | 
| +    expect$.Expect.equals(constants[dartx.length], set.length); | 
| +    for (let c of constants) { | 
| +      expect$.Expect.isTrue(set.contains(c), dart.str`constant: ${c}`); | 
| +    } | 
| +    expect$.Expect.isTrue(set.containsAll(constants), dart.str`constants: ${set}`); | 
| +    set.clear(); | 
| +    let m1 = new hash_set_test_01_multi.Mutable(1); | 
| +    let m2 = new hash_set_test_01_multi.Mutable(2); | 
| +    let m3 = new hash_set_test_01_multi.Mutable(3); | 
| +    let m4 = new hash_set_test_01_multi.Mutable(2); | 
| +    set.addAll(JSArrayOfMutable().of([m1, m2, m3, m4])); | 
| +    expect$.Expect.equals(4, set.length); | 
| +    expect$.Expect.equals(3, m3.hashCode); | 
| +    m3.id = 1; | 
| +    expect$.Expect.equals(1, m3.hashCode); | 
| +    expect$.Expect.isTrue(set.contains(m3)); | 
| +    expect$.Expect.isTrue(set.contains(m1)); | 
| +    set.remove(m3); | 
| +    expect$.Expect.isFalse(set.contains(m3)); | 
| +    expect$.Expect.isTrue(set.contains(m1)); | 
| +    expect$.Expect.identical(m1, set.lookup(m1)); | 
| +    expect$.Expect.identical(null, set.lookup(m3)); | 
| +  }; | 
| +  dart.fn(hash_set_test_01_multi.testIdentitySet, FnTovoid()); | 
| +  hash_set_test_01_multi.main = function() { | 
| +    hash_set_test_01_multi.testSet(dart.fn(() => core.Set.new(), VoidToSet$()), dart.fn(m => core.Set.from(m), IterableToSet$())); | 
| +    hash_set_test_01_multi.testSet(dart.fn(() => collection.HashSet.new(), VoidToHashSet()), dart.fn(m => collection.HashSet.from(m), IterableToHashSet())); | 
| +    hash_set_test_01_multi.testSet(dart.fn(() => collection.LinkedHashSet.new(), VoidToLinkedHashSet()), dart.fn(m => collection.LinkedHashSet.from(m), IterableToLinkedHashSet())); | 
| +    hash_set_test_01_multi.testIdentitySet(dart.fn(() => core.Set.identity(), VoidToSet$())); | 
| +    hash_set_test_01_multi.testIdentitySet(dart.fn(() => collection.HashSet.identity(), VoidToHashSet())); | 
| +    hash_set_test_01_multi.testIdentitySet(dart.fn(() => collection.LinkedHashSet.identity(), VoidToLinkedHashSet())); | 
| +    hash_set_test_01_multi.testIdentitySet(dart.fn(() => collection.HashSet.new({equals: dart.fn((x, y) => core.identical(x, y), dynamicAnddynamicTobool()), hashCode: dart.fn(x => core.identityHashCode(x), dynamicToint())}), VoidToHashSet())); | 
| +    hash_set_test_01_multi.testIdentitySet(dart.fn(() => collection.LinkedHashSet.new({equals: dart.fn((x, y) => core.identical(x, y), dynamicAnddynamicTobool()), hashCode: dart.fn(x => core.identityHashCode(x), dynamicToint())}), VoidToLinkedHashSet())); | 
| +  }; | 
| +  dart.fn(hash_set_test_01_multi.main, VoidTovoid()); | 
| +  hash_set_test_01_multi.BadHashCode = class BadHashCode extends core.Object { | 
| +    new() { | 
| +      this.id = (() => { | 
| +        let x = hash_set_test_01_multi.BadHashCode.idCounter; | 
| +        hash_set_test_01_multi.BadHashCode.idCounter = dart.notNull(x) + 1; | 
| +        return x; | 
| +      })(); | 
| +    } | 
| +    get hashCode() { | 
| +      return 42; | 
| +    } | 
| +    compareTo(other) { | 
| +      return dart.notNull(this.id) - dart.notNull(other.id); | 
| +    } | 
| +  }; | 
| +  dart.setSignature(hash_set_test_01_multi.BadHashCode, { | 
| +    constructors: () => ({new: dart.definiteFunctionType(hash_set_test_01_multi.BadHashCode, [])}), | 
| +    methods: () => ({compareTo: dart.definiteFunctionType(core.int, [hash_set_test_01_multi.BadHashCode])}) | 
| +  }); | 
| +  hash_set_test_01_multi.BadHashCode.idCounter = 0; | 
| +  hash_set_test_01_multi.Mutable = class Mutable extends core.Object { | 
| +    new(id) { | 
| +      this.id = id; | 
| +    } | 
| +    get hashCode() { | 
| +      return this.id; | 
| +    } | 
| +    ['=='](other) { | 
| +      return hash_set_test_01_multi.Mutable.is(other) && this.id == other.id; | 
| +    } | 
| +  }; | 
| +  dart.setSignature(hash_set_test_01_multi.Mutable, { | 
| +    constructors: () => ({new: dart.definiteFunctionType(hash_set_test_01_multi.Mutable, [core.int])}) | 
| +  }); | 
| +  // Exports: | 
| +  exports.hash_set_test_01_multi = hash_set_test_01_multi; | 
| +}); | 
|  |