// Copyright (c) 2019, 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 If more than one extension applies to a specific member
/// invocation, then we resort to a heuristic to choose one of the extensions to
/// apply. If exactly one of them is "more specific" than all the others, that
/// one is chosen. Otherwise it is a compile-time error.
///
/// An extension with [on] type clause [T1] is more specific than another
/// extension with [on] type clause [T2] iff
///
///   1. The latter extension is declared in a platform library, and the former
///      extension is not
///   2. they are both declared in platform libraries or both declared in
///      non-platform libraries, and
///   3. the instantiated type (the type after applying type inference from the
///      receiver) of [T1] is a subtype of the instantiated type of [T2] and
///      either
///   4. not vice versa, or
///   5. the instantiate-to-bounds type of [T1] is a subtype of the
///      instantiate-to-bounds type of [T2] and not vice versa.
/// @description Check that:
/// For [x.best()], the most specific one is [BestList]. Because [List<int>] is a
/// proper subtype of both [iterable<int>] and [<List<num>], we expect BestList
/// to be the best implementation. The return type causes [v] to have type [int].
/// If we had chosen [BestSpec] instead, the return type could only be [num],
/// which is one of the reasons why we choose the most specific instantiated type
/// as the winner.
/// For [y.best()], the most specific extension is [BestSpec]. The instantiated
/// on types that are compared are [Iterable<num>] for [BestCom] and [List<num>]
/// for the two other. Using the instantiate-to-bounds types as tie-breaker, we
/// find that [List<Object>] is less precise than [List<num>], so the code of
/// [BestSpec] has more precise information available for its method
/// implementation. The type of [w] becomes [num].
/// @author iarkh@unipro.ru


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

extension BestCom<T extends num> on Iterable<T> {
  T best() { throw ""; }
}
extension BestList<T> on List<T> {
  T best() { return this[0]; }
}

extension BestSpec on List<num> {
  num best() { return 0; }
}

main() {
  List<int> x = [1, 2, 3];
  Expect.equals(1, x.best());
  List<num> y = [1, 2, 3];
  Expect.equals(0, y.best());
}
