// Copyright (c) 2018, 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 = 2.9

/// @assertion The token following a question mark dictates whether it's part of
/// a null-aware operation or the beginning of a new expression.
///
/// @description Checks usage of a null-aware expression when a set literal is
/// declared.
/// @author sgrekhov@unipro.ru

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

class C {
  var n1 = 1 as int;
  static var n2 = 2 as int;
  int x = null;
}

main() {
  C cn = null;

  var v1 = {cn?.x ?? 3, C?.n2, cn?.n1};
  Expect.isTrue(v1 is Set);
  Expect.iterableEquals({3, 2, null}, v1);

  var c = C() as C;

  var v2 = {c?.x ?? 3, C?.n2, c?.n1};
  Expect.isTrue(v2 is Set);
  Expect.iterableEquals({3, 2, 1}, v2);

  var v3 = <int>{c?.x ?? 3, C?.n2, c?.n1};
  Expect.isTrue(v3 is Set);
  Expect.iterableEquals({3, 2, 1}, v3);

  var v4 = <int>{c?.n1 ??= (c as C).x, c?.x ??= 4, C?.n2, c?.x ?? 3};
  Expect.isTrue(v4 is Set);
  Expect.iterableEquals({1, 4, 2}, v4);
}
