// 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 CONST_CANONICAL_TYPE(FutureOr<T>) = FutureOr<S>* where S is
/// CONST_CANONICAL_TYPE(T)
///
/// @description Checks that
/// `CONST_CANONICAL_TYPE(FutureOr<Null>) = FutureOr<Null>*`
///
/// @author iarkh@unipro.ru

// Requirements=nnbd-strong

import"dart:async";
import "../../Utils/expect.dart";
import "const_evaluation_lib.dart";

dynamic d = null;
Never n = throw "Should not reach here";

const c1 = C<FutureOr<Null>>(null);

void test1() => c1.test(1);
void test2() => c1.test(null);
void test3() => c1.test(d);
void test4() => c1.test(n);

main() {
  Expect.throws(() => test1());
  test2();
  test3();
  Expect.throws(() => test4());
}
