define(['dart_sdk', 'expect'], function(dart_sdk, expect) {
  'use strict';
  const core = dart_sdk.core;
  const dart = dart_sdk.dart;
  const dartx = dart_sdk.dartx;
  const minitest = expect.minitest;
  const _root = Object.create(null);
  const identity_test = Object.create(_root);
  const $_equals = dartx._equals;
  const $_get = dartx._get;
  let TToT = () => (TToT = dart.constFn(dart.gFnType(T => [T, [T]])))();
  let VoidToT = () => (VoidToT = dart.constFn(dart.gFnType(T => [T, []])))();
  let VoidToNull = () => (VoidToNull = dart.constFn(dart.fnType(core.Null, [])))();
  let VoidTodynamic = () => (VoidTodynamic = dart.constFn(dart.fnType(dart.dynamic, [])))();
  identity_test.Music = class Music extends core.Object {
    toString() {
      return {
        0: "Music.country",
        1: "Music.western"
      }[this.index];
    }
  };
  (identity_test.Music.new = function(x) {
    this.index = x;
  }).prototype = identity_test.Music.prototype;
  dart.addTypeTests(identity_test.Music);
  dart.setFieldSignature(identity_test.Music, () => ({
    __proto__: dart.getFields(identity_test.Music.__proto__),
    index: dart.finalFieldType(core.int)
  }));
  dart.defineExtensionMethods(identity_test.Music, ['toString']);
  identity_test.Music.country = dart.const(new identity_test.Music.new(0));
  identity_test.Music.western = dart.const(new identity_test.Music.new(1));
  identity_test.Music.values = dart.constList([identity_test.Music.country, identity_test.Music.western], identity_test.Music);
  identity_test.BluesBrother = class BluesBrother extends core.Object {};
  (identity_test.BluesBrother.new = function() {
  }).prototype = identity_test.BluesBrother.prototype;
  dart.addTypeTests(identity_test.BluesBrother);
  identity_test._Jake = class _Jake extends identity_test.BluesBrother {};
  (identity_test._Jake.new = function() {
  }).prototype = identity_test._Jake.prototype;
  dart.addTypeTests(identity_test._Jake);
  identity_test._Elwood = class _Elwood extends identity_test.BluesBrother {
    _equals(other) {
      if (other == null) return false;
      return identity_test._Elwood.is(other);
    }
  };
  (identity_test._Elwood.new = function() {
  }).prototype = identity_test._Elwood.prototype;
  dart.addTypeTests(identity_test._Elwood);
  dart.setMethodSignature(identity_test._Elwood, () => ({
    __proto__: dart.getMethods(identity_test._Elwood.__proto__),
    _equals: dart.fnType(core.bool, [core.Object]),
    [$_equals]: dart.fnType(core.bool, [core.Object])
  }));
  dart.defineExtensionMethods(identity_test._Elwood, ['_equals']);
  identity_test._Norman = class _Norman extends identity_test.BluesBrother {};
  (identity_test._Norman.new = function() {
  }).prototype = identity_test._Norman.prototype;
  dart.addTypeTests(identity_test._Norman);
  identity_test.hideNull = function(T, x) {
    return x;
  };
  dart.fn(identity_test.hideNull, TToT());
  identity_test.getUndefined = function(T) {
    return T._check(core.List.new(1)[$_get](0));
  };
  dart.fn(identity_test.getUndefined, VoidToT());
  identity_test.main = function() {
    minitest.group('Enum identity', dart.fn(() => {
      minitest.test('Identical enum/enum (nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(identity_test.Music, identity_test.Music.country);
        let e2 = identity_test.hideNull(identity_test.Music, identity_test.Music.western);
        let d1 = identity_test.hideNull(identity_test.Music, identity_test.Music.country);
        let d2 = identity_test.hideNull(identity_test.Music, identity_test.Music.western);
        let o1 = identity_test.hideNull(core.Object, identity_test.Music.country);
        let o2 = identity_test.hideNull(core.Object, identity_test.Music.western);
        minitest.expect(e1 == e1, true);
        minitest.expect(core.identical(e1, d1), true);
        minitest.expect(core.identical(e1, o1), true);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(e1, o2), false);
        minitest.expect(core.identical(e1, d2), false);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(d1, e1), true);
        minitest.expect(core.identical(d1, d1), true);
        minitest.expect(core.identical(d1, o1), true);
        minitest.expect(core.identical(d1, e2), false);
        minitest.expect(core.identical(d1, d2), false);
        minitest.expect(core.identical(d1, o2), false);
        minitest.expect(core.identical(o1, e1), true);
        minitest.expect(core.identical(o1, d1), true);
        minitest.expect(core.identical(o1, o1), true);
        minitest.expect(core.identical(o1, e2), false);
        minitest.expect(core.identical(o1, d2), false);
        minitest.expect(core.identical(o1, o2), false);
      }, VoidToNull()));
      minitest.test('Identical enum/enum (non-null)', dart.fn(() => {
        let e1 = identity_test.Music.country;
        let e2 = identity_test.Music.western;
        let d1 = identity_test.Music.country;
        let d2 = identity_test.Music.western;
        let o1 = identity_test.Music.country;
        let o2 = identity_test.Music.western;
        minitest.expect(e1 === e1, true);
        minitest.expect(e1 === d1, true);
        minitest.expect(e1 === o1, true);
        minitest.expect(e1 === e2, false);
        minitest.expect(e1 === o2, false);
        minitest.expect(e1 === d2, false);
        minitest.expect(e1 === e2, false);
        minitest.expect(d1 === e1, true);
        minitest.expect(d1 === d1, true);
        minitest.expect(d1 === o1, true);
        minitest.expect(d1 === e2, false);
        minitest.expect(d1 === d2, false);
        minitest.expect(d1 === o2, false);
        minitest.expect(o1 === e1, true);
        minitest.expect(o1 === d1, true);
        minitest.expect(o1 === o1, true);
        minitest.expect(o1 === e2, false);
        minitest.expect(o1 === d2, false);
        minitest.expect(o1 === o2, false);
      }, VoidToNull()));
      minitest.test('Identical enum/other (static, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(identity_test.Music, identity_test.Music.country);
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test.BluesBrother, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(e1 == l1, false);
        minitest.expect(e1 == b1, false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(l1 == e1, false);
        minitest.expect(b1 == e1, false);
      }, VoidToNull()));
      minitest.test('Identical enum/other (static, non-null)', dart.fn(() => {
        let e1 = identity_test.Music.country;
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
      }, VoidToNull()));
      minitest.test('Identical enum/other (dynamic, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(identity_test.Music, identity_test.Music.country);
        let d1 = identity_test.hideNull(identity_test.Music, identity_test.Music.country);
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test._Norman, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
        minitest.expect(core.identical(d1, s1), false);
        minitest.expect(core.identical(d1, s2), false);
        minitest.expect(core.identical(d1, i1), false);
        minitest.expect(core.identical(d1, i2), false);
        minitest.expect(core.identical(d1, l1), false);
        minitest.expect(core.identical(d1, b1), false);
        minitest.expect(core.identical(s1, d1), false);
        minitest.expect(core.identical(s2, d1), false);
        minitest.expect(core.identical(i1, d1), false);
        minitest.expect(core.identical(i2, d1), false);
        minitest.expect(core.identical(l1, d1), false);
        minitest.expect(core.identical(b1, d1), false);
      }, VoidToNull()));
      minitest.test('Identical enum/other (dynamic, non-null)', dart.fn(() => {
        let e1 = identity_test.Music.country;
        let d1 = identity_test.Music.country;
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
        minitest.expect(d1 === s1, false);
        minitest.expect(d1 === s2, false);
        minitest.expect(d1 === i1, false);
        minitest.expect(d1 === i2, false);
        minitest.expect(d1 === l1, false);
        minitest.expect(d1 === b1, false);
        minitest.expect(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1 === d1, false);
        minitest.expect(b1 === d1, false);
      }, VoidToNull()));
    }, VoidToNull()));
    minitest.group('String identity', dart.fn(() => {
      minitest.test('Identical string/string (nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.String, "The");
        let e2 = identity_test.hideNull(core.String, "Band");
        let d1 = identity_test.hideNull(core.String, "The");
        let d2 = identity_test.hideNull(core.String, "Band");
        let o1 = identity_test.hideNull(core.Object, "The");
        let o2 = identity_test.hideNull(core.Object, "Band");
        minitest.expect(e1 == e1, true);
        minitest.expect(core.identical(e1, d1), true);
        minitest.expect(core.identical(e1, o1), true);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(e1, o2), false);
        minitest.expect(core.identical(e1, d2), false);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(d1, e1), true);
        minitest.expect(core.identical(d1, d1), true);
        minitest.expect(core.identical(d1, o1), true);
        minitest.expect(core.identical(d1, e2), false);
        minitest.expect(core.identical(d1, d2), false);
        minitest.expect(core.identical(d1, o2), false);
        minitest.expect(core.identical(o1, e1), true);
        minitest.expect(core.identical(o1, d1), true);
        minitest.expect(core.identical(o1, o1), true);
        minitest.expect(core.identical(o1, e2), false);
        minitest.expect(core.identical(o1, d2), false);
        minitest.expect(core.identical(o1, o2), false);
      }, VoidToNull()));
      minitest.test('Identical string/string (non-null)', dart.fn(() => {
        let e1 = "The";
        let e2 = "Band";
        let d1 = "The";
        let d2 = "Band";
        let o1 = "The";
        let o2 = "Band";
        minitest.expect(e1 === e1, true);
        minitest.expect(e1 === d1, true);
        minitest.expect(e1 === o1, true);
        minitest.expect(e1 === e2, false);
        minitest.expect(e1 === o2, false);
        minitest.expect(e1 === d2, false);
        minitest.expect(e1 === e2, false);
        minitest.expect(d1 === e1, true);
        minitest.expect(d1 === d1, true);
        minitest.expect(d1 === o1, true);
        minitest.expect(d1 === e2, false);
        minitest.expect(d1 === d2, false);
        minitest.expect(d1 === o2, false);
        minitest.expect(o1 === e1, true);
        minitest.expect(o1 === d1, true);
        minitest.expect(o1 === o1, true);
        minitest.expect(o1 === e2, false);
        minitest.expect(o1 === d2, false);
        minitest.expect(o1 === o2, false);
      }, VoidToNull()));
      minitest.test('Identical string/other (static, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.String, "The");
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test.BluesBrother, new identity_test._Norman.new());
        minitest.expect(e1 == s1, false);
        minitest.expect(e1 == s2, false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(s1 == e1, false);
        minitest.expect(s2 == e1, false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
      }, VoidToNull()));
      minitest.test('Identical string/other (static, non-null)', dart.fn(() => {
        let e1 = "The";
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
      }, VoidToNull()));
      minitest.test('Identical string/other (dynamic, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.String, "The");
        let d1 = identity_test.hideNull(core.String, "The");
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test._Norman, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
        minitest.expect(core.identical(d1, s1), false);
        minitest.expect(core.identical(d1, s2), false);
        minitest.expect(core.identical(d1, i1), false);
        minitest.expect(core.identical(d1, i2), false);
        minitest.expect(core.identical(d1, l1), false);
        minitest.expect(core.identical(d1, b1), false);
        minitest.expect(core.identical(s1, d1), false);
        minitest.expect(core.identical(s2, d1), false);
        minitest.expect(core.identical(i1, d1), false);
        minitest.expect(core.identical(i2, d1), false);
        minitest.expect(core.identical(l1, d1), false);
        minitest.expect(core.identical(b1, d1), false);
      }, VoidToNull()));
      minitest.test('Identical string/other (dynamic, non-null)', dart.fn(() => {
        let e1 = "The";
        let d1 = "The";
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
        minitest.expect(d1 === s1, false);
        minitest.expect(d1 === s2, false);
        minitest.expect(d1 === i1, false);
        minitest.expect(d1 === i2, false);
        minitest.expect(d1 === l1, false);
        minitest.expect(d1 === b1, false);
        minitest.expect(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1 === d1, false);
        minitest.expect(b1 === d1, false);
      }, VoidToNull()));
    }, VoidToNull()));
    minitest.group('Boolean identity', dart.fn(() => {
      minitest.test('Identical bool/bool (nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.bool, true);
        let e2 = identity_test.hideNull(core.bool, false);
        let d1 = identity_test.hideNull(core.bool, true);
        let d2 = identity_test.hideNull(core.bool, false);
        let o1 = identity_test.hideNull(core.Object, true);
        let o2 = identity_test.hideNull(core.Object, false);
        minitest.expect(e1 == e1, true);
        minitest.expect(core.identical(e1, d1), true);
        minitest.expect(core.identical(e1, o1), true);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(e1, o2), false);
        minitest.expect(core.identical(e1, d2), false);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(d1, e1), true);
        minitest.expect(core.identical(d1, d1), true);
        minitest.expect(core.identical(d1, o1), true);
        minitest.expect(core.identical(d1, e2), false);
        minitest.expect(core.identical(d1, d2), false);
        minitest.expect(core.identical(d1, o2), false);
        minitest.expect(core.identical(o1, e1), true);
        minitest.expect(core.identical(o1, d1), true);
        minitest.expect(core.identical(o1, o1), true);
        minitest.expect(core.identical(o1, e2), false);
        minitest.expect(core.identical(o1, d2), false);
        minitest.expect(core.identical(o1, o2), false);
      }, VoidToNull()));
      minitest.test('Identical bool/bool (non-null)', dart.fn(() => {
        let e1 = true;
        let e2 = false;
        let d1 = true;
        let d2 = false;
        let o1 = true;
        let o2 = false;
        minitest.expect(e1 === e1, true);
        minitest.expect(e1 === d1, true);
        minitest.expect(e1 === o1, true);
        minitest.expect(e1 === e2, false);
        minitest.expect(e1 === o2, false);
        minitest.expect(e1 === d2, false);
        minitest.expect(e1 === e2, false);
        minitest.expect(d1 === e1, true);
        minitest.expect(d1 === d1, true);
        minitest.expect(d1 === o1, true);
        minitest.expect(d1 === e2, false);
        minitest.expect(d1 === d2, false);
        minitest.expect(d1 === o2, false);
        minitest.expect(o1 === e1, true);
        minitest.expect(o1 === d1, true);
        minitest.expect(o1 === o1, true);
        minitest.expect(o1 === e2, false);
        minitest.expect(o1 === d2, false);
        minitest.expect(o1 === o2, false);
      }, VoidToNull()));
      minitest.test('Identical bool/other (static, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.bool, true);
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test.BluesBrother, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
      }, VoidToNull()));
      minitest.test('Identical bool/other (static, non-null)', dart.fn(() => {
        let e1 = true;
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
      }, VoidToNull()));
      minitest.test('Identical bool/other (dynamic, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.bool, true);
        let d1 = identity_test.hideNull(core.bool, true);
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test._Norman, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
        minitest.expect(core.identical(d1, s1), false);
        minitest.expect(core.identical(d1, s2), false);
        minitest.expect(core.identical(d1, i1), false);
        minitest.expect(core.identical(d1, i2), false);
        minitest.expect(core.identical(d1, l1), false);
        minitest.expect(core.identical(d1, b1), false);
        minitest.expect(core.identical(s1, d1), false);
        minitest.expect(core.identical(s2, d1), false);
        minitest.expect(core.identical(i1, d1), false);
        minitest.expect(core.identical(i2, d1), false);
        minitest.expect(core.identical(l1, d1), false);
        minitest.expect(core.identical(b1, d1), false);
      }, VoidToNull()));
      minitest.test('Identical bool/other (dynamic, non-null)', dart.fn(() => {
        let e1 = true;
        let d1 = true;
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
        minitest.expect(d1 === s1, false);
        minitest.expect(d1 === s2, false);
        minitest.expect(d1 === i1, false);
        minitest.expect(d1 === i2, false);
        minitest.expect(d1 === l1, false);
        minitest.expect(d1 === b1, false);
        minitest.expect(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1 === d1, false);
        minitest.expect(b1 === d1, false);
      }, VoidToNull()));
    }, VoidToNull()));
    minitest.group('String identity', dart.fn(() => {
      minitest.test('Identical string/string (nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.String, "The");
        let e2 = identity_test.hideNull(core.String, "Band");
        let d1 = identity_test.hideNull(core.String, "The");
        let d2 = identity_test.hideNull(core.String, "Band");
        let o1 = identity_test.hideNull(core.Object, "The");
        let o2 = identity_test.hideNull(core.Object, "Band");
        minitest.expect(e1 == e1, true);
        minitest.expect(core.identical(e1, d1), true);
        minitest.expect(core.identical(e1, o1), true);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(e1, o2), false);
        minitest.expect(core.identical(e1, d2), false);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(d1, e1), true);
        minitest.expect(core.identical(d1, d1), true);
        minitest.expect(core.identical(d1, o1), true);
        minitest.expect(core.identical(d1, e2), false);
        minitest.expect(core.identical(d1, d2), false);
        minitest.expect(core.identical(d1, o2), false);
        minitest.expect(core.identical(o1, e1), true);
        minitest.expect(core.identical(o1, d1), true);
        minitest.expect(core.identical(o1, o1), true);
        minitest.expect(core.identical(o1, e2), false);
        minitest.expect(core.identical(o1, d2), false);
        minitest.expect(core.identical(o1, o2), false);
      }, VoidToNull()));
      minitest.test('Identical string/string (non-null)', dart.fn(() => {
        let e1 = "The";
        let e2 = "Band";
        let d1 = "The";
        let d2 = "Band";
        let o1 = "The";
        let o2 = "Band";
        minitest.expect(e1 === e1, true);
        minitest.expect(e1 === d1, true);
        minitest.expect(e1 === o1, true);
        minitest.expect(e1 === e2, false);
        minitest.expect(e1 === o2, false);
        minitest.expect(e1 === d2, false);
        minitest.expect(e1 === e2, false);
        minitest.expect(d1 === e1, true);
        minitest.expect(d1 === d1, true);
        minitest.expect(d1 === o1, true);
        minitest.expect(d1 === e2, false);
        minitest.expect(d1 === d2, false);
        minitest.expect(d1 === o2, false);
        minitest.expect(o1 === e1, true);
        minitest.expect(o1 === d1, true);
        minitest.expect(o1 === o1, true);
        minitest.expect(o1 === e2, false);
        minitest.expect(o1 === d2, false);
        minitest.expect(o1 === o2, false);
      }, VoidToNull()));
      minitest.test('Identical string/other (static, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.String, "The");
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test.BluesBrother, new identity_test._Norman.new());
        minitest.expect(e1 == s1, false);
        minitest.expect(e1 == s2, false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(s1 == e1, false);
        minitest.expect(s2 == e1, false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
      }, VoidToNull()));
      minitest.test('Identical string/other (static, non-null)', dart.fn(() => {
        let e1 = "The";
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
      }, VoidToNull()));
      minitest.test('Identical string/other (dynamic, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.String, "The");
        let d1 = identity_test.hideNull(core.String, "The");
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test._Norman, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
        minitest.expect(core.identical(d1, s1), false);
        minitest.expect(core.identical(d1, s2), false);
        minitest.expect(core.identical(d1, i1), false);
        minitest.expect(core.identical(d1, i2), false);
        minitest.expect(core.identical(d1, l1), false);
        minitest.expect(core.identical(d1, b1), false);
        minitest.expect(core.identical(s1, d1), false);
        minitest.expect(core.identical(s2, d1), false);
        minitest.expect(core.identical(i1, d1), false);
        minitest.expect(core.identical(i2, d1), false);
        minitest.expect(core.identical(l1, d1), false);
        minitest.expect(core.identical(b1, d1), false);
      }, VoidToNull()));
      minitest.test('Identical string/other (dynamic, non-null)', dart.fn(() => {
        let e1 = "The";
        let d1 = "The";
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
        minitest.expect(d1 === s1, false);
        minitest.expect(d1 === s2, false);
        minitest.expect(d1 === i1, false);
        minitest.expect(d1 === i2, false);
        minitest.expect(d1 === l1, false);
        minitest.expect(d1 === b1, false);
        minitest.expect(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1 === d1, false);
        minitest.expect(b1 === d1, false);
      }, VoidToNull()));
    }, VoidToNull()));
    minitest.group('Number identity', dart.fn(() => {
      minitest.test('Identical int/int (nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.int, 11);
        let e2 = identity_test.hideNull(core.int, 12);
        let d1 = identity_test.hideNull(core.int, 11);
        let d2 = identity_test.hideNull(core.int, 12);
        let o1 = identity_test.hideNull(core.Object, 11);
        let o2 = identity_test.hideNull(core.Object, 12);
        minitest.expect(e1 == e1, true);
        minitest.expect(core.identical(e1, d1), true);
        minitest.expect(core.identical(e1, o1), true);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(e1, o2), false);
        minitest.expect(core.identical(e1, d2), false);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(d1, e1), true);
        minitest.expect(core.identical(d1, d1), true);
        minitest.expect(core.identical(d1, o1), true);
        minitest.expect(core.identical(d1, e2), false);
        minitest.expect(core.identical(d1, d2), false);
        minitest.expect(core.identical(d1, o2), false);
        minitest.expect(core.identical(o1, e1), true);
        minitest.expect(core.identical(o1, d1), true);
        minitest.expect(core.identical(o1, o1), true);
        minitest.expect(core.identical(o1, e2), false);
        minitest.expect(core.identical(o1, d2), false);
        minitest.expect(core.identical(o1, o2), false);
      }, VoidToNull()));
      minitest.test('Identical int/int (non-null)', dart.fn(() => {
        let e1 = 11;
        let e2 = 12;
        let d1 = 11;
        let d2 = 12;
        let o1 = 11;
        let o2 = 12;
        minitest.expect(e1 === e1, true);
        minitest.expect(e1 === d1, true);
        minitest.expect(e1 === o1, true);
        minitest.expect(e1 === e2, false);
        minitest.expect(e1 === o2, false);
        minitest.expect(e1 === d2, false);
        minitest.expect(e1 === e2, false);
        minitest.expect(d1 === e1, true);
        minitest.expect(d1 === d1, true);
        minitest.expect(d1 === o1, true);
        minitest.expect(d1 === e2, false);
        minitest.expect(d1 === d2, false);
        minitest.expect(d1 === o2, false);
        minitest.expect(o1 === e1, true);
        minitest.expect(o1 === d1, true);
        minitest.expect(o1 === o1, true);
        minitest.expect(o1 === e2, false);
        minitest.expect(o1 === d2, false);
        minitest.expect(o1 === o2, false);
      }, VoidToNull()));
      minitest.test('Identical int/other (static, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.int, 11);
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test.BluesBrother, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(e1 == i1, false);
        minitest.expect(e1 == i2, false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(i1 == e1, false);
        minitest.expect(i2 == e1, false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
      }, VoidToNull()));
      minitest.test('Identical int/other (static, non-null)', dart.fn(() => {
        let e1 = 11;
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
      }, VoidToNull()));
      minitest.test('Identical int/other (dynamic, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(core.int, 11);
        let d1 = identity_test.hideNull(core.int, 11);
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test._Norman, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
        minitest.expect(core.identical(d1, s1), false);
        minitest.expect(core.identical(d1, s2), false);
        minitest.expect(core.identical(d1, i1), false);
        minitest.expect(core.identical(d1, i2), false);
        minitest.expect(core.identical(d1, l1), false);
        minitest.expect(core.identical(d1, b1), false);
        minitest.expect(core.identical(s1, d1), false);
        minitest.expect(core.identical(s2, d1), false);
        minitest.expect(core.identical(i1, d1), false);
        minitest.expect(core.identical(i2, d1), false);
        minitest.expect(core.identical(l1, d1), false);
        minitest.expect(core.identical(b1, d1), false);
      }, VoidToNull()));
      minitest.test('Identical int/other (dynamic, non-null)', dart.fn(() => {
        let e1 = 11;
        let d1 = 11;
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
        minitest.expect(d1 === s1, false);
        minitest.expect(d1 === s2, false);
        minitest.expect(d1 === i1, false);
        minitest.expect(d1 === i2, false);
        minitest.expect(d1 === l1, false);
        minitest.expect(d1 === b1, false);
        minitest.expect(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1 === d1, false);
        minitest.expect(b1 === d1, false);
      }, VoidToNull()));
    }, VoidToNull()));
    minitest.group('Object identity', dart.fn(() => {
      minitest.test('Identical object/object (nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(identity_test._Jake, new identity_test._Jake.new());
        let e2 = identity_test.hideNull(identity_test._Elwood, new identity_test._Elwood.new());
        let d1 = identity_test.hideNull(identity_test._Jake, e1);
        let d2 = identity_test.hideNull(identity_test._Elwood, new identity_test._Elwood.new());
        let o1 = identity_test.hideNull(core.Object, e1);
        let o2 = identity_test.hideNull(core.Object, new identity_test._Elwood.new());
        minitest.expect(e1 == e1, true);
        minitest.expect(core.identical(e1, d1), true);
        minitest.expect(core.identical(e1, o1), true);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(e1, o2), false);
        minitest.expect(core.identical(e1, d2), false);
        minitest.expect(e1 == e2, false);
        minitest.expect(core.identical(d1, e1), true);
        minitest.expect(core.identical(d1, d1), true);
        minitest.expect(core.identical(d1, o1), true);
        minitest.expect(core.identical(d1, e2), false);
        minitest.expect(core.identical(d1, d2), false);
        minitest.expect(core.identical(d1, o2), false);
        minitest.expect(core.identical(o1, e1), true);
        minitest.expect(core.identical(o1, d1), true);
        minitest.expect(core.identical(o1, o1), true);
        minitest.expect(core.identical(o1, e2), false);
        minitest.expect(core.identical(o1, d2), false);
        minitest.expect(core.identical(o1, o2), false);
      }, VoidToNull()));
      minitest.test('Identical object/object (non-null)', dart.fn(() => {
        let e1 = new identity_test._Jake.new();
        let e2 = new identity_test._Elwood.new();
        let d1 = e1;
        let d2 = new identity_test._Elwood.new();
        let o1 = e1;
        let o2 = new identity_test._Elwood.new();
        minitest.expect(e1 === e1, true);
        minitest.expect(e1 === d1, true);
        minitest.expect(e1 === o1, true);
        minitest.expect(e1 === e2, false);
        minitest.expect(e1 === o2, false);
        minitest.expect(e1 === d2, false);
        minitest.expect(e1 === e2, false);
        minitest.expect(d1 === e1, true);
        minitest.expect(d1 === d1, true);
        minitest.expect(d1 === o1, true);
        minitest.expect(d1 === e2, false);
        minitest.expect(d1 === d2, false);
        minitest.expect(d1 === o2, false);
        minitest.expect(o1 === e1, true);
        minitest.expect(o1 === d1, true);
        minitest.expect(o1 === o1, true);
        minitest.expect(o1 === e2, false);
        minitest.expect(o1 === d2, false);
        minitest.expect(o1 === o2, false);
      }, VoidToNull()));
      minitest.test('Identical object/other (static, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(identity_test._Jake, new identity_test._Jake.new());
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test.BluesBrother, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(e1 == l1, false);
        minitest.expect(e1 == b1, false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(l1 == e1, false);
        minitest.expect(b1 == e1, false);
      }, VoidToNull()));
      minitest.test('Identical object/other (static, non-null)', dart.fn(() => {
        let e1 = new identity_test._Jake.new();
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
      }, VoidToNull()));
      minitest.test('Identical object/other (dynamic, nullable)', dart.fn(() => {
        let e1 = identity_test.hideNull(identity_test._Jake, new identity_test._Jake.new());
        let d1 = identity_test.hideNull(identity_test._Jake, new identity_test._Jake.new());
        let s1 = identity_test.hideNull(core.String, "hello");
        let s2 = identity_test.hideNull(core.String, "");
        let i1 = identity_test.hideNull(core.int, 3);
        let i2 = identity_test.hideNull(core.int, 0);
        let l1 = identity_test.hideNull(core.List, core.List.new(3));
        let b1 = identity_test.hideNull(identity_test._Norman, new identity_test._Norman.new());
        minitest.expect(core.identical(e1, s1), false);
        minitest.expect(core.identical(e1, s2), false);
        minitest.expect(core.identical(e1, i1), false);
        minitest.expect(core.identical(e1, i2), false);
        minitest.expect(core.identical(e1, l1), false);
        minitest.expect(core.identical(e1, b1), false);
        minitest.expect(core.identical(s1, e1), false);
        minitest.expect(core.identical(s2, e1), false);
        minitest.expect(core.identical(i1, e1), false);
        minitest.expect(core.identical(i2, e1), false);
        minitest.expect(core.identical(l1, e1), false);
        minitest.expect(core.identical(b1, e1), false);
        minitest.expect(core.identical(d1, s1), false);
        minitest.expect(core.identical(d1, s2), false);
        minitest.expect(core.identical(d1, i1), false);
        minitest.expect(core.identical(d1, i2), false);
        minitest.expect(core.identical(d1, l1), false);
        minitest.expect(core.identical(d1, b1), false);
        minitest.expect(core.identical(s1, d1), false);
        minitest.expect(core.identical(s2, d1), false);
        minitest.expect(core.identical(i1, d1), false);
        minitest.expect(core.identical(i2, d1), false);
        minitest.expect(core.identical(l1, d1), false);
        minitest.expect(core.identical(b1, d1), false);
      }, VoidToNull()));
      minitest.test('Identical object/other (dynamic, non-null)', dart.fn(() => {
        let e1 = new identity_test._Jake.new();
        let d1 = new identity_test._Jake.new();
        let s1 = "hello";
        let s2 = "";
        let i1 = 3;
        let i2 = 0;
        let l1 = core.List.new(3);
        let b1 = new identity_test._Norman.new();
        minitest.expect(e1 === s1, false);
        minitest.expect(e1 === s2, false);
        minitest.expect(e1 === i1, false);
        minitest.expect(e1 === i2, false);
        minitest.expect(e1 === l1, false);
        minitest.expect(e1 === b1, false);
        minitest.expect(s1 === e1, false);
        minitest.expect(s2 === e1, false);
        minitest.expect(i1 === e1, false);
        minitest.expect(i2 === e1, false);
        minitest.expect(l1 === e1, false);
        minitest.expect(b1 === e1, false);
        minitest.expect(d1 === s1, false);
        minitest.expect(d1 === s2, false);
        minitest.expect(d1 === i1, false);
        minitest.expect(d1 === i2, false);
        minitest.expect(d1 === l1, false);
        minitest.expect(d1 === b1, false);
        minitest.expect(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1 === d1, false);
        minitest.expect(b1 === d1, false);
      }, VoidToNull()));
    }, VoidToNull()));
    minitest.group('Null/undefined identity', dart.fn(() => {
      minitest.test('Identical object/other (static, null)', dart.fn(() => {
        let n = identity_test.hideNull(identity_test.BluesBrother, null);
        let u1 = identity_test.getUndefined(core.String);
        let u2 = identity_test.getUndefined(core.int);
        let u3 = identity_test.getUndefined(core.bool);
        let u4 = identity_test.getUndefined(core.List);
        minitest.expect(n == n, true);
        minitest.expect(core.identical(n, u1), true);
        minitest.expect(core.identical(n, u2), true);
        minitest.expect(core.identical(n, u3), true);
        minitest.expect(n == u4, true);
        minitest.expect(core.identical(u1, n), true);
        minitest.expect(core.identical(u2, n), true);
        minitest.expect(core.identical(u3, n), true);
        minitest.expect(u4 == n, true);
      }, VoidToNull()));
      minitest.test('Identical String/other (static, null)', dart.fn(() => {
        let u1 = identity_test.getUndefined(identity_test.BluesBrother);
        let n = identity_test.hideNull(core.String, null);
        let u2 = identity_test.getUndefined(core.int);
        let u3 = identity_test.getUndefined(core.bool);
        let u4 = identity_test.getUndefined(core.List);
        minitest.expect(n == n, true);
        minitest.expect(core.identical(n, u1), true);
        minitest.expect(core.identical(n, u2), true);
        minitest.expect(core.identical(n, u3), true);
        minitest.expect(core.identical(n, u4), true);
        minitest.expect(core.identical(u1, n), true);
        minitest.expect(core.identical(u2, n), true);
        minitest.expect(core.identical(u3, n), true);
        minitest.expect(core.identical(u4, n), true);
      }, VoidToNull()));
      minitest.test('Identical int/other (static, null)', dart.fn(() => {
        let u1 = identity_test.getUndefined(identity_test.BluesBrother);
        let u2 = identity_test.getUndefined(core.String);
        let n = identity_test.hideNull(core.int, null);
        let u3 = identity_test.getUndefined(core.bool);
        let u4 = identity_test.getUndefined(core.List);
        minitest.expect(n == n, true);
        minitest.expect(core.identical(n, u1), true);
        minitest.expect(core.identical(n, u2), true);
        minitest.expect(core.identical(n, u3), true);
        minitest.expect(core.identical(n, u4), true);
        minitest.expect(core.identical(u1, n), true);
        minitest.expect(core.identical(u2, n), true);
        minitest.expect(core.identical(u3, n), true);
        minitest.expect(core.identical(u4, n), true);
      }, VoidToNull()));
      minitest.test('Identical bool/other (static, null)', dart.fn(() => {
        let u1 = identity_test.getUndefined(identity_test.BluesBrother);
        let u2 = identity_test.getUndefined(core.String);
        let u3 = identity_test.getUndefined(core.int);
        let n = identity_test.hideNull(core.bool, null);
        let u4 = identity_test.getUndefined(core.List);
        minitest.expect(n == n, true);
        minitest.expect(core.identical(n, u1), true);
        minitest.expect(core.identical(n, u2), true);
        minitest.expect(core.identical(n, u3), true);
        minitest.expect(core.identical(n, u4), true);
        minitest.expect(core.identical(u1, n), true);
        minitest.expect(core.identical(u2, n), true);
        minitest.expect(core.identical(u3, n), true);
        minitest.expect(core.identical(u4, n), true);
      }, VoidToNull()));
      minitest.test('Identical List/other (static, null)', dart.fn(() => {
        let u1 = identity_test.getUndefined(identity_test.BluesBrother);
        let u2 = identity_test.getUndefined(core.String);
        let u3 = identity_test.getUndefined(core.int);
        let u4 = identity_test.getUndefined(core.bool);
        let n = identity_test.hideNull(core.List, null);
        minitest.expect(n == n, true);
        minitest.expect(n == u1, true);
        minitest.expect(core.identical(n, u2), true);
        minitest.expect(core.identical(n, u3), true);
        minitest.expect(core.identical(n, u4), true);
        minitest.expect(u1 == n, true);
        minitest.expect(core.identical(u2, n), true);
        minitest.expect(core.identical(u3, n), true);
        minitest.expect(core.identical(u4, n), true);
      }, VoidToNull()));
    }, VoidToNull()));
  };
  dart.fn(identity_test.main, VoidTodynamic());
  dart.trackLibraries("identity_test", {
    "identity_test.dart": identity_test
  }, null);
  // Exports:
  return {
    identity_test: identity_test
  };
});
