// 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 The function type (T1, ... Tn, {Tx1 x1, ..., Txk xk}) -> T is a
 * subtype of the function type (S1, ..., Sn, {Sy1 y1, ..., Sym ym }) -> S, if
 * all of the following conditions are met:
 * 1. Either
 *    • S is void, Or
 *    • T ⇐⇒ S.
 * 2. ∀i ∈ 1..n, Ti ⇐⇒ Si .
 * 3. k ≥ m and yi ∈ {x1 , ..., xk }, i ∈ 1..m.
 * 4. For all yi ∈ {y1 , ..., ym }, yi = xj ⇒ Tj ⇐⇒ Si.
 * @description Checks that function type t1 is not a subtype of function type
 * t2 if the type of a single named optional parameter of t1 is not assignable
 * to the type of t2's single named optional parameter.
 * @author rodionov
 */
import "../../../Utils/expect.dart";

class A {}
class B {}

typedef t1({int p});
typedef t2({A? p});
typedef t3({List<A> p});
typedef t4({t1? p});

main() {
  Expect.isFalse(({double p = 3.14}) {} is t1);
  Expect.isFalse(({bool p = false}) {} is t1);
  Expect.isFalse(({A? p}) {} is t1);
  Expect.isFalse(({List<int> p = const [3, 1, 4]}) {} is t1);
  Expect.isFalse(({t2? p}) {} is t1);

  Expect.isFalse(({double p = 3.14}) {} is t2);
  Expect.isFalse(({bool p = false}) {} is t2);
  Expect.isFalse(({List<int> p = const [3, 1, 4]}) {} is t2);
  Expect.isFalse(({t2? p}) {} is t2);
  Expect.isFalse(({B? p}) {} is t2);

  Expect.isFalse(({double p = 3.14}) {} is t3);
  Expect.isFalse(({bool p = false}) {} is t3);
  Expect.isFalse(({A? p}) {} is t3);
  Expect.isFalse(({List<int> p = const <int>[]}) {} is t3);
  Expect.isFalse(({List<B>? p}) {} is t3);
  Expect.isFalse(({t2? p}) {} is t3);

  Expect.isFalse(({double p = 42}) {} is t4);
  Expect.isFalse(({bool p = true}) {} is t4);
  Expect.isFalse(({A? p}) {} is t4);
  Expect.isFalse(({List<int> p = const []}) {} is t4);
  Expect.isFalse(({t2? p}) {} is t4);
  Expect.isFalse(({t3? p}) {} is t4);
  Expect.isFalse(({t4? p}) {} is t4);
}
