// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:expect/minitest.dart';

/// Both kinds.
enum Music { country, western }

class BluesBrother {}

// This class does not override object equality
class _Jake extends BluesBrother {}

/// This class overrides object equality
class _Elwood extends BluesBrother {
  bool operator ==(Object other) {
    return (other is _Elwood);
  }
}

/// Mock BluesBrother
class _Norman extends BluesBrother {}

/// Hide nullability from the simple minded null analysis
T hideNull<T>(T x) => x;

/// Generate undefined at a type
T getUndefined<T>() => (List(1))[0];

main() {
  group('Enum identity', () {
    // Test identity of two enums, various types, nullable
    test('Identical enum/enum (nullable)', () {
      Music e1 = hideNull(Music.country);
      Music e2 = hideNull(Music.western);
      dynamic d1 = hideNull(Music.country);
      dynamic d2 = hideNull(Music.western);
      Object o1 = hideNull(Music.country);
      Object o2 = hideNull(Music.western);
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of two enums, various types, non-nullable
    test('Identical enum/enum (non-null)', () {
      Music e1 = Music.country;
      Music e2 = Music.western;
      dynamic d1 = Music.country;
      dynamic d2 = Music.western;
      Object o1 = Music.country;
      Object o2 = Music.western;
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of enum and other types (static, nullable)
    test('Identical enum/other (static, nullable)', () {
      Music e1 = hideNull(Music.country);
      String s1 = hideNull("hello");
      String s2 = hideNull("");
      int i1 = hideNull(3);
      int i2 = hideNull(0);
      List l1 = hideNull(List(3));
      BluesBrother b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of enum and other types (static, non-null)
    test('Identical enum/other (static, non-null)', () {
      Music e1 = Music.country;
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of enum and other types (dynamic, nullable)
    test('Identical enum/other (dynamic, nullable)', () {
      Music e1 = hideNull(Music.country);
      dynamic d1 = hideNull(Music.country);
      dynamic s1 = hideNull("hello");
      dynamic s2 = hideNull("");
      dynamic i1 = hideNull(3);
      dynamic i2 = hideNull(0);
      dynamic l1 = hideNull(List(3));
      dynamic b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });

    // Test identity of enum and other types (dynamic, non-null)
    test('Identical enum/other (dynamic, non-null)', () {
      Music e1 = Music.country;
      dynamic d1 = Music.country;
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });
  });

  group('String identity', () {
    // Test identity of two strings, various types, nullable
    test('Identical string/string (nullable)', () {
      String e1 = hideNull("The");
      String e2 = hideNull("Band");
      dynamic d1 = hideNull("The");
      dynamic d2 = hideNull("Band");
      Object o1 = hideNull("The");
      Object o2 = hideNull("Band");
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of two strings, various types, non-nullable
    test('Identical string/string (non-null)', () {
      String e1 = "The";
      String e2 = "Band";
      dynamic d1 = "The";
      dynamic d2 = "Band";
      Object o1 = "The";
      Object o2 = "Band";
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of string and other types (static, nullable)
    test('Identical string/other (static, nullable)', () {
      String e1 = hideNull("The");
      String s1 = hideNull("hello");
      String s2 = hideNull("");
      int i1 = hideNull(3);
      int i2 = hideNull(0);
      List l1 = hideNull(List(3));
      BluesBrother b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of string and other types (static, non-null)
    test('Identical string/other (static, non-null)', () {
      String e1 = "The";
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of string and other types (dynamic, nullable)
    test('Identical string/other (dynamic, nullable)', () {
      String e1 = hideNull("The");
      dynamic d1 = hideNull("The");
      dynamic s1 = hideNull("hello");
      dynamic s2 = hideNull("");
      dynamic i1 = hideNull(3);
      dynamic i2 = hideNull(0);
      dynamic l1 = hideNull(List(3));
      dynamic b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });

    // Test identity of string and other types (dynamic, non-null)
    test('Identical string/other (dynamic, non-null)', () {
      String e1 = "The";
      dynamic d1 = "The";
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });
  });

  group('Boolean identity', () {
    // Test identity of two bools, various types, nullable
    test('Identical bool/bool (nullable)', () {
      bool e1 = hideNull(true);
      bool e2 = hideNull(false);
      dynamic d1 = hideNull(true);
      dynamic d2 = hideNull(false);
      Object o1 = hideNull(true);
      Object o2 = hideNull(false);
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of two bools, various types, non-nullable
    test('Identical bool/bool (non-null)', () {
      bool e1 = true;
      bool e2 = false;
      dynamic d1 = true;
      dynamic d2 = false;
      Object o1 = true;
      Object o2 = false;
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of bool and other types (static, nullable)
    test('Identical bool/other (static, nullable)', () {
      bool e1 = hideNull(true);
      String s1 = hideNull("hello");
      String s2 = hideNull("");
      int i1 = hideNull(3);
      int i2 = hideNull(0);
      List l1 = hideNull(List(3));
      BluesBrother b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of bool and other types (static, non-null)
    test('Identical bool/other (static, non-null)', () {
      bool e1 = true;
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of bool and other types (dynamic, nullable)
    test('Identical bool/other (dynamic, nullable)', () {
      bool e1 = hideNull(true);
      dynamic d1 = hideNull(true);
      dynamic s1 = hideNull("hello");
      dynamic s2 = hideNull("");
      dynamic i1 = hideNull(3);
      dynamic i2 = hideNull(0);
      dynamic l1 = hideNull(List(3));
      dynamic b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });

    // Test identity of bool and other types (dynamic, non-null)
    test('Identical bool/other (dynamic, non-null)', () {
      bool e1 = true;
      dynamic d1 = true;
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });
  });

  group('String identity', () {
    // Test identity of two strings, various types, nullable
    test('Identical string/string (nullable)', () {
      String e1 = hideNull("The");
      String e2 = hideNull("Band");
      dynamic d1 = hideNull("The");
      dynamic d2 = hideNull("Band");
      Object o1 = hideNull("The");
      Object o2 = hideNull("Band");
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of two strings, various types, non-nullable
    test('Identical string/string (non-null)', () {
      String e1 = "The";
      String e2 = "Band";
      dynamic d1 = "The";
      dynamic d2 = "Band";
      Object o1 = "The";
      Object o2 = "Band";
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of string and other types (static, nullable)
    test('Identical string/other (static, nullable)', () {
      String e1 = hideNull("The");
      String s1 = hideNull("hello");
      String s2 = hideNull("");
      int i1 = hideNull(3);
      int i2 = hideNull(0);
      List l1 = hideNull(List(3));
      BluesBrother b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of string and other types (static, non-null)
    test('Identical string/other (static, non-null)', () {
      String e1 = "The";
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of string and other types (dynamic, nullable)
    test('Identical string/other (dynamic, nullable)', () {
      String e1 = hideNull("The");
      dynamic d1 = hideNull("The");
      dynamic s1 = hideNull("hello");
      dynamic s2 = hideNull("");
      dynamic i1 = hideNull(3);
      dynamic i2 = hideNull(0);
      dynamic l1 = hideNull(List(3));
      dynamic b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });

    // Test identity of string and other types (dynamic, non-null)
    test('Identical string/other (dynamic, non-null)', () {
      String e1 = "The";
      dynamic d1 = "The";
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });
  });

  group('Number identity', () {
    // Test identity of two ints, various types, nullable
    test('Identical int/int (nullable)', () {
      int e1 = hideNull(11);
      int e2 = hideNull(12);
      dynamic d1 = hideNull(11);
      dynamic d2 = hideNull(12);
      Object o1 = hideNull(11);
      Object o2 = hideNull(12);
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of two ints, various types, non-nullable
    test('Identical int/int (non-null)', () {
      int e1 = 11;
      int e2 = 12;
      dynamic d1 = 11;
      dynamic d2 = 12;
      Object o1 = 11;
      Object o2 = 12;
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of int and other types (static, nullable)
    test('Identical int/other (static, nullable)', () {
      int e1 = hideNull(11);
      String s1 = hideNull("hello");
      String s2 = hideNull("");
      int i1 = hideNull(3);
      int i2 = hideNull(0);
      List l1 = hideNull(List(3));
      BluesBrother b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of int and other types (static, non-null)
    test('Identical int/other (static, non-null)', () {
      int e1 = 11;
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of int and other types (dynamic, nullable)
    test('Identical int/other (dynamic, nullable)', () {
      int e1 = hideNull(11);
      dynamic d1 = hideNull(11);
      dynamic s1 = hideNull("hello");
      dynamic s2 = hideNull("");
      dynamic i1 = hideNull(3);
      dynamic i2 = hideNull(0);
      dynamic l1 = hideNull(List(3));
      dynamic b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });

    // Test identity of int and other types (dynamic, non-null)
    test('Identical int/other (dynamic, non-null)', () {
      int e1 = 11;
      dynamic d1 = 11;
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });
  });

  group('Object identity', () {
    // Test identity of two objects, various types, nullable
    test('Identical object/object (nullable)', () {
      _Jake e1 = hideNull(_Jake());
      _Elwood e2 = hideNull(_Elwood());
      dynamic d1 = hideNull(e1);
      dynamic d2 = hideNull(_Elwood());
      Object o1 = hideNull(e1);
      Object o2 = hideNull(_Elwood());
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of two objects, various types, non-nullable
    test('Identical object/object (non-null)', () {
      _Jake e1 = _Jake();
      _Elwood e2 = _Elwood();
      dynamic d1 = e1;
      dynamic d2 = _Elwood();
      Object o1 = e1;
      Object o2 = _Elwood();
      expect(identical(e1, e1), true);
      expect(identical(e1, d1), true);
      expect(identical(e1, o1), true);
      expect(identical(e1, e2), false);
      expect(identical(e1, o2), false);
      expect(identical(e1, d2), false);
      expect(identical(e1, e2), false);
      expect(identical(d1, e1), true);
      expect(identical(d1, d1), true);
      expect(identical(d1, o1), true);
      expect(identical(d1, e2), false);
      expect(identical(d1, d2), false);
      expect(identical(d1, o2), false);
      expect(identical(o1, e1), true);
      expect(identical(o1, d1), true);
      expect(identical(o1, o1), true);
      expect(identical(o1, e2), false);
      expect(identical(o1, d2), false);
      expect(identical(o1, o2), false);
    });

    // Test identity of object and other types (static, nullable)
    test('Identical object/other (static, nullable)', () {
      _Jake e1 = hideNull(_Jake());
      String s1 = hideNull("hello");
      String s2 = hideNull("");
      int i1 = hideNull(3);
      int i2 = hideNull(0);
      List l1 = hideNull(List(3));
      BluesBrother b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of object and other types (static, non-null)
    test('Identical object/other (static, non-null)', () {
      _Jake e1 = _Jake();
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);
    });

    // Test identity of object and other types (dynamic, nullable)
    test('Identical object/other (dynamic, nullable)', () {
      _Jake e1 = hideNull(_Jake());
      dynamic d1 = hideNull(_Jake());
      dynamic s1 = hideNull("hello");
      dynamic s2 = hideNull("");
      dynamic i1 = hideNull(3);
      dynamic i2 = hideNull(0);
      dynamic l1 = hideNull(List(3));
      dynamic b1 = hideNull(_Norman());

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });

    // Test identity of object and other types (dynamic, non-null)
    test('Identical object/other (dynamic, non-null)', () {
      _Jake e1 = _Jake();
      dynamic d1 = _Jake();
      String s1 = "hello";
      String s2 = "";
      int i1 = 3;
      int i2 = 0;
      List l1 = List(3);
      BluesBrother b1 = _Norman();

      expect(identical(e1, s1), false);
      expect(identical(e1, s2), false);
      expect(identical(e1, i1), false);
      expect(identical(e1, i2), false);
      expect(identical(e1, l1), false);
      expect(identical(e1, b1), false);

      expect(identical(s1, e1), false);
      expect(identical(s2, e1), false);
      expect(identical(i1, e1), false);
      expect(identical(i2, e1), false);
      expect(identical(l1, e1), false);
      expect(identical(b1, e1), false);

      expect(identical(d1, s1), false);
      expect(identical(d1, s2), false);
      expect(identical(d1, i1), false);
      expect(identical(d1, i2), false);
      expect(identical(d1, l1), false);
      expect(identical(d1, b1), false);

      expect(identical(s1, d1), false);
      expect(identical(s2, d1), false);
      expect(identical(i1, d1), false);
      expect(identical(i2, d1), false);
      expect(identical(l1, d1), false);
      expect(identical(b1, d1), false);
    });
  });

  // Test that null receiver with undefined argument is handled correctly
  group('Null/undefined identity', () {
    // Test identity of null object and other types
    test('Identical object/other (static, null)', () {
      BluesBrother n = hideNull(null);
      String u1 = getUndefined();
      int u2 = getUndefined();
      bool u3 = getUndefined();
      List u4 = getUndefined();

      expect(identical(n, n), true);

      expect(identical(n, u1), true);
      expect(identical(n, u2), true);
      expect(identical(n, u3), true);
      expect(identical(n, u4), true);

      expect(identical(u1, n), true);
      expect(identical(u2, n), true);
      expect(identical(u3, n), true);
      expect(identical(u4, n), true);
    });

    // Test identity of null string and other types
    test('Identical String/other (static, null)', () {
      BluesBrother u1 = getUndefined();
      String n = hideNull(null);
      int u2 = getUndefined();
      bool u3 = getUndefined();
      List u4 = getUndefined();

      expect(identical(n, n), true);

      expect(identical(n, u1), true);
      expect(identical(n, u2), true);
      expect(identical(n, u3), true);
      expect(identical(n, u4), true);

      expect(identical(u1, n), true);
      expect(identical(u2, n), true);
      expect(identical(u3, n), true);
      expect(identical(u4, n), true);
    });

    // Test identity of null int and other types
    test('Identical int/other (static, null)', () {
      BluesBrother u1 = getUndefined();
      String u2 = getUndefined();
      int n = hideNull(null);
      bool u3 = getUndefined();
      List u4 = getUndefined();

      expect(identical(n, n), true);

      expect(identical(n, u1), true);
      expect(identical(n, u2), true);
      expect(identical(n, u3), true);
      expect(identical(n, u4), true);

      expect(identical(u1, n), true);
      expect(identical(u2, n), true);
      expect(identical(u3, n), true);
      expect(identical(u4, n), true);
    });

    // Test identity of null bool and other types
    test('Identical bool/other (static, null)', () {
      BluesBrother u1 = getUndefined();
      String u2 = getUndefined();
      int u3 = getUndefined();
      bool n = hideNull(null);
      List u4 = getUndefined();

      expect(identical(n, n), true);

      expect(identical(n, u1), true);
      expect(identical(n, u2), true);
      expect(identical(n, u3), true);
      expect(identical(n, u4), true);

      expect(identical(u1, n), true);
      expect(identical(u2, n), true);
      expect(identical(u3, n), true);
      expect(identical(u4, n), true);
    });

    // Test identity of null List and other types
    test('Identical List/other (static, null)', () {
      BluesBrother u1 = getUndefined();
      String u2 = getUndefined();
      int u3 = getUndefined();
      bool u4 = getUndefined();
      List n = hideNull(null);

      expect(identical(n, n), true);

      expect(identical(n, u1), true);
      expect(identical(n, u2), true);
      expect(identical(n, u3), true);
      expect(identical(n, u4), true);

      expect(identical(u1, n), true);
      expect(identical(u2, n), true);
      expect(identical(u3, n), true);
      expect(identical(u4, n), true);
    });
  });
}
