// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// 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.

library lib2;

import "package:expect/expect.dart";
import "static_separate_lib1.dart";

/*strong.member: foo:OutputUnit(3, {lib2})*/
/*strongConst.member: foo:
 OutputUnit(3, {lib2}),
 constants=[
  ListConstant(<Map<int,int>>[MapConstant(<int, int>{IntConstant(1): IntConstant(3)})])=OutputUnit(3, {lib2}),
  MapConstant(<int, int>{IntConstant(1): IntConstant(3)})=OutputUnit(3, {lib2})]
*/
foo() {
  Expect.equals(1, C.foo());
  Expect.mapEquals({}, C1.foo);

  Expect.mapEquals({1: 2}, C2.foo);
  C2.foo = {1: 2};
  Expect.mapEquals({1: 2}, C2.foo);

  Expect.equals(x, C3.foo);
  Expect.mapEquals({x: x}, C4.foo);
  Expect.listEquals([
    const {1: 3}
  ], C5.foo);
}
