// Copyright (c) 2016, 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.
// Dart test for type checks involving the void type.

// @dart = 2.9

import "package:expect/expect.dart";

var _str = new StringBuffer();

T run<T>(T f()) {
  _str.write("+");
  var t = f();
  _str.write("-");
  return t;
}

void writeV() {
  _str.write("V");
}

main() {
  {
    var x = run<dynamic>(writeV);
    Expect.equals('+V-', _str.toString());
    Expect.equals(null, x);
    _str.clear();

    var y = run(writeV) as dynamic;
    Expect.equals('+V-', _str.toString());
    Expect.equals(null, y);
    _str.clear();
  }

  // implicit cast
  {
    dynamic d = writeV;
    var x = run<dynamic>(d);
    Expect.equals('+V-', _str.toString());
    Expect.equals(null, x);
    _str.clear();

    var y = run(d);
    Expect.equals('+V-', _str.toString());
    Expect.equals(null, y);
    _str.clear();
  }

  // dynamic dispatch
  {
    dynamic d = run;
    var x = d<dynamic>(writeV);
    Expect.equals('+V-', _str.toString());
    Expect.equals(null, x);
    _str.clear();

    var y = d(writeV);
    Expect.equals('+V-', _str.toString());
    Expect.equals(null, y);
    _str.clear();
  }
}
