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 equality_test = Object.create(null);
  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.setSignature(equality_test.Music, {
    fields: () => ({index: dart.finalFieldType(core.int)})
  });
  dart.defineEnumValues(equality_test.Music, [
    'country',
    'western'
  ]);
  equality_test.BluesBrother = class BluesBrother extends core.Object {};
  (equality_test.BluesBrother.new = function() {
  }).prototype = equality_test.BluesBrother.prototype;
  equality_test._Jake = class _Jake extends equality_test.BluesBrother {};
  (equality_test._Jake.new = function() {
  }).prototype = equality_test._Jake.prototype;
  equality_test._Elwood = class _Elwood extends equality_test.BluesBrother {
    ['=='](other) {
      return equality_test._Elwood.is(other);
    }
  };
  (equality_test._Elwood.new = function() {
  }).prototype = equality_test._Elwood.prototype;
  dart.setSignature(equality_test._Elwood, {
    methods: () => ({'==': dart.fnType(core.bool, [core.Object])})
  });
  equality_test._Norman = class _Norman extends equality_test.BluesBrother {};
  (equality_test._Norman.new = function() {
  }).prototype = equality_test._Norman.prototype;
  equality_test.hideNull = function(T) {
    return x => {
      return x;
    };
  };
  dart.fn(equality_test.hideNull, TToT());
  equality_test.getUndefined = function(T) {
    return () => {
      return T._check(core.List.new(1)[dartx._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(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/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[dartx['==']](e1), false);
        minitest.expect(b1['=='](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[dartx['==']](e1), false);
        minitest.expect(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(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1[dartx['==']](d1), false);
        minitest.expect(b1['=='](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(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/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[dartx['==']](e1), false);
        minitest.expect(b1['=='](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[dartx['==']](e1), false);
        minitest.expect(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(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1[dartx['==']](d1), false);
        minitest.expect(b1['=='](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(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/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[dartx['==']](e1), false);
        minitest.expect(b1['=='](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[dartx['==']](e1), false);
        minitest.expect(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(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1[dartx['==']](d1), false);
        minitest.expect(b1['=='](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(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/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[dartx['==']](e1), false);
        minitest.expect(b1['=='](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[dartx['==']](e1), false);
        minitest.expect(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(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1[dartx['==']](d1), false);
        minitest.expect(b1['=='](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(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/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[dartx['==']](e1), false);
        minitest.expect(b1['=='](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[dartx['==']](e1), false);
        minitest.expect(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(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1[dartx['==']](d1), false);
        minitest.expect(b1['=='](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['=='](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(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/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['=='](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[dartx['==']](e1), false);
        minitest.expect(b1['=='](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['=='](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[dartx['==']](e1), false);
        minitest.expect(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(s1 === d1, false);
        minitest.expect(s2 === d1, false);
        minitest.expect(i1 === d1, false);
        minitest.expect(i2 === d1, false);
        minitest.expect(l1[dartx['==']](d1), false);
        minitest.expect(b1['=='](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
  };
});
