import 'constants_lib.dart' as lib;

const int Function(int) partialInstantiation = lib.id;

const instance = const lib.Class<int>(0);

const listLiteral = <int>[0];

const setLiteral = <int>{0};

const mapLiteral = <int, String>{0: 'foo'};

const listConcatenation = <int>[...listLiteral];

const setConcatenation = <int>{...setLiteral};

const mapConcatenation = <int, String>{...mapLiteral};

const partialInstantiationIdentical =
    identical(partialInstantiation, lib.partialInstantiation);

const instanceIdentical = identical(instance, lib.instance);

const listLiteralIdentical = identical(listLiteral, lib.listLiteral);

const setLiteralIdentical = identical(setLiteral, lib.setLiteral);

const mapLiteralIdentical = identical(mapLiteral, lib.mapLiteral);

const listConcatenationIdentical =
    identical(listConcatenation, lib.listConcatenation);

const setConcatenationIdentical =
    identical(setConcatenation, lib.setConcatenation);

const mapConcatenationIdentical =
    identical(mapConcatenation, lib.mapConcatenation);

main() {}

test(expected, actual) {}
