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