blob: fcc5dff17f9d00bebe06d301526e390b4f69a654 [file] [log] [blame]
// 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 A [set] literal [<E>{elem_1 ... elem_n}] is evaluated as follows:
/// 2. For each element in the [set] literal:
/// i. Evaluate the element's expression to a value value.
/// ii. If element is a spread element:
/// a. If element is null-aware and value is [null], continue to the
/// next element in the literal.
/// b. Evaluate [value.iterator] to a [value] iterator.
/// c. Loop:
/// a. If [iterator.moveNext()] returns [false], exit the loop.
/// b. Evaluate set.add(iterator.current).
/// iii. Else:
/// a. Evaluate [set.add(value)].
/// @description Checks that if element is null-aware and it's [null], nothing
/// added to the result set.
/// @author iarkh@unipro.ru
import "../../Utils/expect.dart";
List list1 = [100, 200, 300, 400, 500];
List list2 = [];
List? list3 = null;
List list4 = [1 ,2, 3, "checkme"];
main() {
Expect.setEquals({}, {...?list3});
Expect.setEquals({1, 2, 4}, {1, 2, ...?list3, 4});
Expect.setEquals({10, 1, 2, 3, "checkme", 100, 200, 300, 400, 500},
{10, ...?list4, ...?list3, ...list1});
// ^^^^
// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
// ^
// [cfe] Operand of null-aware operation '...?' has type 'List<dynamic>' which excludes null.
Expect.setEquals({}, {...?list3, ...?list3, ...?list3});
Expect.setEquals({}, {...list2, ...?list3});
}