// 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 Note that a parameter that is not used in a superexpression that
/// is restricted to certain types can be a constant of any type. For example
/// class A {
///   final m;
///   const A(this.m);
/// }
/// can be instantiated via const A(const[]);
///
/// @description Test that different types of constants are valid parameters
/// of constant constructor if this parameter is not used in superexpression
///
/// @author sgrekhov@unipro.ru

import "../../../../Utils/expect.dart";

class A {
  final m;
  const A(this.m);
}

main() {
  const a1 = const A(1);
  const a2 = const A("");
  const a3 = const A(null);
  const a4 = const A(false);

  const x1 = const A(a1);
  const x2 = const A(a2);
  const x3 = const A(a3);
  const x4 = const A(a4);

  Expect.equals(1, x1.m.m);
  Expect.equals("", x2.m.m);
  Expect.equals(null, x3.m.m);
  Expect.equals(false, x4.m.m);
}
