// Copyright (c) 2011, 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 A variable declaration statement of the form var v; is equivalent
/// to var v = null;. A variable declaration statement of the form T v; is
/// equivalent to T v = null;.
/// @description Checks that a variable declaration statements of the form var id;
/// and T id; are equivalent to a variable declaration of the form T id = null,
/// regardless of the type T.
/// @author vasya

import '../../../Utils/expect.dart';

class C {}
abstract class I { }
typedef f();

main() {
  var id;
  Expect.equals(null, id);

  bool? id0;
  Expect.equals(null, id0);

  int? id1;
  Expect.equals(null, id1);

  double? d;
  Expect.equals(null, d);

  String? id2;
  Expect.equals(null, id2);

  Object? id3;
  Expect.equals(null, id3);

  C? id4;
  Expect.equals(null, id4);

  I? id5;
  Expect.equals(null, id5);

  List<double>? id6;
  Expect.equals(null, id6);

  Map<int, String>? id7;
  Expect.equals(null, id7);

  f? id8;
  Expect.equals(null, id8);
}

