/*
 * Copyright (c) 2021, 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.
 */
/**
 * @assertion Note that we do not equate primitive top types. List<void> and
 * List<dynamic> are still considered distinct runtime type objects. Note that
 * we also do not equate Never and Null, and we do not equate function types
 * which differ in the placement of required on parameter types.
 *
 * @description Checks that primitive types are not equal
 * equal
 *
 * @author sgrekhov@unipro.ru
 */
// Requirements=nnbd-weak
import "../../../Utils/expect.dart";

test<T1, T2>() {
  List<T1> l1 = [];
  List<T2> l2 = [];
  Expect.notEquals(l1.runtimeType, l2.runtimeType);
}

main() {
  test<void, dynamic>();
  test<Never, Null>();
  test<void, Null>();
  test<dynamic, Null>();
  test<Never, dynamic>();
  test<Object?, dynamic>();
  test<Never, void>();
}
